Mybatis-Genarator 逆向工程使用
個人開發環境
java環境:Jdk1.8.0_60
編譯器:IntelliJ IDEA 2017.1.4
mysql驅動:mysql-connector-java-5.1.39.jar (用於你逆向工程使用)
Genarator 版本:mybatis-generator-maven-plugin (1.3.6)
源碼連接:待整理
第一步 添加依賴
<!--springBoot相關-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<!--約定版本-->
<properties>
<mybatis-spring-boot>1.2.0</mybatis-spring-boot>
<mysql-connector>5.1.39</mysql-connector>
</properties>
<dependencies>
<!--springBoot相關-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis相關-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot}</version>
</dependency>
<!--mysql驅動相關-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--pojo實用小插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!--依賴不傳遞-->
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- mybatis generator 自動生成代碼插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration> <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
第二步 配置文件
springboot 配置文件:application.yml(src/main/resources/application.yml)
server:
# 服務端口
port: 8083
spring:
datasource:
url: jdbc:mysql://localhost:3306/springcloud-mybatis
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
# Mybatis 配置
mybatis:
typeAliasesPackage: com.fame.entity
mapperLocations: classpath:mapper/*.xml
# 打印sql
logging:
level:
# 配置mapper接口的包路徑
com.fame.mapper : debug
mybatis逆向工程配置文件:generatorConfig.xml(src/main/resources/generator/generatorConfig.xml)
1)配置數據信息 2)修改相關包名 3)配置相關表屬性
<?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>
<!--mysql 連接數據庫jar 這里選擇自己本地位置-->
<classPathEntry location="D:/mysql-connector-java-5.1.39.jar" />
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自動生成的注釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/springcloud-mybatis" userId="root"
password="123456">
</jdbcConnection>
<!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 和
NUMERIC 類型解析為java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="true" />
</javaTypeResolver>
<!-- targetProject:生成PO類的位置 -->
<javaModelGenerator targetPackage="com.fame.entity"
targetProject="src/main/java">
<!-- enableSubPackages:是否讓schema作為包的后綴 -->
<property name="enableSubPackages" value="false" />
<!-- 從數據庫返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置
如果maven工程只是單獨的一個工程,targetProject="src/main/java"
若果maven工程是分模塊的工程,targetProject="所屬模塊的名稱",例如:
targetProject="ecps-manager-mapper",下同-->
<sqlMapGenerator targetPackage="com.fame.mapper"
targetProject="src/main/java">
<!-- enableSubPackages:是否讓schema作為包的后綴 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.fame.mapper"
targetProject="src/main/java">
<!-- enableSubPackages:是否讓schema作為包的后綴 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定數據庫表 ,設置是否要生成Exemple方法-->
<table tableName="tb_user" schema=""
enableCountByExample="false"
enableDeleteByExample="false"
enableUpdateByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false">
<!--去除表明前綴tb_,注意嚴格控制大小寫-->
<domainObjectRenamingRule searchString="^Tb" replaceString="" />
<!--去除列字段前綴,注意嚴格控制大小寫-->
<columnRenamingRule searchString="^sys" replaceString=""/>
</table>
</context>
</generatorConfiguration>
<?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>
<!--mysql 連接數據庫jar 這里選擇自己本地位置-->
<classPathEntry location="D:/mysql-connector-java-5.1.39.jar" />
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自動生成的注釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/springcloud-mybatis" userId="root"
password="123456">
</jdbcConnection>
<!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 和
NUMERIC 類型解析為java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="true" />
</javaTypeResolver>
<!-- targetProject:生成PO類的位置 -->
<javaModelGenerator targetPackage="com.fame.entity"
targetProject="src/main/java">
<!-- enableSubPackages:是否讓schema作為包的后綴 -->
<property name="enableSubPackages" value="false" />
<!-- 從數據庫返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置
如果maven工程只是單獨的一個工程,targetProject="src/main/java"
若果maven工程是分模塊的工程,targetProject="所屬模塊的名稱",例如:
targetProject="ecps-manager-mapper",下同-->
<sqlMapGenerator targetPackage="com.fame.mapper"
targetProject="src/main/java">
<!-- enableSubPackages:是否讓schema作為包的后綴 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.fame.mapper"
targetProject="src/main/java">
<!-- enableSubPackages:是否讓schema作為包的后綴 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定數據庫表 ,設置是否要生成Exemple方法-->
<table tableName="tb_user" schema=""
enableCountByExample="false"
enableDeleteByExample="false"
enableUpdateByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false">
<!--去除表明前綴tb_,注意嚴格控制大小寫-->
<domainObjectRenamingRule searchString="^Tb" replaceString="" />
<!--去除列字段前綴,注意嚴格控制大小寫-->
<columnRenamingRule searchString="^sys" replaceString=""/>
</table>
</context>
</generatorConfiguration>
第三步 逆向工程
方式一
創建generator配置文件,啟動即可
方式二
點擊IDEA右側Maven Project 雙擊Plugins下的mybatis-generator
其中,方式一配置好的文件,也可以在Run Configurations雙擊啟動
注意
:生成的XXXMapper.xml,需要放到(src/main/resource)下.
原因
:IDEA不編譯src的java目錄下的xml文件
第四步 創建Application啟動類
如果是直接創建springboot項目可忽略這一步,我是直接創建的一個Maven項目進行整合。
注意
:加入注解@MapperScan進行mapper接口掃描
@SpringBootApplication
// mapper 接口類掃描包配置
@MapperScan("com.fame.mapper")
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}
這樣就整合完成,可以創建接口進行單元測試了
第五步 實例簡單測試
新增(insert)
/**
* mybatis generator逆向工程 新增測試
*
* @param user 用戶信息
*/
@PostMapping("/add")
public void add(@RequestBody User user) {
// 直接新增
userMapper.insert(user);
// 新增會做非空判斷
userMapper.insertSelective(user);
}
修改(update)
/**
* mybatis generator逆向工程 查詢測試
*
* @param userId 用戶ID
*/
@PutMapping("/update")
public void update(Long userId) {
User user = userMapper.selectByPrimaryKey(userId);
// 通過ID 修改
user.setUsername("大白generator 測試修改操作");
// updateByPrimaryKey 全修改
userMapper.updateByPrimaryKey(user);
// updateByPrimaryKeySelective 選擇user對象不為null 的修改
userMapper.updateByPrimaryKeySelective(user);
// 使用Example Criteria 通過關鍵字修改
UserExample userEmp = new UserExample();
userEmp.or().andIdEqualTo(userId);
// updateByExample 全修改
userMapper.updateByExample(user, userEmp);
// updateByExampleSelective 選擇user對象不為null 的修改
userMapper.updateByExampleSelective(user, userEmp);
}
刪除(delete)
/**
* mybatis generator逆向工程 查詢測試
*
* @param userId 用戶ID
*/
@DeleteMapping("/delete")
public void delete(Long userId) {
// 通過ID 刪除
userMapper.deleteByPrimaryKey(userId);
// 使用Example Criteria 通過關鍵字刪除
UserExample userEmp = new UserExample();
userEmp.or().andIdEqualTo(userId);
userMapper.deleteByExample(userEmp);
}
查詢(select)
/**
* mybatis generator逆向工程 查詢測試
*
* @param userId 用戶ID
*/
@GetMapping("/get")
public void get(Long userId) {
// 通過主鍵ID 獲取用戶信息
User user = userMapper.selectByPrimaryKey(userId);
System.out.println(user);
// 通過example Criteria 查詢
// where id = ?
UserExample userEmp = new UserExample();
userEmp.or().andIdEqualTo(userId);
List<User> users1 = userMapper.selectByExample(userEmp);
System.out.println(users1.get(0));
userEmp.clear();
// where ( id = ? and username =? ) or ( id = ? and age =? )
userEmp.or().andIdEqualTo(userId).andUsernameEqualTo("大白1");
userEmp.or().andIdEqualTo(userId).andAgeEqualTo(22);
List<User> users2 = userMapper.selectByExample(userEmp);
System.out.println(users2.get(0));
}
合計(count)
/**
* mybatis generator逆向工程 合計測試
*/
@GetMapping("/count")
public void count(){
// 查詢全部數據
long countAll = userMapper.countByExample(new UserExample());
System.out.println(countAll);
// 查詢滿足條件的數據
UserExample userEmp = new UserExample();
userEmp.or().andIdEqualTo(1L);
long countByKey = userMapper.countByExample(userEmp);
System.out.println(countByKey);
}