前言

后端业务开发,每个表都要用到单表的增删改查等通用方法,而配置了通用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.daodao层的路径。

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);
} }

所有的serviceserviceImpl都分别继承BaseServiceBaseServiceImpl,例如UserServiceUserServiceImpl分别继承BaseServiceBaseServiceImpl:

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的更多相关文章

  1. Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x

    Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x ============================== 蕃薯耀 2018年 ...

  2. SpringBoot第六篇:整合通用Mapper

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10876339.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   在以往的项 ...

  3. Springboot 整合通用mapper和pagehelper展示分页数据(附github源码)

    简介 springboot 设计目的就是为了加速开发,减少xml的配置.如果你不想写配置文件只需要在配置文件添加相对应的配置就能快速的启动的程序. 通用mapp 通用mapper只支持对单表的操作,对 ...

  4. Springboot整合通用mapper

    通用Mapper的分享使用 参考博客 Mybatis的通用mapper和Hibernate一样都实现了JPA接口,简化了数据库的操作 和Hibernate的对比 Hibernate和Mybatis都是 ...

  5. Spring Boot从入门到实战:整合通用Mapper简化单表操作

    数据库访问是web应用必不可少的部分.现今最常用的数据库ORM框架有Hibernate与Mybatis,Hibernate貌似在传统IT企业用的较多,而Mybatis则在互联网企业应用较多.通用Map ...

  6. SpringBoot之集成通用Mapper

    第一种: 1.引入POM坐标,需要同时引入通用mapper和jpa <dependency> <groupId>tk.mybatis</groupId> <a ...

  7. springboot 使用mybatis 通用Mapper,pagehelper

    首先需要maven导入需要的包,这里用的是sqlserver,druid,jtds连接数据库 <dependency> <groupId>com.alibaba</gro ...

  8. Springboot集成mybatis通用Mapper与分页插件PageHelper

    插件介绍 通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及 Example 相关的单表操作.通用 Mapper 是为了解决 MyBatis 使用 ...

  9. SpringBoot学习(六)—— springboot快速整合RabbitMQ

    目录 Rabbit MQ消息队列 简介 Rabbit MQ工作模式 交换机模式 引入RabbitMQ队列 代码实战 Rabbit MQ消息队列 @ 简介 优点 erlang开发,并发能力强. 社区活跃 ...

随机推荐

  1. 【HCIE】ipv6之6to4隧道如何计算48位前缀地址

    6to4隧道支持router-router,host-router,router-host,host-host 采用专用6to4地址,前缀为2002::/16 其中如何结合ipv4地址? 2002:i ...

  2. 如何在Web前端实现CAD图文字全文搜索功能之技术分享

    现状 在CAD看图过程中我们经常会需要用到查找文字的功能,在AutoCAD软件查找一个文字时,可以通过打开左下角输入命令find,输入查找的文字,然后设置查找范围,就可以搜索到需要查询的文字.但在We ...

  3. matplotlib画图工具/绘制散点图

    绘制散点图 import matplotlib.pyplot as plt fig=plt.figure() ax = fig.add_subplot(111) ax.scatter(x,y, s,c ...

  4. linux下can调试工具canutils安装与使用

    0.  编译环境所需要的工具 libsocketcan-0.0.11.tar.bz2 canutils-4.0.6.tar.bz2 下载路径 https://public.pengutronix.de ...

  5. Linux操作系统基本知识

    1.Linux开发环境 2.GCC 2.1GCC工作流程 预处理:只运行 C 预编译器. 宏去掉了,注释没有了 汇编 编译 链接 2.2GCC常用参数选择 选项 解释 -ansi 只支持 ANSI 标 ...

  6. Java-GUI 编程之 JList、JComboBox实现列表框

    目录 JList.JComboBox实现列表框 简单列表框 不强制存储列表项的ListModel和ComboBoxModel 强制存储列表项的DefaultListModel和DefaultCombo ...

  7. Python 散列表查询_进入<哈希函数>为结界的世界

    1. 前言 哈希表或称为散列表,是一种常见的.使用频率非常高的数据存储方案. 哈希表属于抽象数据结构,需要开发者按哈希表数据结构的存储要求进行 API 定制,对于大部分高级语言而言,都会提供已经实现好 ...

  8. 大陆出境海缆TPE APCN NCP APG简介

    目前我国的登陆站主要设立在三个城市 山东 山东青岛登陆站(隶属中国联通) EAC-C2C TPE(美国方向) 上海 上海崇明登陆站(隶属中国电信) APCN2(亚太) NCP(长线--美国,新建,亚太 ...

  9. arthas学习图文记录

    Arthas 是阿里开源的 Java 诊断工具.在线排查问题,无需重启:动态跟踪 Java 代码:实时监控 JVM 状态.Arthas 支持 JDK 6+,支持 Linux/Mac/Windows,采 ...

  10. Nginx报错收集

    在安装完成ngixn之后,访问页面显示空白,报错信息里面有这一条报错信息: tailf /usr/local/nginx/logs/error.log 2018/10/26 10:58:00 [err ...