七.逆向工程
• MyBatis Generator:
• 简称MBG,是一个专门为MyBatis框架使用者定
制的代码生成器,可以快速的根据表生成对应的
映射文件,接口,以及bean类。支持基本的增删
改查,以及QBC风格的条件查询。但是表连接、
存储过程等这些复杂sql的定义需要我们手工编写
• 官方文档地址
http://www.mybatis.org/generator/
• 官方工程地址
https://github.com/mybatis/generator/releases
6.1 导入pom
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<configurationFile>src/main/resources/mbg.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
<!--MBG-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>
6.2 mgb.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>
<!--指定数据库驱动类的路径-->
<classPathEntry location="D:\jar-maven\mysql\mysql-connector-java\5.1.35\mysql-connector-java-5.1.35.jar"/>
<!--
Context标签
targetRuntime=“MyBatis3“可以生成带条件的增删改查
targetRuntime=“MyBatis3Simple“可以生成基本的增删改查
如果再次生成,建议将之前生成的数据删除,避免xml向后追加内容出现的问题。
-->
<context id="DBTables" targetRuntime="MyBatis3">
<!--jdbcConnection:指定如何连接到目标数据库-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis1?allowMultiQueries=true"
userId="root"
password="123"/>
<!--配置java解析器-->
<javaTypeResolver>
<property name="forceBigDecimals" value="fasle"/>
</javaTypeResolver>
<!--
javaModelGenerator:指定javaBean的生成策略
targetPackage:目标包名
targetProject:目标工程
-->
<javaModelGenerator targetPackage="com.itlc.mybatis.bean"
targetProject="src\main\java">
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/>
<!-- 是否对model添加 构造函数 -->
<property name="constructorBased" value="true"/>
<!-- 是否对类CHAR类型的列的数据进行trim操作 -->
<property name="trimStrings" value="true"/>
<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!--
sqlMapGenerator: sql映射生成策略
targetPackage:目标包名
targetProject:目标工程
-->
<sqlMapGenerator targetPackage="com.itlc.mybatis.dao.sqlXml"
targetProject="src\main\java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--javaClientGenerator:指定mapper接口所在的位置-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.itlc.mybatis.dao" targetProject="src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--指定要逆向分析哪些表,根据表创建javabean-->
<table tableName="tbl_dept"/>
<table tableName="tbl_employee"/>
</context>
</generatorConfiguration>
6.3 Idea自动逆向创建
创建成功以后:
6.4 对于逆向创建文件的使用
beanExample是封装查询条件的类
public void testSample() throws Exception{
SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
SqlSession sqlSession=sqlSessionFactory.openSession();
try {
TblEmployeeMapper employeeMapper=sqlSession.getMapper(TblEmployeeMapper.class);
//Example是封装查询条件的
//查询所有
List<TblEmployee> employees=employeeMapper.selectByExample(null);
System.out.println(employees);
//创建一个Criteria,这个Criteria就是拼装查询条件的(模仿QBC)
TblEmployeeExample example=new TblEmployeeExample();
TblEmployeeExample.Criteria criteria1=example.createCriteria();
//拼装and条件 select * where (last_name like ? and gender=?)
criteria1.andLastNameLike("%p%");
criteria1.andGenderEqualTo("0");
//拼装or条件 select * where (last_name like ? and gender=?) or email like "%p%"
TblEmployeeExample.Criteria criteria2=example.createCriteria();
criteria2.andEmailLike("%p%");
example.or(criteria2);
employees=employeeMapper.selectByExample(example);
System.out.println(employees);
}finally {
sqlSession.close();
}
}