Mybatis-plus系列学习3

这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战

1.前提

结合上一篇文章,由代码生成器生成的一系列代码

1.实体:entity

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class TEvaluation implements Serializable {
复制代码

2.Controller层

@RestController
@RequestMapping("/t-evaluation")
public class TEvaluationController {}
复制代码

3.Service 接口层

public interface ITEvaluationService extends IService<TEvaluation> { }
复制代码

service的实现层

@Service
public class TEvaluationServiceImpl extends ServiceImpl<TEvaluationMapper, TEvaluation> implements ITEvaluationService {}
复制代码

4.Mapper层(dao层)

public interface TEvaluationMapper extends BaseMapper<TEvaluation> {}
复制代码

今天主要结合第二和第三点分享Service CRUD 接口 和 Mapper CRUD 接口

Service CRUD

1.Service 继承 IService

image.png

2.在service的实现层则继承的是Iservice接口的实现类
image.png

注:ServiceImpl<M extends BaseMapper, T>:参数说明 M 是 mapper 对象,T 是实体

  • 增 主要分享一下批量保存
boolean saveBatch(Collection<T> entityList);
boolean saveBatch(Collection<T> entityList, int batchSize);
复制代码

其中:Collection 实体对象集合; batchSize 插入批次数量 而这两个方法实现调用的则是同一个方法
很明显 这个批量操作是一个事物操作,同时 SqlSession又是Mybatis中的核心接口(这也说明mybatis-plus知识在mybatis的基础上作增强)

image.png

  • 修改插入主要想分享单条记录插入

在修改插入单条记录时,最后返回的结果,其代码:

return StringUtils.checkValNull(idVal) || Objects.isNull(getById((Serializable) idVal)) ? save(entity) : updateById(entity);
复制代码

getById方法:

image.png

判断传入的对象是否为空或者传入的对象数据库中是否存在,若为true则save操作,若false则根据id去更新对象

Serializable作为方法的参数:应用了java的多态性,Serializable来定义 id的类型,是使用的接口类型,实际调用这个方法时候 可以传递 Integer ,Long ,String 等类型,或者实现了Serializable接口的类,其中java的包装类型 (Integer,Long,String,Double…)几乎都实现了这个接口.

批量修改插入源码,和单条插入基本一样 只是需要循环遍历
image.png

  • 查询 删除 更新操作可以去读源码,关于批量更新和批量插入原理差不多
  • 分页查询 条件分页查询
@Override
public IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper) {
    return baseMapper.selectMapsPage(page, queryWrapper);
}
复制代码

page 翻页对象;queryWrapper 实体对象封装操作类 QueryWrapper(后面学习会分享)

Mapper CRUD

Mapper 继承BaseMapper接口,无需编写 mapper.xml 文件,即可获得CRUD功能,相当于Mapper层一些基本的增删该差不用自己去写,可以字节去调用,而一些特定操作还是需要手动去写,再调用
image.png

  • insert
int insert(T entity);
复制代码
  • delete

根据 ID 删除(批量删除),根据entity 条件,columnMap 条件删除

  • update

根据 id 或 whereWrapper 条件,更新

  • select

根据id 查询(批量查询); 根据各种 条件,查询一条(或全部)记录;分页查询;查询记录总数

总结

今天主要分享了Service CRUD和Mapper CRUD的一些接口方法,看了一些部分接口的源码,有时候源码对我们去理解也很有帮助,针对Service CRUD,则可以在service的实现层,直接调用方法:如this.save(T),但是如果有一些操作需要通过数据库操作,可以试用baseMapper.调用Mapper自带的一些CRUD方法或者自己自定义的方法。

通过这两个操作,在mybatis-plus中的特性:强大的 CRUD 操作,内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求。我们在看了上面的分享,来看这个特性也是很明显的,关于强大的条件构造器我将在下一次的文章进行分享;mybatis-plus还内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享