說明
TKMapper(通用mapper,以下簡稱tk)。
由於TKMapper有以下特性,值得研究是否有必要引入作公司內部框架,提高開發效率
優勢
1、 不再需要用戶手寫單表的CRUD
2、 相比於公司的工具,不再需要生成單表的Example相關的類,精簡了代碼
3、 提供MBG工具生成實體類和簡單的Mapper和xml,這個Mapper和Xml內用戶可以添加自己的sql代碼
添加依賴
<!-- mysql驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- tk-mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.4</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- 分頁插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.7</version>
</dependency>
添加插件
<!--添加mybatis generator maven插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-generator</artifactId>
<version>1.1.3</version>
</dependency>
</dependencies>
</plugin>
application.yml 配置
server:
port: 8888
spring:
application:
name: demo
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.216.128:3306/wenjunDB?useSSL=false
username: root
password: 123456
mybatis:
configuration:
map-underscore-to-camel-case: true
mapper:
identity: MYSQL # 配置主鍵自動增長(使用MYSQL原生方式)
logging:
level:
com.example.demo.web: debug
# 分頁插件
pagehelper:
reasonable: true
page-size-zero: true
params: pageNum=start;pageSize=limit
support-methods-arguments: true
MapperScan
本文采用掃描packages的方式,或者也可以在生成的註解上使用@Mapper()註解。
@SpringBootApplication
@MapperScan(basePackages = {"com.example.demo.web.mapper"})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
開始使用
以上環境搭建好之後,可以開始着手使用MBG生成代碼。
- 創建通用的Mapper接口
public interface DemoBaseMapper<T> extends BaseMapper<T>, ExampleMapper<T>, MySqlMapper<T> {
}
- 進入項目目錄,運行mvn mybatis-generator:generate -e生成實體類和Mapper文件
@Data
@Table(name = "`UserTable`")
public class Usertable implements Serializable {
@Id
@Column(name = "`id`")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "`name`")
private String name;
}
<!--接口 內容 -->
public interface UsertableMapper extends DemoBaseMapper<Usertable> {
/**
* 此方法由用戶自定義, 同步需要在xml中添加相應的sql,或者使用註解
*
* @return
*/
@Select("select * from UserTable where name like CONCAT('%',#{name},'%')")
public Usertable getUserByName(@Param("name") String name);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!--xml 內容 -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.web.mapper.UsertableMapper" >
<resultMap id="BaseResultMap" type="com.example.demo.web.domain.Usertable" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="descrip" property="descrip" jdbcType="VARCHAR" />
<result column="deleteflag" property="deleteflag" jdbcType="CHAR" />
<result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
<result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
<result column="creater" property="creater" jdbcType="INTEGER" />
<result column="updater" property="updater" jdbcType="INTEGER" />
</resultMap>
</mapper>
以上就可以使用了,但是需要注意以下幾點
1、 數據庫採用的是mysql數據,主鍵id自動增長模式,所以新建數據時,id不需要用戶傳遞,框架會自動更新改id到當前最大id+1
2、 MBG插件的url配置需要加上?nullCatalogMeansCurrent=true,否則自增失效
3、 Mapper接口一經生成,就算表結構變更都無需再生成,否則裏面自定義的方法會被覆蓋掉
4、 分頁插件默認會對代碼順序下的第一條sql執行分頁邏輯
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://192.168.216.128:3306/wenjunDB?nullCatalogMeansCurrent=true" userId="root"
password="123456">
</jdbcConnection>