前言

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

    OAuth 2.1 Draft 当前版本:v2-1-05 失效时间:2022/09/08 本文对部分原文翻译,同时加了一些笔记,以便理解. 单词 译意 identifiler 识别码 Resource ...

  2. iNeuOS工业互联网操作系统,数据点、设备和业务的计算与预警

    目       录 1.      概述... 2 2.      概念解释... 2 3.      数据点的计算与预警... 2 4.      设备的计算与预警... 3 5.      业务的 ...

  3. 2.SSH协议常见问题排错

    一.SSH登录linux服务器密码验证很慢 现象:ssh登录服务器后,输入密码时,验证要等10秒左右,很慢.登录上去后速度正常,这种情况主要有两种可能的原因: 1. DNS反向解析的问题 OpenSS ...

  4. 请收藏,Linux 运维必备的 40 个命令总结,收好了~

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 1.删除0字节文件 find -type f -size ...

  5. MySQL实时在线备份恢复方案

    开源Linux 长按二维码加关注~ 上一篇:2020年MySQL数据库面试题总结 快照和复制技术的结合可以保证我们得到一个实时的在线MySQL备份解决方案. 当主库发生误操作时,只需要恢复备库上的快照 ...

  6. 微信H5页面唤醒APP并传参跳转uniapp

    主要实现是利用微信内置浏览器支持的<wx-open-launch-app>开放标签可以让你的H5网页拉起APP   在链接https://developers.weixin.qq.com/ ...

  7. Java 17 新特性:switch的模式匹配(Preview)

    还记得Java 16中的instanceof增强吗? 通过下面这个例子再回忆一下: Map<String, Object> data = new HashMap<>(); da ...

  8. Vue的computed和watch的使用和区别

    一.computed: 模板内表达式非常便利,可用于简单计算,当模板内放入太多的逻辑时,模板会过重且难以维护:可以使用computed替代 计算属性是基于它们的响应式依赖进行缓存的,当依赖的响应式数据 ...

  9. mybatis 查询返回的类型中字段类型为 List<xx>

    基本类型数组 mapper.xml <resultMap id="xxDtoResultMap" type="com.xx.xxDto"> < ...

  10. MySQL分库分表-理论

    分库分表的几种方式 把一个实例中的多个数据库拆分到不同的实例 把一个库中的表分离到不同的数据库中 数据库分片前的准备 在数据库并发和负载没有达到限制时,不推荐水平拆分 对一个库中的相关表进行水平拆分到 ...