Spring Boot 整合 TKMybatis 二次简化持久层代码的实现

经常用 MyBatis 的的都知道,使用这个框架存在一个非常不友善的问题就是,就是每操作一个单表就需要自己手写一个 xml 文件,虽然说可以用工具生成 xml 和实体类可以解决这个问题,但是二次开发的时候对某个表字段进行修改的时候,生成 xml 文件就不现实啦。最近发现 tk.mybatis 就非常好的解决了这个问题。tk.mybatis 整合了 MyBatis 框架,在其基础上提供了很多工具,封装了常用的增删改查 SQL 语句,可以让我们的开发效率更高。在这里和大家分享一下。

引入依赖

pom.xml 中引入 mapper-spring-boot-starter 依赖

<!-- druid-spring-boot-starter -->
<dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>druid-spring-boot-starter</artifactId>
 <version>1.1.10</version>
</dependency>

<!-- 数据库连接依赖 -->
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.40</version>
 <scope>runtime</scope>
</dependency>

<!-- mapper-spring-boot-starter -->
<dependency>
 <groupId>tk.mybatis</groupId>
 <artifactId>mapper-spring-boot-starter</artifactId>
 <version>2.0.2</version>
</dependency>

相关配置

application.yml 中添加相关配置

spring:
 datasource:
 druid:
  url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false
  username: root
  password: 123456
  initial-size: 1
  min-idle: 1
  max-active: 20
  test-on-borrow: true
  driver-class-name: com.mysql.jdbc.Driver # MySQL 8.x: com.mysql.cj.jdbc.Driver

mybatis:
 type-aliases-package: # 实体类的存放路径,如:com.antoniopeng.hello.spring.boot.entity
 mapper-locations: classpath:mapper/*.xml # mapper.xml 文件存放路径,这里存放在配置文件目录 resources 下

logging:
 level:
 com.antoniopeng.hello.springboot.mybatis: debug # 配置监听日志

Application 入口类中使用 tk.mybatis.spring.annotation 包下的 @MapperScan 注解指定 Mapper 接口的扫描路径

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

@MapperScan(value = "com.antoniopeng.springboot.mybatis.mapper")
@SpringBootApplication
public class HelloSpringBootMybatisApplication {

 public static void main(String[] args) {
  SpringApplication.run(HelloSpringBootMybatisApplication.class, args);
 }

}

整合 PageHelper 分页插件

引入依赖

pom.xml 中引入 pagehelper-spring-boot-starter 依赖

<!-- pagehelper-spring-boot-starter -->
<dependency>
 <groupId>com.github.pagehelper</groupId>
 <artifactId>pagehelper-spring-boot-starter</artifactId>
 <version>1.2.5</version>
</dependency>

分页查询示例

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@Transactional
@Rollback
public class MyBatisTests {

 @Autowired
 UserService userService;

 /**
 * 测试分页插件
 */
 @Test
 public void testPageHelper() {

	Example example = new Example(User.class);
	 // 查询条件
  example.createCriteria().andEqualTo("userId", "1")
  // 分页参数
  PageHelper.startPage(1, 10, "create_time desc");
  // 获取分页列表数据
  List<User> userList = userService.selectByExample(example);
  PageInfo pageInfo = new PageInfo(userList);
  // 获取列表总数
  int userCount = (int) pageInfo.getTotal();
 }
}

到此这篇关于Spring Boot 整合 TKMybatis 二次简化持久层代码的实现的文章就介绍到这了,更多相关Spring Boot 整合 TKMybatis 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-01-26

在SpringBoot中整合使用Netty框架的详细教程

Netty是一个非常优秀的Socket框架.如果需要在SpringBoot开发的app中,提供Socket服务,那么Netty是不错的选择. Netty与SpringBoot的整合,我想无非就是要整合几个地方 让netty跟springboot生命周期保持一致,同生共死 让netty能用上ioc中的Bean 让netty能读取到全局的配置 整合Netty,提供WebSocket服务 这里演示一个案例,在SpringBoot中使用Netty提供一个Websocket服务. servlet容器本身提

TKmybatis的框架介绍和原理解析

一.TkMybatis Tkmybatis 是基于 Mybatis 框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,不需要写任何 sql 语句,这极大地提高了项目开发效率. 二.怎么用? 1. 引用 在 pom.xml 中引入 tk.mybatis 的引用. <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifact

Spring整合Dubbo框架过程及原理解析

这篇文章主要介绍了Spring整合Dubbo框架过程及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用.演示过程创建两个小工程,一个作为服务的提供者,一个作为服务的消费者.通过Dubbo来实现服务消费者远程调用服务提供者的方法. dubbo 的使用需要一个注册中心,这里以Zookeeper为例来演示 1.Dubbo架构 Dubbo架构图(Dubbo官方提供)如下: 节

详解关于react-redux中的connect用法介绍及原理解析

关于react-redux的一个流程图 流程图 connect用法介绍 connect方法声明: connect([mapStateToProps], [mapDispatchToProps], [mergeProps],[options]) 作用:连接React组件与 Redux store. 参数说明: mapStateToProps(state, ownProps) : stateProps 这个函数允许我们将 store 中的数据作为 props 绑定到组件上. const mapSta

python web框架 django wsgi原理解析

前言 django wsgi python有个自带的wsgi模块 可以写自定义web框架 用wsgi在内部创建socket对象就可以了 自己只写处理函数就可以了 django只是web框架 他也不负责写socket django 依赖wsgi接口创建socket wsgi是一套规则 是一套接口 按照wsgi规则写 以后想封装socket 在内部封装socket就可以了 我只要遵循规则 把wsgi模块一导入 我就可以使用wsgi写的socket了 遵循wsg socketi接口有哪些 这些模块已经

Django框架 信号调度原理解析

Django中提供了"信号调度",用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Django内置信号 Model signals pre_init # django的modal执行其构造方法前,自动触发 post_init # django的modal执行其构造方法后,自动触发 pre_save # django的modal对象保存前,自动触发 post_save # django的modal对象保存后,自动触发 pre_delet

Java RPC框架过滤器机制原理解析

过滤器 字面义上理解的过滤器类似下图,从一堆物品中筛选出符合条件的留下,不符合的丢弃. GOF 职责链 GOF中有一种设计模式叫职责链,或者叫责任链,常规的UML图如下: 正统的职责链是将一个请求发给第一个接收者,接收者判断是否属于自己能处理的,如果能处理则执行操作并中止请求下发,流程到此为止.如果不能处理则将请求下发给下一个接收者一直到最后一个接收者. 变体职责链 上面提到正统的职责链有一个特点:当找到符合条件的执行者后流程中止并不会将请求继续下发给后续的执行者.这类场景比较适合比如审核操作,

Spring Boot 文件上传原理解析

首先我们要知道什么是Spring Boot,这里简单说一下,Spring Boot可以看作是一个框架中的框架--->集成了各种框架,像security.jpa.data.cloud等等,它无须关心配置可以快速启动开发,有兴趣可以了解下自动化配置实现原理,本质上是 spring 4.0的条件化配置实现,深抛下注解,就会看到了. 说Spring Boot 文件上传原理 其实就是Spring MVC,因为这部分工作是Spring MVC做的而不是Spring Boot,那么,SpringMVC又是怎么

微信公众号被动消息回复原理解析

背景:某分厂需要实时查询工件堆放的位置,要求快速便捷,因此设计了采用微信公众号被动回复信息的方案. 技术实现:开发者服务器--基于Angular2框架的已发布网站,编程语言为Python,后台存储数据库为Mysql: 微信服务器--微信公众号,此业务只是处理微信客户端发送的文本信息,且不使用公众号的其他功能,因此不需要认证公众号: 微信客户端--关注公众号的微信使用者,即粉丝. 当粉丝给公众号发送特定的消息时,微信公众号自动回复相应内容,而其背后的实现原理可由下图所示: 由上图可知,粉丝(微信客

thinkPHP框架RBAC实现原理分析

本文实例讲述了thinkPHP框架RBAC实现原理.分享给大家供大家参考,具体如下: RBAC就是:Role Based Access Controller,基于角色(role)的权限(Access)管理,这里简单介绍一下他的原理与实现方式之一. Part 1 数据库设计 首先最基本的组成有:用户(admin),角色(role),具体权限(auth),这三者之间的关系是这样的:一个用户只拥有一种角色,一种角色下拥有多个权限,一个权限也会同时被多个角色拥有,也就是说admin表和role表是一对一

Java设计模式模板方法(Template)原理解析

这篇文章主要介绍了Java设计模式模板方法(Template)原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言: 我们在开发中有很多固定的流程,这些流程有很多步凑是固定的,比如JDBC中获取连接,关闭连接这些流程是固定不变的,变动的只有设置参数,解析结果集这些是根据不同的实体对象"来做调整",针对这种拥有固定算法流程,其中有固定的步凑,存在不固定的步凑的情况下就诞生了模板方法模式. 模板方法模式(Template)定义:

微信小程序wxml列表渲染原理解析

这篇文章主要介绍了微信小程序wxml列表渲染原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 列表渲染存在的意义 以电商为例,我们希望渲染5个商品,而又希望容易改变,我们就要在wxml中动态添加. <view> <block wx:for="{{products}}" wx:for-item="item" wx:key="index"> <view>{{