写点什么

SpringBoot 快速整合通用 Mapper

作者:Jeremy Lai
  • 2022-12-01
    广东
  • 本文字数:2430 字

    阅读完需:约 8 分钟

前言

后端业务开发,每个表都要用到单表的增删改查等通用方法,而配置了通用 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>{
}
复制代码


@Servicepublic 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

用户头像

Jeremy Lai

关注

还未添加个人签名 2018-02-12 加入

还未添加个人简介

评论

发布
暂无评论
SpringBoot快速整合通用Mapper_通用Mapper_Jeremy Lai_InfoQ写作社区