MyBatis逆向工程详解(四)

一、什么是逆向工程?

  MyBatis Generator 简称MBG,是一个专门为MyBatis框架使用者指定的代码生成器,可以快速的根据生成数据表(单表)生成对应的映射文件(mapper),接口(Dao),以及bean类。支持基本的增、删、查、改,以及QBC风格条件的查询。
  简单的理解,MyBatis逆向工程,就是通过相应插件,自动生成MyBatis数据库连接的一些文件。

官方文档下载地址:
http://mybatis.org/generator/
官方工程地址:
https://github.com/mybatis/generator/releases

二、逆向工程测试

1、在创建的Maven工程中导入逆向工程工具包

<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.7</version>
</dependency>

并且导入逆向工程所需要的其他包:
在这里插入图片描述

2、在项目下面新建一个xml文件,配置数据库连接、指定生成的文件和位置,以及所要生成的数据库表:
数据表:
在这里插入图片描述
在这里插入图片描述
文件中添加内容 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>

	<!-- <context>标签:
		targetRuntime="MyBatis3Simple":生成简单版的CRUD
		MyBatis3:豪华版CRUD
	 -->
  <context id="DB2Tables" targetRuntime="MyBatis3">
      <commentGenerator>
          <!-- 是否去除自动生成的注释 -->
          <property name="suppressAllComments" value="true"/>
      </commentGenerator>

      <!-- jdbcConnection:指定如何连接到目标数据库 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/test?allowMultiQueries=true"
        userId="root"
        password="123456">
    </jdbcConnection>
      <!-- Oracle数据库
	    <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
	        connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
	        userId="yycg"
	        password="yycg">
	    </jdbcConnection>
    -->

	<!-- <javaTypeResolver >类型解析器
	    name="forceBigDecimals" 是否强制转化类型
	默认为false,把JDBC DECIMAL 和NUMERIC类型解析为Integer,为true时
	把JDBC DECIMAL 和NUMERIC类型解析为java.math.BigDecimal
	 -->
    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

	<!-- javaModelGenerator:指定javaBean的生成策略 
	targetPackage="test.model":目标包名
	targetProject="\MyBatisTest\src":目标工程生成目录
	-->
    <javaModelGenerator targetPackage="com.xiaolang.mybatis.bean" targetProject=".\src\main\java">
      <property name="enableSubPackages" value="true" /><!-- enableSubPackages:是否让schema作为包的后缀 -->
      <property name="trimStrings" value="true" />      <!-- 从数据库返回的值被清理前后的空格 -->
    </javaModelGenerator>

	<!-- sqlMapGenerator:sql映射生成策略(生成mapper文件): -->
    <sqlMapGenerator targetPackage="com.xiaolang.mybatis.mapper" targetProject=".\src\main\resources">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

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

	<!-- 指定要逆向分析哪些表:根据表要创建javaBean -->
    <table tableName="dept" domainObjectName="Department"></table>
    <table tableName="emp" domainObjectName="Employee"></table>

      <!-- 有些表的字段需要指定java类型,例如
      <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
        <property name="useActualColumnNames" value="true"/>
        <generatedKey column="ID" sqlStatement="DB2" identity="true" />
        <columnOverride column="DATE_FIELD" property="startDate" />
        <ignoreColumn column="FRED" />
        <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
      </table> -->
  </context>
</generatorConfiguration>

bgm.xml文件中具体每一个标签的意思和属性,可以参考官方文档中。
在这里插入图片描述

3、编写测试代码:

package Test;

import org.junit.Test;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class mbgTest {
    @Test
    public void mbgTest() throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        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);
    }
}

4、执行测试代码结果:
在这里插入图片描述

5、在生成的文件中选取一个方法进行测试即可:
测试代码如下:

//测试带条件查询方法
  @Test
  public void testMyBatis3() throws IOException{
      SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
      SqlSession openSession = sqlSessionFactory.openSession();
      try{
          EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
          //xxxExample就是封装查询条件的
          //1、查询所有
          //List<Employee> emps = mapper.selectByExample(null);
          //2、查询员工名字中有e字母的,和员工性别是1的
          //封装员工查询条件的example
          EmployeeExample example = new EmployeeExample();
          //创建一个Criteria,这个Criteria就是拼装查询条件
          //select id, last_name, email, gender, d_id from tbl_employee
          //WHERE ( last_name like ? and gender = ? ) or email like "%e%"
          EmployeeExample.Criteria criteria = example.createCriteria();
          criteria.andLastNameLike("%e%");
          criteria.andGenderEqualTo("1");

          EmployeeExample.Criteria criteria2 = example.createCriteria();
          criteria2.andLastNameLike("%e%");
          example.or(criteria2);

          List<Employee> list = mapper.selectByExample(example);
          for (Employee employee : list) {
              System.out.println(employee.getId());
          }

      }finally{
          openSession.close();
      }
  }
发布了22 篇原创文章 · 获赞 16 · 访问量 2900

猜你喜欢

转载自blog.csdn.net/qq_25083447/article/details/104561270