SpringBoot快速整合通用Mapper

前言 后端业务开发,每个表都要用到单表的增删改查等通用方法,而配置了通用Mapper可以极大的方便使用Mybatis单表的增删改查操作。
通用mapper配置 1、添加maven:

org.springframework.boot spring-boot-starter-web tk.mybatis mapper-spring-boot-starter 2.1.5 com.github.pagehelper pagehelper-spring-boot-starter 1.2.3

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 extends Mapper, IdsMapper {}

需要实现的通用接口都写在MyMapper的继承类中,该类的包不能被MapperScan扫描到。
  • Mapper 包含了大量的单表操作。
  • IdsMapper 是通过多个id查询和删除的方法。
5、每个dao继承步骤4的MyMapper
例如UserDao继承MyMapper :
public interface UserDao extends MyMapper { }

通用service 上面配置只是调用dao层可以有默认的增删改查的方法,还是要在对应的service添加增删查改,所以需要写一个通用service,把公共的方法都抽象到一个基础方法中。
BaseService.java接口:
public interface BaseService { /** * 查询所有 * * @return 返回所有数据 */ List 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 implements BaseService {@Autowired private MyMapper mapper; @Override public List 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{}

@Service public class UserServiceImpl extends BaseServiceImpl implements UserService{}

【SpringBoot快速整合通用Mapper】配置完成之后,在对应的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 list() { List list = userService.list(); return list; } }

总结 通用mapper:
  • 创建SpringBoot启动文件添加MapperScan,扫描dao层的包。
  • 创建MyMapper 接口,根据自己需求继承要用的接口,比如Mapper
  • 每个dao接口继承MyMapper接口。
通用service
  • 创建BaseService接口。
  • BaseServiceImpl实现类,调用MyMapper实现增删改查方法。
  • 每个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

    推荐阅读