Mybatis的逆向工程

在一般应用mybatis框架时,一般先手动创建数据库表对应的bean,然后手动创建DAO接口,然后手动写mapper文件,最后在应用中调用mapper接口。本篇博客中介绍如何自动创建bean、DAO、mapper文件,以上三种不用手动创建,只需要自动生成,然后在应用中直接调用即可,这就是Mybatis的逆向工程(MyBatis Generator,简称MBG)。MBG是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及bean类。支持基本的增删改查,以及QBC风格的条件查询。但是表连接、存储过程等这些复杂sql的定义需要我们手工编写。

下面以创建一个java工程,操作mysql的PERSON数据库表为例。PERSON库表如下:
Mybatis的逆向工程_第1张图片

在演示mybatis的逆向工程之前除了导入mybatis的jar包,mysql的jar包,还要导入自动生成bean、dao、mapper的逆向工程jar包(该jar包下载位置)。

步骤

一、创建工程结构

在工程src目录下创建放bean的空包com.lzj.mybaits.bean ;在src目录下创建放DAO接口的包com.lzj.mybatis.dao ;在src目录下创建放mapper文件的包conf.mapper

二、在src目录下创建mybatis的配置文件
conf.xml



<configuration>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/lzj_database" />
                <property name="username" value="root" />
                <property name="password" value="lzjlzj" />
            dataSource>
        environment>
    environments>

    
    <mappers>
        <mapper resource="conf/mapper/PersonMapper.xml"/>
    mappers>
configuration>

三、在工程目录下创建MBG的配置文件,用于自动生成代码
配置文件自定义命名为mbg.xml:



<generatorConfiguration>

    
  <context id="DB2Tables" targetRuntime="MyBatis3">
    
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/lzj_database"
        userId="root"
        password="lzjlzj">
    jdbcConnection>

    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    javaTypeResolver>

    
    <javaModelGenerator targetPackage="com.lzj.mybaits.bean" 
            targetProject=".\src">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    javaModelGenerator>

    
    <sqlMapGenerator targetPackage="mapper"  
        targetProject=".\conf">
      <property name="enableSubPackages" value="true" />
    sqlMapGenerator>

    
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.lzj.mybatis.dao"  
        targetProject=".\src">
      <property name="enableSubPackages" value="true" />
    javaClientGenerator>

    
    <table tableName="person" domainObjectName="Person">table>
  context>
generatorConfiguration>

四、创建生成代码的方法

public static void testMbg() throws Exception {
        List warnings = new ArrayList();
        boolean overwrite = true;
        File configFile = new File("mbg.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
                callback, warnings);
        myBatisGenerator.generate(null);
    }

运行该方法,生成了bean、DAO、mapper代码,com.lzj.mybaits.beancom.lzj.mybatis.daoconf.mapper 包下分别有了内容
Mybatis的逆向工程_第2张图片
其中MybaitsTest为测试类,放生成代码的方法和测试方法。

测试:

从上面4步已经生成了需要的bean、DAO、mapper,下面进行测试
测试1:通过主键查询一条记录

    public static void testInsertPerson(){
        String resource = "conf.xml";
        InputStream in = MybaitsTest.class.getClassLoader().getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);   
        SqlSession session = factory.openSession();
        PersonMapper personDao = session.getMapper(PersonMapper.class);
        Person person = personDao.selectByPrimaryKey(1);
        System.out.println("person : " + person);
    }

运行该测试方法,输出结果如下(在生成的Person bean中手动加了toString方法):

person : Person [id=1, name=lzj, phoneBrand=iphone]

测试二:模糊查询
查询name中含有”z”字母,或者主键id大于2的记录

    public static void testInsertPerson2(){
        String resource = "conf.xml";
        InputStream in = MybaitsTest.class.getClassLoader().getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);   
        SqlSession session = factory.openSession();
        PersonMapper personDao = session.getMapper(PersonMapper.class);

        PersonExample example = new PersonExample();
        Criteria criteria1 = example.createCriteria();
        criteria1.andNameLike("%z%");

        Criteria criteria2 = example.createCriteria();
        criteria2.andIdGreaterThan(2);
        example.or(criteria2);
        List persons = personDao.selectByExample(example);
        System.out.println("persons : " + persons);

    }

运行该测试方法,输出内容如下:

persons : [Person [id=1, name=lzj, phoneBrand=iphone], Person [id=3, name=Jerry, phoneBrand=Xxiaomi], Person [id=4, name=Bob, phoneBrand=iphone]]

你可能感兴趣的:(Mybaits)