ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MP2️⃣基础 CRUD & 分页查询

2022-05-22 16:35:24  阅读:185  来源: 互联网

标签:Wrapper 分页 CRUD Param id MP2 user ID Constants


1、基础 CRUD

BaseMapper 接口中大量使用到 Wrapper(涉及条件查询)

先不考虑条件查询,对基础 CRUD 进行测试。

① 增

  1. 自动生成 ID,无需设置(主键 ID 生成策略,默认为序列号)。

    User user = new User();
    user.setName("ump1");
    user.setPassword("123456");
    
    userDao.insert(user);
    
  2. 自动根据实体类非 null 的属性,生成动态 SQL

    INSERT INTO mp_user ( id, name, password ) VALUES ( ?, ?, ? )
    

② 删

参数为 id 或 entity,本质上都是通过 ID 进行删除。

同理,批量删除的参数可以是 idList 或 entityList。

Hint:本例中 id 字段是 bigint 类型,对应 Java 的 long 类型。

单个

  • 代码

    // 根据ID
    userDao.deleteById(id);
    // 根据entity,本质也是获取id
    User user = new User();
    user.setId(id);
    userDao.deleteById(user);
    
  • SQL

    DELETE FROM mp_user WHERE id=?
    

批量

  • 代码

    // 根据ID
    Long[] idList = {id1, id2};
    userDao.deleteBatchIds(Arrays.asList(idList));
    // 根据entity
    User u1 = new User();
    u1.setId(id1);
    User u2 = new User();
    u2.setId(id2);
    User[] userList = {u1, u2};
    userDao.deleteBatchIds(Arrays.asList(userList));
    
  • SQL:根据 ID 个数,拼接动态 SQL。

    DELETE FROM mp_user WHERE id IN {?, ?}
    

③ 改

  • 通过 ID 确定要更新的记录。

    User user = new User();
    user.setId(id);
    user.setName("new name");
    
    userDao.updateById(user);
    
  • 根据 entity 拼接动态 SQL,只更新非 null 的属性。

    UPDATE mp_user SET name=? WHERE id=?
    

④ 查

  • ID

  • ID 列表:根据 ID 个数,拼接动态 SQL。

  • 查询所有(参数是 Wrapper,null 表示不加查询条件)

    // 单个
    userDao.selectById(id);
    // 批量
    Long[] idList = {id1, id2, id3};
    userDao.selectBatchIds(Arrays.asList(idList));
    // 所有
    userDao.selectList(null);
    

2、分页

  • Page:分页模型。可设置分页参数,保存查询数据记录。

  • Wrapper:查询条件,可为 null。

    <P extends IPage<T>> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    

2.1、分页拦截器

要使分页功能生效,需要配置分页拦截器。

  1. @Configuration:创建 MP 配置类

  2. @Bean:创建拦截器对象,添加分页拦截器

    @Configuration
    public class MybatisPlusConfig {
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor mpi = new MybatisPlusInterceptor();
            mpi.addInnerInterceptor(new PaginationInnerInterceptor());
            return mpi;
        }
    }
    

2.2、使用

从日志可看出,基于 LIMIT 物理分页。

  1. 创建 Page 对象,设置分页参数(当前页码,页面大小)

  2. 分页查询

  3. 获取结果

    IPage<User> page = new Page<>(1, 5);
    userDao.selectPage(page, null);
    
    // 当前页码、页面大小
    System.out.println(page.getCurrent());
    System.out.println(page.getSize());
    // 总页数、总记录数
    System.out.println(page.getPages());
    System.out.println(page.getTotal());
    // 当前页数据
    System.out.println(page.getRecords());
    

附:BaseMapper <T>

面向抽象编程:接口参数的 id 是 Serializable 类型

主键 ID 的所有可能类型,都直接或间接实现了 Serializable 接口。

  • String 和 Number 都实现了 Serializable 接口。

    image-20220522142749192

  • 基本类型、原子类型等都继承自 Number 抽象类。

    image-20220522143013043

int insert(T entity);

  • ID

  • 实体,本质也是 ID

  • columnMap

  • 拼接条件

  • ID 列表或实体列表,批量

    int deleteById(Serializable id);
    int deleteById(T entity);
    int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
    int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    int deleteBatchIds(@Param(Constants.COLLECTION) Collection<?> idList);
    

  • 实体,由 ID 确定记录

  • 实体,拼接条件

    int updateById(@Param(Constants.ENTITY) T entity);
    int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
    

基础

  • ID

  • ID 列表,批量

  • columnMap

  • 拼接条件

  • 拼接条件,批量(entity)

  • 拼接条件,批量(包含属性的 Map)

  • 拼接条件,首个字段的列表

    T selectById(Serializable id);
    
    List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
    
    List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
    
    default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {
        List<T> ts = this.selectList(queryWrapper);
        if (CollectionUtils.isNotEmpty(ts)) {
            if (ts.size() != 1) {
                throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records");
            }
            return ts.get(0);
        }
        return null;
    }
    
    List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    
    List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    
    List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    

分页

分页 Page 对象,拼接条件。

<P extends IPage<T>> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

<P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
}

其它

  • 判断存在:拼接条件

  • 总记录数:拼接条件

    default boolean exists(Wrapper<T> queryWrapper) {
        Long count = this.selectCount(queryWrapper);
        return null != count && count > 0;
    }
    
    Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    

标签:Wrapper,分页,CRUD,Param,id,MP2,user,ID,Constants
来源: https://www.cnblogs.com/secretmrj/p/16298143.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有