1. 介绍
MBG是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及bean类。支持基本的增删改查,以及QBC风格的条件查询。但是表连接、存储过程等这些复杂sql的定义需要我们手工编写。
2. 使用
2.1 编写配置文件
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:豪华版的CRUD,可以生成带条件的增删改查
-->
<context id="DB2Tables" targetRuntime="MyBatis3Simple">
<!-- jdbcConnection标签:指定如何连接到目标数据库 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true"
userId="root"
password="123456">
</jdbcConnection>
<!-- 类型解析器:数据库类型与Java类型 -->
<javaTypeResolver>
<!-- 是否强制转换BigDecimal类型 -->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--
javaModelGenerator标签:指定JavaBean的生成策略
targetPackage属性:指定目标包名
targetProject属性:指定目标工程
-->
<javaModelGenerator targetPackage="com.dudu.domain"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- sqlMapGenerator标签:sql映射文件生成策略 -->
<sqlMapGenerator targetPackage="com.dudu.dao"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- javaClientGenerator标签:指定mapper接口所在的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.dudu.dao"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- table标签:指定要逆向分析哪些表,根据表来创建javaBean
tableName属性:表名
domainObjectName:要生成的JavaBean名
-->
<table tableName="tbl_dept" domainObjectName="Department"/>
<table tableName="tbl_employee" domainObjectName="Employee"/>
</context>
</generatorConfiguration>
2.2 运行代码生成器生成代码
@Test
public void test() throws Exception {
List<String> 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);
}
2.3 使用Mybatis3生成的代码的测试说明
@Test
public void test1() throws Exception {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = factory.openSession(true);
EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
//封装查询条件
EmployeeExample example = new EmployeeExample();
EmployeeExample.Criteria criteria = example.createCriteria();
criteria.andGenderEqualTo("0");//性别条件
criteria.andDeptIdEqualTo(1);//部门条件
// 加上或条件(邮箱条件)
EmployeeExample.Criteria criteria1 = example.createCriteria();
criteria1.andEmailLike("%u%");
example.or(criteria1);
List<Employee> employees = mapper.selectByExample(example);
for (Employee employee : employees) {
System.out.println(employee.getLastName());
}
session.close();
}
上述查询生成的SQL语句是:
select id, last_name, gender, email, dept_id from tbl_employee where ( gender = ? and dept_id = ? ) or ( email like ? )
详细配置见MyBatis Generator 详解