浅谈springboot中tk.mapper代码生成器的用法说明

2025-05-29 0 60

问:什么是tk.mapper?

答:这是一个通用的mapper框架,相当于把mybatis的常用数据库操作方法封装了一下,它实现了jpa的规范,简单的查询更新和插入操作都可以直接使用其自带的方法,无需写额外的代码。

而且它还有根据实体的不为空的字段插入和更新的方法,这个是非常好用的哈。

而且它的集成非常简单和方便,下面我来演示下使用它怎么自动生成代码。

pom中引入依赖,这里引入tk.mybatis.mapper的版本依赖是因为在mapper-spring-boot-starter的新版本中没有MapperPlugin这个类,无法提供代码生成的功能,在老版本中有:

?

1

2

3

4

5

6

7

8

9

10

11

12
<!--通用mapper-->

<dependency>

<groupId>tk.mybatis</groupId>

<artifactId>mapper-spring-boot-starter</artifactId>

<version>2.1.5</version>

</dependency>

<!--代码生成使用-->

<dependency>

<groupId>tk.mybatis</groupId>

<artifactId>mapper</artifactId>

<version>3.4.2</version>

</dependency>

配置generatorConfig.xml:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79
<?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>

<!--执行generator插件生成文件的命令: call mvn mybatis-generator:generate -e -->

<!-- 引入配置文件 -->

<properties resource="generator.properties"/>

<!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 -->

<classPathEntry

location="D:\\iflytek\\maven\\repository\\mysql\\mysql-connector-java\\8.0.15\\mysql-connector-java-8.0.15.jar"/>

<!-- 一个数据库一个context -->

<!--defaultModelType="flat" 大数据字段,不分表 -->

<context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">

<!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;

一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->

<property name="autoDelimitKeywords" value="true"/>

<!-- 生成的Java文件的编码 -->

<property name="javaFileEncoding" value="utf-8"/>

<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->

<property name="beginningDelimiter" value="`"/>

<property name="endingDelimiter" value="`"/>

<!-- 格式化java代码 -->

<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>

<!-- 格式化XML代码 -->

<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>

<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>

<!--覆盖xml文件-->

<plugin type="com.xqnode.boot.util.OverwriteXmlPlugin"/>

<!--toString-->

<!--<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>-->

<plugin type="tk.mybatis.mapper.generator.MapperPlugin">

<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>

</plugin>

<!-- 注释 type="com.xqnode.boot.util.CommentGenerator" -->

<commentGenerator>

<property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->

<property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳-->

</commentGenerator>

<!-- jdbc连接 &amp;表示 & -->

<jdbcConnection driverClass="${jdbc.driverClass}"

connectionURL="${jdbc.connectionURL}"

userId="${jdbc.userId}"

password="${jdbc.password}"/>

<!-- 类型转换 -->

<javaTypeResolver>

<!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->

<property name="forceBigDecimals" value="false"/>

</javaTypeResolver>

<!-- 生成实体类地址 -->

<javaModelGenerator targetPackage="com.xqnode.boot.model" targetProject="src/main/java">

<property name="enableSubPackages" value="false"/>

<property name="trimStrings" value="true"/>

</javaModelGenerator>

<!-- 生成mapxml文件 -->

<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">

<property name="enableSubPackages" value="false"/>

</sqlMapGenerator>

<!-- 生成mapxml对应client,也就是接口dao -->

<javaClientGenerator targetPackage="com.xqnode.boot.dao" targetProject="src/main/java"

type="XMLMAPPER">

<property name="enableSubPackages" value="false"/>

</javaClientGenerator>

<!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 -->

<!-- tableName=% 则匹配数据库的所有表,注意将domainObjectName和mapperName置为空-->

<!-- enableCountByExample等设置生成简单的crud操作方法-->

<table tableName="${table.name}" domainObjectName="${domain.object.name}" mapperName="${mapper.name}">

<property name="useActualColumnNames" value="false"/>

<!-- 数据库表主键 -->

<generatedKey column="id" sqlStatement="Mysql" identity="true"/>

</table>

</context>

</generatorConfiguration>

基础配置 generator.properties:

?

1

2

3

4

5

6

7

8

9

10

11

12

13
#jdbc

jdbc.driverClass=com.mysql.cj.jdbc.Driver

jdbc.connectionURL=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&nullCatalogMeansCurrent=true

jdbc.userId=root

jdbc.password=123456

#project

project.name=springboot-mybatis

#table

table.name=t_user

domain.object.name=User

mapper.name=UserMapper

使用代码的方式生成,工具GeneratorUtil:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38
package com.xqnode.boot.util;

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.InputStream;

import java.util.ArrayList;

import java.util.List;

/**

* 代码生成工具 具体的配置在generator.properties中

* create by qingxia4 on 2019/3/7 10:56

*/

public class GeneratorUtil {

public static void main(String[] args) throws Exception {

//MBG 执行过程中的警告信息

List<String> warnings = new ArrayList<>();

//当生成的代码重复时,覆盖原代码

boolean overwrite = true;

//读取我们的 MBG 配置文件

InputStream is = GeneratorUtil.class.getResourceAsStream("/generatorConfig.xml");

ConfigurationParser cp = new ConfigurationParser(warnings);

Configuration config = cp.parseConfiguration(is);

is.close();

DefaultShellCallback callback = new DefaultShellCallback(overwrite);

//创建 MBG

MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);

//执行生成代码

myBatisGenerator.generate(null);

//输出警告信息

for (String warning : warnings) {

System.err.println(warning);

}

System.out.println("-----success-----");

}

}

这里还使用了一个覆盖xml的插件OverwriteXmlPlugin,使用这个插件每次新生成的xml文件会完全覆盖老的xml文件,这个插件已经在上面的generatorConfig.xml中配置过了

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23
package com.xqnode.boot.util;

import java.util.List;

import org.mybatis.generator.api.GeneratedXmlFile;

import org.mybatis.generator.api.IntrospectedTable;

import org.mybatis.generator.api.PluginAdapter;

/**

* @version 1.0.0

*/

public class OverwriteXmlPlugin extends PluginAdapter {

@Override

public boolean validate(List<String> warnings) {

return true;

}

@Override

public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) {

sqlMap.setMergeable(false);

return super.sqlMapGenerated(sqlMap, introspectedTable);

}

}

最后,运行GeneratorUtil 的main方法,就可以生成dao、model和mapper.xml文件了。而且生成的代码非常简洁,这是因为tk.mapper代码生成的插件中已经做了相应的处理。生成的结果如下:

浅谈springboot中tk.mapper代码生成器的用法说明

使用:

首先在application.yml中配置xml和数据模型的位置:

?

1

2

3
mybatis:

mapper-locations: classpath:mapper/*.xml

type-aliases-package: com.xqnode.boot.model

然后在启动类上加上注解@MapperScan(“com.xqnode.boot.dao”)扫描dao的位置,注意这个注解式来自tk.mybatis.spring.annotation包下的,千万别引用错了。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15
package com.xqnode.boot;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication

@MapperScan("com.xqnode.boot.dao")

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

现在就可以编写controller测试了:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57
package com.xqnode.boot.controller;

import cn.hutool.crypto.SecureUtil;

import com.xqnode.boot.dao.UserMapper;

import com.xqnode.boot.model.User;

import org.springframework.web.bind.annotation.*;

import tk.mybatis.mapper.entity.Example;

import javax.annotation.Resource;

import java.util.Date;

import java.util.List;

/**

* created by xiaqing on 2019/3/6 20:11

*/

@RestController

@RequestMapping("/user")

public class UserController {

@Resource

private UserMapper userMapper;

/**

* 查询所有用户

* @return

*/

@GetMapping("/all")

public List<User> findAll() {

return userMapper.selectAll();

}

/**

* 注册新用户

* @param user

* @return

*/

@PostMapping("/registry")

public Integer registry(@RequestBody User user) {

String pwdMd5 = SecureUtil.md5(user.getPassword());

user.setPassword(pwdMd5);

user.setCreateTime(new Date());

return userMapper.insertSelective(user);

}

/**

* 根据登录名修改密码

* @param user

* @return

*/

@PutMapping("/changePwd")

public Integer changePwd(@RequestBody User user) {

String pwdMd5 = SecureUtil.md5(user.getPassword());

user.setPassword(pwdMd5);

Example example = new Example(User.class);

example.createCriteria().andEqualTo("loginName", user.getLoginName());

return userMapper.updateByExampleSelective(user, example);

}

}

接口访问测试一下:

浅谈springboot中tk.mapper代码生成器的用法说明

测试成功!

以上这篇浅谈springboot中tk.mapper代码生成器的用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

原文链接:https://blog.csdn.net/xqnode/article/details/88321464

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 浅谈springboot中tk.mapper代码生成器的用法说明 https://www.kuaiidc.com/116437.html

相关文章

发表评论
暂无评论