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
Wrapper

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);
    }
}

温馨提示

讲一下可能会遇到的问题。

  1. 部分同学可能会遇到mapper相冲突,比如一个userMapper 和 实现类的baseMapper,启动后报错,会出现需要指定@Primary,那么直接给我们的实体Mapper添加该注解就可以解决了。
  2. 关于不知道Lambda表达式的可以通过查阅lambda基本操作。
  3. 通过MybatisPlus提供的IService的接口,代码可维护性和规范得到大幅度提升。

结束语

关于IService 和ServiceImpl的介绍就到这里了,如有不对欢迎指正。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐