前言

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