前言
后端业务开发,每个表都要用到单表的增删改查等通用方法,而配置了通用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.dao
是dao
层的路径。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查询和删除的方法。
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);
}}
所有的
service
和serviceImpl
都分别继承BaseService
和BaseServiceImpl
,例如UserService
和UserServiceImpl
分别继承BaseService
和BaseServiceImpl
: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
接口。
- 创建
BaseService
接口。 BaseServiceImpl
实现类,调用MyMapper
实现增删改查方法。- 每个
service
接口和service
实现类分别继承BaseService
接口和BaseServiceImpl
实现类。 - 每个
controller
就能调用通用方法。
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
推荐阅读
- 数据库|Mall电商实战项目专属学习路线,主流技术一网打尽!
- java|@pathvariable 和 @Requestparam的详细区别
- 小程序食堂订餐点餐项目+后台管理前后分离VUE
- 自动构建工具
- java|安装jdk1.8和配置环境变量
- maven|Maven安装与配置
- eclipse|jQuery ajax(无刷新分页)
- 算法|图神经网络(01)-图与图学习(上)
- java|使用uuid做MySQL主键,被老板,爆怼一顿!