目录
1 前言
我本以为Mapper层的类能够继承BaseMapper<XXX>,而不用我们手动写一些mapper方法已经够离谱了。没想到海油膏手,一部分服务层的方法也能不用我们自己写,具体如下。
2 使用方法
2.1 继承ServiceImpl<XXXMapper, XXX>
前提是Mapper层也要继承BaseMapper<XXX>,不然启动项目会报错,示例代码如下:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}
2.2 基础业务开发的使用
比如说:新增用户。那么代码如下,什么都不用写,直接使用自带的方法即可。
public class UserController {
public void saveUser(){
//其它代码...
userService.save(user);
}
}
2.3 复杂业务开发的使用
比如说:根据id扣工资。这里就没有自带的方法给你用,开发流程就和Mybatis差不多了,不过服务层有个地方需要注意,那就是不需要再注入Mapper依赖了,直接使用baseMapper即可,如下。
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
public void deductBalance(xx) {
//就不用@Autowired之类了
baseMapper.deductBalance(xx);
}
}
如果要问为什么,那就是内部已经做了@Autowired的操作了。
2.3 Lambda查询
lambdaQuery()
在上式后面加个点,就会弹出一堆东西,如下,这些都是用来构造查询条件的。
条件构造完之后,再来一个点,就可以选择是查询一条还是多条,如下。
函数 | 作用 |
---|---|
one() | 查询一条 |
list() | 查询多个 |
page() | 分页查询 |
exists() | 判断是否存在 |
count() | 计数 |
最后直接return,是的,Mapper层不需要写了。
public List<User> queryUsers() {
//其它代码...
return lambdaQuery()
.like(xx)
.eq(xx)
.ge(xx)
.list();
}
2.4 Lambda更新
lambdaUpdate()
和Lambda查询差不多,就不多讲了。不过一定要记得在最后加上个update(),如下。
public void deductBalance() {
//其它代码...
lambdaUpdate()
//三个参数分别为,条件,属性名(可以用lambda方法),设置的值
.set(remainBalance == 0, User::getStatus, UserStatus.FROZEN)
.eq(xx)
.update();
}