SpringBoot快速整合通用Mapper
前言
后端业务开发,每个表都要用到单表的增删改查等通用方法,而配置了通用Mapper可以极大的方便使用Mybatis单表的增删改查操作。
通用mapper配置
1、添加maven
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--通用mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<!-- pagehelp -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
2、Application
启动文件添加MapperScan
注解
在springboot启动类添加 tk.mybatis
包下MapperScan
注解
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan("com.springboot.dao")
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
其中com.springboot.dao
是dao
层的路径。
3、Model
添加注解
添加 Table
注解和Id
注解,
Table
填写数据表名id
写在主键字段上
例如下方的User
实体:
@Table(name = "t_user")
public class User {
//主键
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)//自增
private Integer id;
}
4、创建MyMapper
import tk.mybatis.mapper.common.IdsMapper;
import tk.mybatis.mapper.common.Mapper;
public interface MyMapper<T> extends Mapper<T>, IdsMapper<T> {
}
需要实现的通用接口都写在MyMapper
的继承类中,该类的包不能被MapperScan
扫描到。
Mapper<T>
包含了大量的单表操作。IdsMapper<T>
是通过多个id查询和删除的方法。
5、每个dao
继承步骤4的MyMapper
例如UserDao
继承MyMapper<User>
:
public interface UserDao extends MyMapper<User> {
}
通用service
上面配置只是调用dao层可以有默认的增删改查的方法,还是要在对应的service添加增删查改,所以需要写一个通用service,把公共的方法都抽象到一个基础方法中。
BaseService.java
接口:
public interface BaseService<T> {
/**
* 查询所有
*
* @return 返回所有数据
*/
List<T> selectAll();
/**
* 查询数据数量
* @return
*/
int selectCount();
/**
* 添加
*
* @param t 实体
*
* @return
*/
int save(T t);
/**
* 修改
*
* @param t
* 实体
* @return
*/
int updateByPrimaryKey(T t);
/**
* 根据主键删除
*
* @param t 主键
*
* @return
*/
int deleteByPrimaryKey(int t);
}
BaseServiceImpl
实现类:
public class BaseServiceImpl<T> implements BaseService<T> {
@Autowired
private MyMapper<T> mapper;
@Override
public List<T> selectAll() {
return mapper.selectAll();
}
@Override
public int selectCount() {
return mapper.selectCount(null);
}
@Override
public int save(T t) {
return mapper.insert(t);
}
@Override
public int updateByPrimaryKey(T t) {
return mapper.updateByPrimaryKey(t);
}
@Override
public int deleteByPrimaryKey(int t) {
return mapper.deleteByPrimaryKey(t);
}
}
所有的service
和serviceImpl
都分别继承BaseService
和BaseServiceImpl
,例如UserService
和UserServiceImpl
分别继承BaseService
和BaseServiceImpl
:
public interface UserService extends BaseService<User>{
}
@Service
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService{
}
配置完成之后,在对应的controller
调用,比如UserController
:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/add")
public Object add(User user) {
userService.save(user);
return null;
}
@PostMapping("/delete")
public Object delete(@RequestParam Integer id) {
userService.deleteByPrimaryKey(id);
return null;
}
@PostMapping("/update")
public Object update(User user) {
userService.updateByPrimaryKey(user);
return null;
}
@GetMapping("/detail")
public User detail(@RequestParam Integer id) {
User user = userService.selectById(id);
return user;
}
@GetMapping("/list")
public List<User> list() {
List<User> list = userService.list();
return list;
}
}
总结
通用mapper:
- 创建SpringBoot启动文件添加
MapperScan
,扫描dao
层的包。 - 创建
MyMapper<T>
接口,根据自己需求继承要用的接口,比如Mapper<T>
。 - 每个dao接口继承
MyMapper<T>
接口。
通用service
- 创建
BaseService
接口。 BaseServiceImpl
实现类,调用MyMapper<T>
实现增删改查方法。- 每个
service
接口和service
实现类分别继承BaseService
接口和BaseServiceImpl
实现类。 - 每个
controller
就能调用通用方法。
遇到的问题
1、启动报错
required a bean of type 'com.jeremy.data.utils.MyMapper' that could not be found.
没有找到MyMapper
对应的bean
,无法注入。
解决方案:
1、SpringBoot
启动文件添加MapperScan
注解。
2、每个dao
接口都要继承MyMapper
。
以上两个步骤缺一不可。
github源码
https://github.com/jeremylai7/springboot-bootstrap
SpringBoot快速整合通用Mapper的更多相关文章
- Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x
Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x ============================== 蕃薯耀 2018年 ...
- SpringBoot第六篇:整合通用Mapper
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10876339.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 在以往的项 ...
- Springboot 整合通用mapper和pagehelper展示分页数据(附github源码)
简介 springboot 设计目的就是为了加速开发,减少xml的配置.如果你不想写配置文件只需要在配置文件添加相对应的配置就能快速的启动的程序. 通用mapp 通用mapper只支持对单表的操作,对 ...
- Springboot整合通用mapper
通用Mapper的分享使用 参考博客 Mybatis的通用mapper和Hibernate一样都实现了JPA接口,简化了数据库的操作 和Hibernate的对比 Hibernate和Mybatis都是 ...
- Spring Boot从入门到实战:整合通用Mapper简化单表操作
数据库访问是web应用必不可少的部分.现今最常用的数据库ORM框架有Hibernate与Mybatis,Hibernate貌似在传统IT企业用的较多,而Mybatis则在互联网企业应用较多.通用Map ...
- SpringBoot之集成通用Mapper
第一种: 1.引入POM坐标,需要同时引入通用mapper和jpa <dependency> <groupId>tk.mybatis</groupId> <a ...
- springboot 使用mybatis 通用Mapper,pagehelper
首先需要maven导入需要的包,这里用的是sqlserver,druid,jtds连接数据库 <dependency> <groupId>com.alibaba</gro ...
- Springboot集成mybatis通用Mapper与分页插件PageHelper
插件介绍 通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及 Example 相关的单表操作.通用 Mapper 是为了解决 MyBatis 使用 ...
- SpringBoot学习(六)—— springboot快速整合RabbitMQ
目录 Rabbit MQ消息队列 简介 Rabbit MQ工作模式 交换机模式 引入RabbitMQ队列 代码实战 Rabbit MQ消息队列 @ 简介 优点 erlang开发,并发能力强. 社区活跃 ...
随机推荐
- Halo 开源项目学习(二):实体类与数据表
基本介绍 Halo 项目中定义了一些实体类,用于存储博客中的关键数据,如用户信息.文章信息等.在深入学习 Halo 的设计理念与实现过程之前,不妨先学习一下一个完整的博客系统都由哪些元素组成. 实体类 ...
- Python 函数进阶-递归函数
递归函数 什么是递归函数 如果一个函数,可以自己调用自己,那么这个函数就是一个递归函数. 递归,递就是去,归就是回,递归就是一去一回的过程. 递归函数的条件 一般来说,递归需要边界条件,整个递归的结构 ...
- 入行IT,一定要会Linux吗?
现在是21世纪,是科学技术大力发展的一个时代,IT行业已经成为现在的一个非常热门的一个行业,许许多多的人都想要往IT方面发展,找IT方面相关的一个工作.很多想要接触IT行业的初学者伤透了脑筋,我该学什 ...
- C#/VB.NET 在Excel单元格中应用多种字体格式
在Excel中,可对单元格中的字符串设置多种不同样式,通常只需要获取到单元格直接设置样式即可,该方法设置的样式会应用于该单元格中的所有字符.如果需要对单元格中某些字符设置样式,则可以参考本文中的方法. ...
- Blazor Hybrid / MAUI 简介和实战
1. Blazor Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI. 共享使用 .NET 编写的服务 ...
- Spring 源码(12)Spring Bean 的创建过程(3)
继续上一篇Spring Bean的创建过程的解读,上一篇介绍了Spring在创建过程中doGetBean方法,在执行过程中会调用getSingleton方法并且设置一个lambda表达式,这个lamb ...
- Event Loop 是什么?
Event Loop 是什么? 本文写于 2020 年 12 月 6 日 广义上来说 Event Loop 并不是 JavaScript 独有的概念,他是一个计算机的通用概念. 狭义上来说,只有 No ...
- 服务器上详细前后端分离项目搭建(springboot+vue)
介绍:本文用的经典的前后端分离开源项目ruoyi Gitee链接地址:https://gitee.com/y_project/RuoYi 一.拉取项目: 利用Git把项目拉取到本地,也可以直接利用id ...
- Servlet表单数据
1.GET 方法 GET 方法向页面请求发送已编码的用户信息.页面和已编码的信息中间用 ? 字符分隔,如下所示: http://www.test.com/hello?key1=value1&k ...
- iOS全埋点解决方案-数据存储
前言 SDK 需要把事件数据缓冲到本地,待符合一定策略再去同步数据. 一.数据存储策略 在 iOS 应用程序中,从 "数据缓冲在哪里" 这个纬度看,缓冲一般分两种类型. 内 ...