MybatisPlus学习笔记------CRUD操作---select操作

MybatisPlus官网: MyBatis-Plus

select操作

查询所有

 @Test
    void testSelectAll() {
        //查询全部用户
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }

按id查询

   @Test
    //根据id查询用户
    public void testSelectById(){
        User user = userMapper.selectById(0L);
        System.out.println(user);
    }

按id批量查询

@Test
//根据id批量查询多个用户
public void testSelectByBatchIds(){
    List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
    users.forEach(System.out::println);
}

按条件查询

@Test
//条件查询之一 使用map操作
public void testSelectByMap(){
    Map<String, Object> map = new HashMap<>();
    map.put("name","痛苦之拥");
    map.put("age",24);
    List<User> users = userMapper.selectByMap(map);
    users.forEach(System.out::println);
}

分页查询

常规分页使用 limit

MyBatisPlus内置分页插件

如何使用?

  1. 配置分页插件

    • 在MybatisPlusConfig配置类中配置分页插件
    //配置分页插件
       @Bean
       public PaginationInterceptor paginationInterceptor() {
           PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
           // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
           // paginationInterceptor.setOverflow(false);
           // 设置最大单页限制数量,默认 500 条,-1 不受限制
           // paginationInterceptor.setLimit(500);
           // 开启 count 的 join 优化,只针对部分 left join
           paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
           return paginationInterceptor;
       }
    
    • 使用spring.xml配置

      
      <property name="plugins">
          <array>
              <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
                  <property name="sqlParser" ref="自定义解析类、可以没有"/>
                  <property name="dialectClazz" value="自定义方言类、可以没有"/>
                  
                  <property name="countSqlParser" ref="countSqlParser"/>
              bean>
          array>
      property>
      
      <bean id="countSqlParser" class="com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize">
          
          <property name="optimizeJoin" value="true"/>
      bean>
      
  2. 测试分页查询

     @Test
        public void testSelectPage(){
            //参数一:当前页
            //参数二:页面大小
            Page page = new Page(1,5);
            userMapper.selectPage(page, null);
    
            //获取当前页 数据列表
            page.getRecords().forEach(System.out::println);
    
             //获取表中数据的 总数
            System.out.println(page.getTotal());
            //获取当前页 每页显示条数
            System.out.println(page.getSize());
            //获取当前页 页码
            System.out.println(page.getCurrent());
            //是否存在上一页
            System.out.println(page.hasPrevious());
            //是否存在下一页
            System.out.println(page.hasNext());
            //还可以排序  等等。
        }
    
    • Page类 (参考)
    /**
     * 简单分页模型
     */
    public class Page<T> implements IPage<T> {
    
        private static final long serialVersionUID = 8545996863226528798L;
    
        /**
         * 查询数据列表
         */
        private List<T> records = Collections.emptyList();
    
        /**
         * 总数
         */
        private long total = 0;
        /**
         * 每页显示条数,默认 10
         */
        private long size = 10;
    
        /**
         * 当前页
         */
        private long current = 1;
    
        /**
         * 排序字段信息
         */
        private List<OrderItem> orders = new ArrayList<>();
    
        /**
         * 自动优化 COUNT SQL
         */
        private boolean optimizeCountSql = true;
        /**
         * 是否进行 count 查询
         */
        private boolean isSearchCount = true;
        /**
         * 是否命中count缓存
         */
        private boolean hitCount = false;
    
        public Page() {
        }
    
       
    }
    
    

    XML 自定义分页

    • UserMapper.java 方法内容
    public interface UserMapper {//可以继承或者不继承BaseMapper
        /**
         * 

    * 查询 : 根据state状态查询用户列表,分页显示 *

    * * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象) * @param state 状态 * @return 分页对象 */
    IPage<User> selectPageVo(Page<?> page, Integer state); }
    • UserMapper.xml 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页
    <select id="selectPageVo" resultType="com.baomidou.cloud.entity.UserVo">
        SELECT id,name FROM user WHERE state=#{state}
    select>
    
    • UserServiceImpl.java 调用分页方法
    public IPage<User> selectUserPage(Page<User> page, Integer state) {
        // 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分
        // page.setOptimizeCountSql(false);
        // 当 total 为小于 0 或者设置 setSearchCount(false) 分页插件不会进行 count 查询
        // 要点!! 分页返回的对象与传入的对象是同一个
        return userMapper.selectPageVo(page, state);
    }
    

你可能感兴趣的:(MyBatis-Plus笔记,mybatis,java,mp)