参考:MyBatis-Plus 使用详解
官方文档:https://baomidou.com/pages/49cc81/#get
MyBatis-Plus(page和pageMaps分页查询)
MyBatis-Plus 条件构造器
分页查询
1、要定义一个分页拦截器【重点】,不定义的话,无法使用
package com.tj.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MPConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){//1.定义Mp拦截器MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//2.添加具体的拦截器,分页拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}}
2、selectPage方法进行分页查询
Page(1,5),第一个参数表示第几页,第二个参数表示共几条数据
@Testvoid testGetPage() { //分页查询IPage page = new Page(3, 5);usersDao.selectPage(page, null);long current = page.getCurrent();//当前页long pages = page.getPages();//总页数long size = page.getSize();//每页显示几条long total = page.getTotal();//总条数List records = page.getRecords();// 分页对象记录列表}
按条件查询
@Testvoid testGetBy() { //按条件查询QueryWrapper<Users> qw = new QueryWrapper<>();qw.like("user_name","王");List<Users> userList = usersDao.selectList(qw);}
@Testvoid testGetBy() { //按条件查询LambdaQueryWrapper<Users> lqw = new LambdaQueryWrapper<>();String name = "1";String name2 = "2";String name3 = "3";lqw.like(name3 != null, Users::getUser_name, name3);lqw.and(e -> {e.like(name != null, Users::getUser_name, name).or();e.like(name2 != null, Users::getUser_name, name2);});//等于 WHERE (user_name LIKE ? AND (user_name LIKE ? OR user_name LIKE ?))List<Users> userList = usersDao.selectList(lqw);}
1、Mapper 接口方法(CRUD)
【添加数据:(增)】int insert(T entity); // 插入一条记录注:T 表示任意实体类型entity 表示实体对象【删除数据:(删)】int deleteById(Serializable id); // 根据主键 ID 删除int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); // 根据 map 定义字段的条件删除int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper); // 根据实体类定义的 条件删除对象int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 进行批量删除注:id 表示 主键 IDcolumnMap 表示表字段的 map 对象wrapper 表示实体对象封装操作类,可以为 null。idList 表示 主键 ID 集合(列表、数组),不能为 null 或 empty【修改数据:(改)】int updateById(@Param(Constants.ENTITY) T entity); // 根据 ID 修改实体对象。int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper); // 根据 updateWrapper 条件修改实体对象注:update 中的 entity 为 set 条件,可以为 null。updateWrapper 表示实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)【查询数据:(查)】T selectById(Serializable id); // 根据 主键 ID 查询数据List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 进行批量查询List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); // 根据表字段条件查询T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根据实体类封装对象 查询一条记录Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询记录的总条数List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询所有记录(返回 entity 集合)List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询所有记录(返回 map 集合)List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询所有记录(但只保存第一个字段的值)<E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询所有记录(返回 entity 集合),分页<E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询所有记录(返回 map 集合),分页注:queryWrapper 表示实体对象封装操作类(可以为 null)page 表示分页查询条件
2、Service 接口方法(CRUD)
【添加数据:(增)】default boolean save(T entity); // 调用 BaseMapper 的 insert 方法,用于添加一条数据。boolean saveBatch(Collection<T> entityList, int batchSize); // 批量插入数据注:entityList 表示实体对象集合batchSize 表示一次批量插入的数据量,默认为 1000【添加或修改数据:(增或改)】boolean saveOrUpdate(T entity); // id 若存在,则修改, id 不存在则新增数据default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 先根据条件尝试更新,然后再执行 saveOrUpdate 操作boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize); // 批量插入并修改数据【删除数据:(删)】default boolean removeById(Serializable id); // 调用 BaseMapper 的 deleteById 方法,根据 id 删除数据。default boolean removeByMap(Map<String, Object> columnMap); // 调用 BaseMapper 的 deleteByMap 方法,根据 map 定义字段的条件删除default boolean remove(Wrapper<T> queryWrapper); // 调用 BaseMapper 的 delete 方法,根据实体类定义的 条件删除对象。default boolean removeByIds(Collection<? extends Serializable> idList); // 用 BaseMapper 的 deleteBatchIds 方法, 进行批量删除。【修改数据:(改)】default boolean updateById(T entity); // 调用 BaseMapper 的 updateById 方法,根据 ID 选择修改。default boolean update(T entity, Wrapper<T> updateWrapper); // 调用 BaseMapper 的 update 方法,根据 updateWrapper 条件修改实体对象。boolean updateBatchById(Collection<T> entityList, int batchSize); // 批量更新数据【查找数据:(查)】default T getById(Serializable id); // 调用 BaseMapper 的 selectById 方法,根据 主键 ID 返回数据。default List<T> listByIds(Collection<? extends Serializable> idList); // 调用 BaseMapper 的 selectBatchIds 方法,批量查询数据。default List<T> listByMap(Map<String, Object> columnMap); // 调用 BaseMapper 的 selectByMap 方法,根据表字段条件查询default T getOne(Wrapper<T> queryWrapper); // 返回一条记录(实体类保存)。Map<String, Object> getMap(Wrapper<T> queryWrapper); // 返回一条记录(map 保存)。default int count(Wrapper<T> queryWrapper); // 根据条件返回 记录数。default List<T> list(); // 返回所有数据。default List<T> list(Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectList 方法,查询所有记录(返回 entity 集合)。default List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectMaps 方法,查询所有记录(返回 map 集合)。default List<Object> listObjs(); // 返回全部记录,但只返回第一个字段的值。default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectPage 方法,分页查询default <E extends IPage<Map<String, Object>>> E pageMaps(E page, Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectMapsPage 方法,分页查询注:get 用于返回一条记录。list 用于返回多条记录。count 用于返回记录总数。page 用于分页查询。【链式调用:】default QueryChainWrapper<T> query(); // 普通链式查询default LambdaQueryChainWrapper<T> lambdaQuery(); // 支持 Lambda 表达式的修改default UpdateChainWrapper<T> update(); // 普通链式修改default LambdaUpdateChainWrapper<T> lambdaUpdate(); // 支持 Lambda 表达式的修改注:query 表示查询update 表示修改Lambda 表示内部支持 Lambda 写法。形如:query().eq("column", value).one();lambdaQuery().eq(Entity::getId, value).list();update().eq("column", value).remove();lambdaUpdate().eq(Entity::getId, value).update(entity);
