说明
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>