SpringBoot学习笔记 - 使用Mybatis-Plus的IService及ServiceImp使用LambdaWrapper链式操作
SpringBoot学习笔记 - 使用Mybatis-Plus的IService及ServiceImp使用LambdaWrapper链式操作
·
SpringBoot学习笔记 - 使用Mybatis-Plus的IService及ServiceImp使用LambdaWrapper链式操作
简介
在最近开发SpringBoot+Mybatis-Plus项目中,在使用Mybatis-Plus提供的IService使用前我一直用apache提供的@Select 和 @Update 注解,或QueryWrapper等 对Dao的交互操作,今天给大家介绍MP提供的LambdaWrapper来进行链式操作。
IService 介绍
IService位于 com.baomidou.mybatisplus.extension.service包下的一个接口规范,接口中包含的一系列的dao层交互操作,一般在服务层进行继承操作。
下图是一张我们今天所要学习的东西,可见包含了基础的Query和Update外,包含了LambdaQuery和LambdaUpdate
ServiceImpl 介绍
ServiceImpl 是IService 的实现类,值得一提的是ServiceImpl有两个泛型参数,一个参数为BaseMapper 也就是你的实体Mapper ,一个是你的实体类。
项目示例
听了一堆概念没明白?好,那接下来我们看看应用场景,以下我用一个Update的示例给大家看看
实体类
User.java
@TableName("r_users") //表名
public class User extends Roles {
public User()
{
}
public User(String uid,String memberUid)
{
this.uid = uid;
this.memberUid = memberUid;
}
@TableId(value = "uid",type = IdType.UUID)
private String uid;
@TableField(value = "member_uid")
private String memberUid;
@TableField(value = "login_date")
private String LoginDate;
@TableField(value = "register_date")
private String RegisterDate;
@TableField(value = "vochers")
private BigDecimal vochers;
@Version
private int version;
}
服务层
UserService.java
/** 用户服务层
*
* @date 2021/11/28
* @author Marinda
*
*/
public interface UserService extends IService<User> {
/** 修改用户
*
* @param user 用户
* @return 修改结果
*/
boolean update(User user);
}
Mapper类
import java.util.List;
/** 用户mapper
* @date 2021/11/16
* @author Marinda
*
*/
public interface UserMapper extends BaseMapper<User> {
}
实现类
@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
/**
* 修改用户
*
* @param user 用户
* @return 修改结果
*/
@Override
public boolean update(User user) {
User sqlEntity = baseMapper.selectById(user.getUid());
if(sqlEntity== null){
return false;
}
user.setVersion(sqlEntity.getVersion());
//乐观锁修改
return lambdaUpdate().eq(User::getUid,user.getUid()).eq(User::getVersion,user.getVersion()).set(User::getVersion,user.getVersion()+1).update(user);
}
}
控制器
/** User控制器
* @date 2021/11/28
* @author Marinda
*
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
/** 修改用户
*
* @param user 用户
* @return 修改结果
*/
@RequestMapping("/update")
public ApiResult update(User user){
return userService.update(user) ? new ApiResult(ApiResult.ON_SUCCESS,ApiResult.SUCCESS_MESSAGE,null) : new ApiResult(ApiResult.ON_FAIL,ApiResult.FAIL_MESSAGE,null);
}
}
温馨提示
讲一下可能会遇到的问题。
- 部分同学可能会遇到mapper相冲突,比如一个userMapper 和 实现类的baseMapper,启动后报错,会出现需要指定@Primary,那么直接给我们的实体Mapper添加该注解就可以解决了。
- 关于不知道Lambda表达式的可以通过查阅lambda基本操作。
- 通过MybatisPlus提供的IService的接口,代码可维护性和规范得到大幅度提升。
结束语
关于IService 和ServiceImpl的介绍就到这里了,如有不对欢迎指正。
更多推荐
已为社区贡献2条内容
所有评论(0)