Mybatis的逆向工程

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

下面以创建一个java工程,操作mysql的PERSON数据库表为例。PERSON库表如下:
这里写图片描述

在演示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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<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>

    <!-- 指定sql的映射文件,如果有多个,都可以加进来 -->
    <mappers>
        <mapper resource="conf/mapper/PersonMapper.xml"/>
    </mappers>
</configuration>

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>

    <!-- 
        targetRuntime="MyBatis3Simple":生成简单版的CRUD
        MyBatis3:复杂版CURD
     -->
  <context id="DB2Tables" targetRuntime="MyBatis3">
    <!-- jdbcConnection:指定如何连接到目标数据库 -->
    <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:指定javaBean的生成策略 
    targetPackage="test.model":目标包名
    targetProject="\MBGTestProject\src":目标工程
    -->
    <javaModelGenerator targetPackage="com.lzj.mybaits.bean" 
            targetProject=".\src">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <!-- sqlMapGenerator:sql映射生成策略: -->
    <sqlMapGenerator targetPackage="mapper"  
        targetProject=".\conf">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <!-- javaClientGenerator:指定mapper接口所在的位置 -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.lzj.mybatis.dao"  
        targetProject=".\src">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <!-- 指定要逆向分析哪些表:根据表要创建javaBean -->
    <table tableName="person" domainObjectName="Person"></table>
  </context>
</generatorConfiguration>

四、创建生成代码的方法

public static void testMbg() throws Exception {
        List<String> warnings = new ArrayList<String>();
        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 包下分别有了内容
这里写图片描述
其中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<Person> 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]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值