10_SpringBoot集成TkMybatis插件

明天你好向前奔跑 关注

 0.5 2018.09.11 11:15 字数 163 阅读 3794评论 0喜欢 3

@Author Jacky Wang , 转载请注明出处

前提:

基于SpringBoot项目,正常集成Mybatis后,为了简化sql语句的编写,甚至达到无mapper.xml文件。
在本篇总结教程,不在进行SpringBoot集成Mybatis的概述。

如有需要,请查看我另一篇文章 SpringBoot集成MyBatis,这里不再赘述。

一. 实现步骤

1. 引入TkMybatis的Maven依赖
2. 实体类的相关配置,@Id,@Table
3. Mapper继承tkMabatis的Mapper接口
4. 启动类Application或自定义Mybatis配置类上使用@MapperScan注解扫描Mapper接口
5. 在application.properties配置文件中,配置mapper.xml文件指定的位置[可选]
6. 使用TkMybatis提供的sql执行方法 PS :
1. TkMybatis默认使用继承Mapper接口中传入的实体类对象去数据库寻找对应的表,因此如果表名与实体类名不满足对应规则时,会报错,这时使用@Table为实体类指定表。(这种对应规则为驼峰命名规则)
2. 使用TkMybatis可以无xml文件实现数据库操作,只需要继承tkMybatis的Mapper接口即可。
3. 如果有自定义特殊的需求,可以添加mapper.xml进行自定义sql书写,但路径必须与步骤4对应。 6. 如有需要,实现mapper.xml自定义sql语句

二. 实现细节

2.1 引入TkMybatisMaven依赖
        <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
2.2 实体类的配置
TkMybatis默认使用继承Mapper接口中传入的实体类对象去数据库寻找对应的表,因此如果表名与实体类名不满足对应规则时,会报错,这时使用@Table为实体类指定表。(这种对应规则为驼峰命名规则)
下面以一个实体类Custoemr为例: package cn.invengo.middleware.base.model; import java.util.Date; import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table; // @Table指定该实体类对应的表名,如表名为base_customer,类名为BaseCustomer可以不需要此注解
@Table(name = "t_base_customer")
public class Customer { // @Id表示该字段对应数据库表的主键id
// @GeneratedValue中strategy表示使用数据库自带的主键生成策略.
// @GeneratedValue中generator配置为"JDBC",在数据插入完毕之后,会自动将主键id填充到实体类中.类似普通mapper.xml中配置的selectKey标签
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC")
private Long id; private String name; private String code; private String status; private String linkman; private String linkmanPhone; private String remark; private String attr01; private String attr02; private String attr03; private Date createDate; private Date lastUpdate; private Long creater; private Long lastUpdateMan; getter(),setter()方法省略...
}
2.3 Mapper继承tkMabatisMapper接口
import cn.base.model.Customer;
import tk.mybatis.mapper.common.Mapper; /**
* @ClassName: CustomerMapper
* @Description:TODO(Customer数据库操作层)
* @author: wwj
* @date: 2018年8月31日 上午10:12:20
*/
public interface CustomerMapper extends Mapper<Customer> {
}
 
01.png
2.4 启动类Application或自定义Mybatis配置类上使用@MapperScan注解扫描Mapper接口
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer; import tk.mybatis.spring.annotation.MapperScan; @SuppressWarnings("deprecation")
@SpringBootApplication
@MapperScan("cn.base.mapper")
public class MiddlewareApplication extends SpringBootServletInitializer { private static Logger logger = LoggerFactory.getLogger(MiddlewareApplication.class); public static void main(String[] args) { SpringApplication.run(MiddlewareApplication.class, args);
logger.info("Application Start Success!");
} // 当SpringBoot项目打成war包发布时,需要继承SpringBootServletInitializer接口实现该方法
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
2.5 application.properties配置mapper.xml配置文件的扫描路径
mybatis.mapperLocations=classpath*:cn/base/mapper/*.xml
2.6 使用TkMybatis提供的sql执行方法
import java.util.List;
import java.util.Objects; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import cn.invengo.middleware.base.mapper.CustomerMapper;
import cn.invengo.middleware.base.model.Customer;
import cn.invengo.middleware.base.service.BaseCustomerService;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.entity.Example.Criteria; @Service
@Transactional
public class BaseCustomerServiceImpl implements BaseCustomerService { @Autowired
private CustomerMapper customerMapper; @Override
public List<Customer> selectByEntity(Customer customer) {
if(Objects.isNull(customer)) {
customer = new Customer();
}
Example example = new Example(Customer.class);
Criteria criteria = example.createCriteria();
criteria.andEqualTo(customer);
return customerMapper.selectByExample(example);
} @Override
public int insertSelective(Customer customer) {
return customerMapper.insertSelective(customer);
} @Override
public int updateSelectiveById(Customer record) {
return customerMapper.updateByPrimaryKeySelective(record);
}
}
 
02.png
2.7 如有需要,自定义mapper.xml配置文件,完成自定义sql编写
ps:
1. 大多数复杂的需求,都能通过TkMyBatis的组合完成操作。这里以联表查询为例,自定义mapper.xml的sql编写。
2. 该mapper.xml与以往普通方式的mapper.xml文件不同之处在于,这里不需要使用resultMap进行字段的映射。当然如果想在返回的Map中新增返回字段映射直接添加新的字段即可。
使用tkmybatis,在数据模型修改之后,修改代码也较为简便,只需要修改对应实体类中的字段即可。 eg:
ContainerMapper.xml: <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.invengo.middleware.base.mapper.ContainerMapper">
<select
id="selectCodeByDeviceId"
parameterType="java.lang.Long"
resultType="java.lang.String">
SELECT c.`code` FROM
`t_base_container`
c LEFT OUTER JOIN
t_base_device
d ON c.id =
d.container_id
WHERE d.id = #{deviceId,jdbcType=BIGINT};
</select>
</mapper> ps:这里需要注意的是,不要自己在mapper.xml中在书写tkMybatis已经有的一些基础方法了,否则会报错提示方法重复。

本篇总结到此结束。

10_SpringBoot集成TkMybatis插件的更多相关文章

  1. SpringBoot集成TkMybatis插件 (二)

    一.Tkmybatis的好处 Tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效.这个插件里面封装好了我们需要用到的很多sql语句,不过这个插件是通过我们去调用它封装的各种 ...

  2. SpringBoot集成TkMybatis插件

    前提: 基于SpringBoot项目,正常集成Mybatis后,为了简化sql语句的编写,甚至达到无mapper.xml文件. 在本篇总结教程,不在进行SpringBoot集成Mybatis的概述. ...

  3. solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件

    昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...

  4. 记录一次bug解决过程:eclipse集成lombok插件

    一 总结 eclipse集成插件lombok: 启动Spring Boot项目: sublime全局搜索关键字:ctrl + shift + F JDK8中的lambda表达式使用 二 BUG描述:集 ...

  5. Struts2之—集成Json插件实现Ajax

       上篇博客介绍了Struts2中自己定义结果集实现Ajax,也分析了它的缺点:这样自己定义的结果集,写死了,不能做到client须要什么数据就传什么数据:Struts2之-自己定义结果集实现aja ...

  6. sublime 集成git插件,及git常用命令

    以前用了很久的totoiseSVN,显然不够高大上,开发界的版本装x利器还得是git.然而git的命令行对没怎么用过linux的人可能觉得还不如用gitGUI,可是当你知道sublime可以集成git ...

  7. eclipse集成dorado5插件

    dorado5最好使用jdk1.6 32位,与eclipse j2ee indigo版本兼容最好.其他eclipse版本貌似view编辑时按钮点击事件不生效... 现附上安装包链接(均为官方版本): ...

  8. Jetty入门(1-2)eclipse集成jetty插件并发布运行应用

    一.eclipse集成jetty插件 1.从市场安装jetty插件 2.使用jetty插件发布应用和配置运行环境 debug配置默认共用上述run配置 3.使用jetty插件启动运行和停止运行选中的应 ...

  9. eclipse集成testng插件

    一.TestNG简介 TestNG是一个开源自动化测试框架,它受到JUnit和NUnit的启发,而引入了许多新的创新功能,如依赖测试,分组概念,使测试更强大,更容易做到. 它旨在涵盖所有类别的测试:单 ...

随机推荐

  1. python中的Lock

    #Lock.py from multiprocessing import Process,Lock import os def f(l,i): l.acquire() print('hello wor ...

  2. ubuntu卸载virtualbox

    本想在ubuntu下virtualbox,可惜出错了,需要卸载后再安装,只能百度拼凑后再安装: 1.首先是执行删除命令:sudo apt-get remove virtualbox*( 这样就不用去查 ...

  3. monad重新理解

    monad是高阶抽象类型: 包含类型构造器: monad抽象的核心是类型封装和类型转化(map). 实现monad的的类型必须实现(基础)类型的封装和类型转化的功能: 在此基础上实现其他的功能(基本依 ...

  4. F、CSL 的神奇序列 【规律】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)

    题目传送门:https://ac.nowcoder.com/acm/contest/551/F 题目描述 CSL 有一个神奇的无穷实数序列,他的每一项满足如下关系: 对于任意的正整数 n ,有 n∑k ...

  5. canvas二三事之签名板与视频绘制

    今天,不知道怎么的就点开了语雀,然后就看到了<HTML5 Canvas 教程>,开始了canvas的研究(学习)之旅. 首先,想到的第一个东西就是签名板,上代码: <canvas i ...

  6. 了解Session的本质

    有一点我们必须承认,大多数web应用程序都离不开session的使用.这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制. AD: 有一点我们必须承认,大多数web应用程序都离 ...

  7. mongoDB的常用语法

    安装: 到mongodb官网下载安装包或者压缩包:https://www.mongodb.com/download-center?jmp=nav 1.如果是msi包的话则点击按步骤安装,如果是压缩包的 ...

  8. 一篇很好的解释了.Net Core, .Net Framework, .Net standard library, Xamarin 之间关系的文章 (转载)

    Introducing .NET Standard In my last post, I talked about how we want to make porting to .NET Core e ...

  9. Springboot 启动文件报错,原因是@ComponentScan写成了@ComponentScans

    Springboot 启动文件报错,原因是@ComponentScan写成了@ComponentScans

  10. lrzsz Linux服务器Windows互传文件工具

    lrzsz是一款在linux里可代替ftp上传和下载的程序,但只限于较小的文件,如果是目录需要打包成单个文件在实现下载. 条件:需要使用SecureCRT或者Xshell等客户端工具连接Linux 下 ...