12.逆向工程 ( MBG )
MyBatis Generator
简称 MBG
,是一个专门为 MyBatis
框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及 bean
类。支持基本的增删改查,以及 QBC
风格的条件查询。但是表连接、存储过程等这些复杂 sql
的定义需要我们手工编写
1.Maven
xml
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
2.generationConfig.xml
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: 豪华版的CRUD, 支持QBC风格
-->
<context id="mybatisGenerator" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?userSSL=true&useUnicode=true&characterEncoding=UTF-8"
userId="root"
password="1234">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成POJO类的位置 -->
<javaModelGenerator targetPackage="org.hong.pojo"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="org.hong.mapper"
targetProject=".\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="org.hong.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="blog" domainObjectName="Blog"></table>
</context>
</generatorConfiguration>
3.Test
java
public class MyBatisTest {
// 运行这个单元测试, 自动生成
@Test
public void testMbg() throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("IDEA使用绝对路径/generationConfig.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);
}
@Test
public void testMyBatis3(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
try {
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
// 1.查询所有
List<Blog> blogs = mapper.selectByExample(null);
// 2.查询博客标题中带字母s的, 作者名字中带大字的
// blogExample对象封装查询条件
BlogExample blogExample = new BlogExample();
// 3.创建Criteria, 这个Criteria就是拼装查询条件
BlogExample.Criteria criteria = blogExample.createCriteria();
// andXXXYYY表示添加and条件, XXX代表字段名, YYY代表条件(like,is...)
criteria.andTitleLike("%s%");
// 4.添加另外一组添加, 再次创建创建Criteria
BlogExample.Criteria criteria2 = blogExample.createCriteria();
// 设置Criteria的条件
criteria2.andAuthorLike("%大%");
// 5.调用or()表示这组添加与其他Criteria的关系
blogExample.or(criteria2);
blogs = mapper.selectByExample(blogExample);
for (Blog blog : blogs) {
System.out.println(blog);
}
} finally {
sqlSession.close();
}
}
}
运行 Test
会自动生成 mapper
和 pojo
,注意:移动文件后记得改配置文件的 parameterType
、type
等属性。