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

Spring、SpringMVC和SpringBoot

Spring就像一个大家族,里面包含了很多衍生产品,其中最为出名的就是SpringMVC和SpringBoot,那么这三者之间是什么关系呢?SpringMVC和SpringBoot又专门用来做什么呢?

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

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

一文理解SpringMVC框架核心

SpringMVC框架是围绕DispatcherServlet(前端控制器)展开的,本文描述SpringMVC的优点、各个核心类(角色)作用,并说明用户请求数据到最终视图返回完整的数据传输过程

SpringBoot配置druid(德鲁伊)数据库连接池

SpringBoot 的 MyBatis 默认采用 hikari 连接池,druid (德鲁伊) 连接池由阿里开源,它不仅仅是一个连接池,更是代理、过滤器、解析器、插件、监控、优化等实用功能组件库,更在阿里生产环境得到验证,所以 Lets Do It

Struts2 + Spring框架融合配置

Struts2框架以WebWork优秀的设计思想为核心,吸收了 Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架,本文主要是与Spring整合关键配置和实例

Maven的pom配置文件的scope属性

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

选择个人头像

昵称

邮箱

QQ

网址

评论提示

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