Mybatis Generator(MBG)通過豐富的配置可以生成不同類型的代碼,代碼包含了數據庫表對應的實體類,Mapper接口類,Mapper XML文件和Example對象等。這些代碼文件中幾乎包含了全部的單表操作方法,使用MBG可以極大程度上方便我們使用Mybatis。
接下來介紹具體的配置過程:
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>
<!--jdbcConnection:指定如何連接到目標數據庫
targetRuntime="MyBatis3Simple":生成簡單版的CRUD
targetRuntime="MyBatis3":生成複雜的CRUD
-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="13579">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--javaModelGenerator:指定Javabean的生成策略
targetPackage ="test.model" 目標包名
argetProject = "\ MBGTestProject \ src" 目標工程
-->
<javaModelGenerator targetPackage ="com.lhk.mybatis.bean" targetProject = ".\src">
<property name ="enableSubPackages" value ="true"/>
<property name ="trimStrings" value = "true"/>
</javaModelGenerator>
<!--sqlMapGenerator:sql映射生成策略
targetPackage ="test.xml" 目標包名
targetProject ="\MBGTestProject\ src" 目標工程
-->
<sqlMapGenerator targetPackage ="conf" targetProject =".\src">
<property name ="enableSubPackages" value ="true"/>
</sqlMapGenerator>
<!--javaClientGenerator:指定mapper接口所在的位置
targetPackage = "test.dao" 目標包名
targetProject = "\ MBGTestProject \ src" 目標工程
-->
<javaClientGenerator type = "XMLMAPPER" targetPackage = "com.lhk.mybatis.dao" targetProject = ".\src">
<property name ="enableSubPackages" value ="true"/>
</javaClientGenerator>
<!--table:指定要逆向生成的表,根據表要創建Javabean
tableName ="tb1_employee" 數據庫中的表名
domainObjectName ="Employee" 對應生成的Javabean類名稱
-->
<table tableName ="tb1_employee" domainObjectName ="Employee">
<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>
<table tableName="tb1_dept" domainObjectName="Department">
<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>
2、添加 mybatis-config.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" />
<!-- 數據庫連接的配置信息 驅動,URL,用戶名,密碼-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="13579" />
</dataSource>
</environment>
</environments>
<!-- 將我們寫好的sql映射文件(EmployeeMapper.xml)一定要註冊到全局配置文件(mybatis-config.xml)中 -->
<mappers>
<mapper resource="conf/EmployeeMapper.xml" />
<mapper resource="conf/DepartmentMapper.xml" />
</mappers>
</configuration>
3、添加MyBatisTest測試類
用於執行MBG配置生成代碼
@Test
public void testMbg() throws Exception{
//MBG執行過程中的警告信息
List<String> warnings = new ArrayList<>();
//當生成代碼重複時,覆蓋原代碼
boolean overwrite = true;
//讀取MBG配置文件
File configFile = new File("E:\\java\\IDEATest\\Mybatis_MBG\\src\\conf\\mbg.xml");
// ...根據需要填寫配置對象......
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
// 創建MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback,warnings);
// 執行生成代碼
myBatisGenerator.generate(null);
}
在通過MBG生成代碼之前,項目的結構爲:
在使用MBG生成代碼後,項目的結構爲:
可以看到通過MBG自動生成了實體類,Mapper接口類,Mapper XML文件和Example對象。
4、測試自動生成的查詢方法
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "conf/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testSimple() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
//查詢員工名字中有e字母的,和員工性別是0的
//封裝員工查詢條件example
EmployeeExample example = new EmployeeExample();
//創建一個Criteria,這個Criteria就是拼裝查詢條件
EmployeeExample.Criteria criteria = example.createCriteria();
criteria.andLast_nameLike("%e%");
criteria.andGenderEqualTo("0");
//添加or查詢,新建一個Criteria,然後example.or(criteria2)
EmployeeExample.Criteria criteria2 = example.createCriteria();
criteria2.andEmailLike("%e%");
example.or(criteria2);
List<Employee> selectList = mapper.selectByExample(example);
for (Employee employee : selectList) {
System.out.println(employee.getId());
}
} finally {
openSession.close();
}
}
查詢結果