这是我参与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
2.在service的实现层则继承的是Iservice接口的实现类
注: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的基础上作增强)
- 修改插入主要想分享单条记录插入
在修改插入单条记录时,最后返回的结果,其代码:
return StringUtils.checkValNull(idVal) || Objects.isNull(getById((Serializable) idVal)) ? save(entity) : updateById(entity);
复制代码
getById方法:
判断传入的对象是否为空或者传入的对象数据库中是否存在,若为true则save操作,若false则根据id去更新对象
注 Serializable作为方法的参数:应用了java的多态性,Serializable来定义 id的类型,是使用的接口类型,实际调用这个方法时候 可以传递 Integer ,Long ,String 等类型,或者实现了Serializable接口的类,其中java的包装类型 (Integer,Long,String,Double…)几乎都实现了这个接口.
批量修改插入源码,和单条插入基本一样 只是需要循环遍历
- 查询 删除 更新操作可以去读源码,关于批量更新和批量插入原理差不多
- 分页查询 条件分页查询
@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层一些基本的增删该差不用自己去写,可以字节去调用,而一些特定操作还是需要手动去写,再调用
- 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 查询