MyBatis-Plus中常用的Lambda无SQL父类方法

MyBatis-Plus是一个基于MyBatis的增强脚手架,使用其封装好的各类接口可能在实际开发过程无需手写SQL快速完成业务开发,尤其在JDK1.8后的Lambda语法下使用更为方便

所属分类 JAVA

相关标签 MyBatis泛型脚手架

实现说明

为什么通过MyBatis-Plus能够实现快速开发?

深入查看其结构你会发现,MyBatis-Plus某种意义上来说就是一个已经搭建好的开发脚手架。

通过Spring泛型能力,实际业务Service类继承IService类便可调用父类已经封装好的方法。

此外,业务Mapper类继承BaseMapper同理。

MyBatis-Plus核心类:IService、ServiceImpl、BaseMapper(泛型入参)。

关于泛型本文不再过多赘述,很多SSM和SSH整合教程中均有大量描述。

IService常用方法

本文不会全部列举所有方法,仅对常用的方法举例。

调用方法this.

// 插入一条新数据
boolean save(T entity)
// 插入或更新一条数据
// 这里的实现是先查后插(务必注意实体类需要有@TableId主键)
boolean saveOrUpdate(T entity)
//  @TableId(value = "id", type = IdType.AUTO) 主键可以是自增也可以是INPUT
// 批量插入
boolean saveBatch(Collection<T> entityList)
// 批量插入或更新(实际应用为了数据可控不经常直接掉这个方法)
boolean saveOrUpdateBatch(Collection<T> entityList)
// 更新数据,实体类需要有@TableId主键
boolean updateById(T entity)
// 通过自定Lambda实现更新
boolean update(Wrapper<T> updateWrapper)
// 直接写在方法内(简单条件)
// 拼接出来的SQL:UPDATE `user` u SET u.`user_name` = 'UPDATE' WHERE u.`id` = 1
this.update(Wrappers.<User>lambdaUpdate().set(User::getUserName,"UPDATE").eq(User::getId,1));
// 条件拼接(复杂拼接)
// 此处简单举例,理解其中的意思即可
LambdaUpdateWrapper<User> updateWrapper = Wrappers.lambdaUpdate();
if(StringUtils.isNotBlank(user.getUserName())){
    updateWrapper.set(User::getUserName,user.getUserName());
}
if(user.getId() !=null) {
     updateWrapper.eq(User::getId,user.getId());
}
this.update(updateWrapper);
// 根据主键查询对象
T getById(Serializable id)
// 根据自定义Lambda查询对象
// 务必注意如果返回结果为多条getOne会报错
T getOne(Wrapper<T> queryWrapper)
// 根据自定义Lambda数目
int count(Wrapper<T> queryWrapper)
// 查询全表数据
List<T> list()
// 根据自定义Lambda查询列表
List<T> list(Wrapper<T> queryWrapper)
// 查询全表分页
// 返回可以是IPage接口也可以是任意的IPage实现类
<E extends IPage<T>> E page(E page)
// 根据自定义Lambda查询分页
<E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper)
// 根据自定义Lambda查询一个Map类型的列表
// Map类型的返回比较适用于自行封装的方法
// 比如有很多类似的业务表想进行统一封装查询就可以用Map返回
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper)
// 如上方的更新一样,查询也可以直接入参到方法也可以单独写
// 以分页举例
LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
if(StringUtils.isNotBlank(user.getUserName())){
    queryWrapper.like(User::getUserName,user.getUserName());
}
if(user.getId() !=null) {
    queryWrapper.eq(User::getId,user.getId());
}
this.page(page,queryWrapper);
// 现阶段绝大多数系统都会采用软删除模式
// 修改如status字段进行数据隐藏,因此删除的方法几乎不怎么用
// 基于主键删除
boolean removeById(Serializable id)
// 基于自定义Lambda删除
boolean remove(Wrapper<T> queryWrapper)

BaseMapper常用方法

实际上IService中有很多方法都是直接或间接调用BaseMapper完成数据库操作的。

在业务Service想要使用Mapper无需注入,直接**this.baseMapper.**即可。

// 插入数据(等同于save())
int insert(T entity)
// 根据自定义Lambda查询对象(等同于getOne())
int insert(T entity)T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper)

一般我们如果需要调用MyBatis-Plus提供的方法时,不怎么获取用this.baseMapper操作。

this.baseMapper主要作用是调用自己在业务Mapper中定义的方法。

public interface UserMapper extends BaseMapper<User> {
    /**
     * 根据页面定制对象查询用户
     * @param page
     * @param status
     * @return
     */
    IPage<UserVo> pageForVo(Page page, Integer status);
    
}
// UserServiceImpl可以直接调用
this.baseMapper.pageForVo(page,null);

米虫

做一个有理想的米虫,伪全栈程序猿,乐观主义者,坚信一切都是最好的安排!

本站由个人原创、收集或整理,如涉及侵权请联系删除

本站内容支持转发,希望贵方携带转载信息和原文链接

本站具有时效性,不提供有效、可用和准确等相关保证

本站不提供免费技术支持,暂不推荐您使用案例商业化

发表观点

提示

昵称

邮箱

QQ

网址

当前还没有观点发布,欢迎您留下足迹!

同类其他

JAVA

listener、filter、servlet的加载次序

在web.xml中经常会看到listener,filter,servlet的相关标签配置,它们分别是监听器、过滤器、容器,都是在项目启动的时候就可以进行初始化的加载动作

JAVA中创建线程的三种方式的使用与区别

JAVA中通过继承Thread类、实现Runnable接口以及实现Callable接口配合Future接口实现创建多线程,三种方式各有优缺点,而第三种则具备更多的增强能力

SpringBoot配置文件生效优先级

SpringBoot 可以通过 spring.profiles.active 属性指定生效不同配置文件来满足多环境要求,多环境更为复杂的场景,就需要理解配置文件生效优先级,考虑直接引入外部配置项和配置文件

自定义filter过滤器拦截未登录(非法)请求

在JAVA的WEB工程中我们可以将JSP页面文件放在WEB-INFO中限制用户进行URL直接访问,但静态资源如js、css文件却是需要被外部直接访问的,直接对外暴露又不太安全,可以通过自定义过滤器处理

Maven的pom配置文件的scope属性

scope属性主要用于控制依赖范围,主要分为编译、打包、运行、测试、依赖传递等各个常见,scope不同于optional提供了更多可选择的配置参数用于应对不同的依赖场景。

JAVA语言中的反射机制的作用原理及使用

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;动态获取的信息以及动态调用对象的方法的功能。

选择个人头像

昵称

邮箱

QQ

网址

评论提示

  • 头像:系统为您提供了12个头像自由选择,初次打开随机为你选择一个
  • 邮箱:可选提交邮箱,该信息不会外泄,或将上线管理员回复邮件通知
  • 网址:可选提交网址,评论区该地址将以外链的形式展示在您的昵称上
  • 记忆:浏览器将记忆您已选择或填写过得信息,下次评论无需重复输入
  • 审核:提供一个和谐友善的评论环境,本站所有评论需要经过人工审核