Springboot 整合Mybatis 逆向工程(詳解版)
什麼逆向工程
分析資料庫中資料表,自動生成JavaBean(與資料庫表對應的實體類)、dao 接口(資料通路層接口,定義了通路資料的方法)、SQLMap (sql 語句映射檔案,與dao層接口類一一對應)
step1:寫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>
<!-- 在maven中配置了依賴這個就可以注釋掉了-->
<!-- <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--資料庫連接配接資訊-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://10.10.10.10:3306/meeting?useUnicode=true&characterEncoding=utf-8&serverTimezone=CTT"
userId="root"
password="root">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--JavaBean 實體類-->
<javaModelGenerator targetPackage="top.crxk.MyBatisGenerator.entity" targetProject="./src/main/java">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--SQL映射檔案-->
<sqlMapGenerator targetPackage="mapping" targetProject="/Users/crxk/Documents/codeWorld/dhu/Learning/MyBatisGenerator/src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--Mapper接口-->
<javaClientGenerator type="XMLMAPPER" targetPackage="top.crxk.MyBatisGenerator.dao" targetProject="/Users/crxk/Documents/codeWorld/dhu/Learning/MyBatisGenerator/src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--配置所要生成代碼的表-->
<table schema="DB2ADMIN" tableName="task" domainObjectName="Task" >
</table>
</context>
</generatorConfiguration>
關于一些配置項的解釋:
targetPackage
用于配置生成的代碼要放在哪個包裡面, 這個如果沒有的話Mybatis Generator會自動建立。
targetProject
官方定義是
This is used to specify a target project for the generated objects.
用最直白的語句解釋就是:targetPackage所在的目錄,也就是targetPackage的父目錄。
這個目錄是一定要有的,如果沒有的話Mybatis generator不會自動建立。
這裡的路徑可以寫絕對路徑,也可以寫相對路徑,相對路徑是相對于這個xml配置檔案的!
最坑的一點:
關于為什麼Mybatis generator程式運作成功以後,并沒有代碼檔案生成的問題,是因為:
mac和windows有些不一樣
mac下路徑要這樣寫./src
windows下的路徑是這樣寫.\src
這個是很坑的,mbg不會給出錯誤提示!
step2:運作程式生成代碼
Mybatis Generator官方提供了很多種方式來生成代碼,但最好用最靈活的是直接寫一段Java代碼,讀取配置檔案,來生成目标代碼。
package top.crxk.MyBatisGenerator;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class TestMbg {
public static void main(String[] args) throws Exception{
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);
}
}
step3:使用目标代碼
Mybatis Generator生成的代碼提供了非常強大的對于單表的 增删改查的操作。
每一個表mbg會生成四個檔案,以task表為例,分别是
- Task.java
- TaskExample.java
- TaskMapper.java
- TaskMapper.xml
使用TaskExample.java這個類可動态地定義出各種條件查詢子句,滿足對于單個表的各種增删改查的操作,如果不涉及到其他的表,基本上不用和其他檔案打交道了。
舉個例子:
@Controller
@ResponseBody
@RequestMapping("/test")
public class testMbgController {
@Autowired
TaskMapper taskMapper;
@Autowired
TaskExample taskExample;
@RequestMapping("/countByExample")
public long countByExample(int id) {
taskExample.or().andIdEqualTo(id);
return taskMapper.countByExample(taskExample);
}
@RequestMapping("/selectByExample")
public List<Task> selectByExample() {
taskExample.or().andIdEqualTo(12);
return taskMapper.selectByExample(taskExample);
}
}
相關細節
TaskExample.Criteria
主要就是定義各種查詢條件的,是TaskExample的核心。
taskExample.or()
調用taskExample的or()方法,會傳回一個Criteria,Criteria定義了與資料表中各個字段相關的方法,調用這些方法來設定條件,可以鍊式調用以添加多個條件。
taskExample.or().andIdEqualTo(12).andDeviceIdIsNull();
所包含的條件
- IS NULL-表示相關列必須為NULL
- IS NOT NULL-表示相關列不能為NULL
- =(等于)-表示相關列必須等于方法調用中傳遞的值
- <>(不等于)-表示相關列不得等于方法調用中傳遞的值
- >(大于)-表示相關列必須大于方法調用中傳遞的值
- > =(大于或等于)-表示相關列必須大于或等于在方法調用中傳遞的值
- <(小于)-表示相關列必須小于方法調用中傳遞的值
- <=(小于或等于)-表示相關列必須小于或等于在方法調用中傳遞的值
- LIKE-表示相關列必須與方法調用中傳遞的值“相似”。 該代碼未添加必需的’%’,您必須在方法調用中傳遞的值中自行設定該值。
- 不喜歡-意味着相關列必須“不喜歡”方法調用中傳遞的值。 該代碼未添加必需的’%’,您必須在方法調用中傳遞的值中自行設定該值。
- BETWEEN-表示相關列必須在方法調用中傳遞的兩個值之間。
- NOT BETWEEN-表示相關列必須在方法調用中傳遞的兩個值之間“不在”之間。
- IN-表示相關列必須是方法調用中傳入的值清單之一。
- NOT IN-表示相關列不得為方法調用中傳遞的值清單之一。
示例代碼
https://download.csdn.net/download/crxk_/11907671