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

发布: 2015-12-04
热度: 46
趋势: 46
权重: 0
🎯

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

实现说明

为什么通过 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)

Lambda 更新语法

// 直接写在方法内(简单条件)
// 拼接出来的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)

Lambda 查询语法

// 如上方的更新一样,查询也可以直接入参到方法也可以单独写
// 以分页举例
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)

BaseMapper 使用说明

一般我们如果需要调用 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);
当前文章暂无讨论,留下脚印吧!
大纲
  • 实现说明
  • IService 常用方法
    • 更新数据
      • Lambda 更新语法
    • 查询数据
      • Lambda 查询语法
    • 删除方法
  • BaseMapper 常用方法
    • 常用方法
    • BaseMapper 使用说明
提交成功,请等待审核通过后全面展示!

发表评论

昵称
邮箱
链接
签名
评论

温馨提示:系统将通过浏览器临时记忆您曾经填写的个人信息且支持修改,评论提交后仅自己可见,内容需要经过审核后方可全面展示。

选择头像