mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 

   import tk.mybatis.mapper.entity.Example;
   import com.github.pagehelper.PageHelper;

...

    @Override
    public List<Repayxxx> listRepaymentPlan(Integer start) {

    
        Example example = new Example(Repayxxx.class);
        // 排序
        example.orderBy("id");
        // 条件查询
        example.createCriteria()
                .andNotEqualTo("repayxxx", 3)
                .andLessThanOrEqualTo("xxxRepayDate", new Date());
        // 分页
        PageHelper.startPage(start, 20); // 每次查询20条

        return repaymentPlanMapper.selectByExample(example);
    }

关于排序还有这些写法:

// 注意:排序使用的是表中的列名,不是对象属性名。
example.setOrderByClause("time DESC");

example.setOrderByClause ("product_code desc , product_name desc");

// 注意:排序使用的是对象属性。
example.orderBy('id').asc().orderBy('name').desc();

2. PageHelper 使用详解见文章:分页插件pageHelpler的使用(ssm框架中)服务器端分页

3. 更多关于 Example 的使用说明见文章:

java 查询功能实现的八种方式

MyBatis : Mapper 接口以及 Example 使用实例、详解 

 

4. 当只是查询数据,不需要返回总条数时可选择此方法:

PageHelper.startPage(第几页, 20,false); // 每次查询20条

当数据量极大时,可以快速查询,忽略总条数的查询,减少查询时间。

以下是该方法原码实现:

 

-------------------------------------------------

2019.5.13 后记 : 

1)分页的写法 下图中黄框中的写法运行 比红框中 快,不知道是不是插件本身也会有费时:

2)再补充一种分页方式,mybatis 自带的 RowBounds:

 public List<RepayPlan> listRepayPlan(int start) {
        
        Example example = new Example(RepayPlan.class);
        example.orderBy("id "); // 按id排序
        example.createCriteria()
                .andNotEqualTo("repayxxx", 3)
                .andLessThanOrEqualTo("xxxRepayDate", new Date());
        RowBounds rowBounds = new RowBounds(start, 20); // 每次查询20条
        return epaymentPlanMapper.selectByExampleAndRowBounds(example,rowBounds);
    }

推荐用 RowBounds :mybatis 自带的,且速度快 。个人运行,后 2 种分页明显比 PageHelper 快。

在Spring Boot项目,可以使用MyBatis作为ORM框架来实现在SQL语句的分页MyBatis提供了RowBounds类来进行分页查询,也可以使用PageHelper插件来进行分页查询。下面是实现分页查询的步骤: 1. 在MyBatis的mapper文件编写SQL语句,例如: ``` <select id="getUserList" resultMap="userResultMap"> select * from user </select> ``` 2. 在Spring Boot项目配置MyBatisPageHelper插件,例如: ``` @Configuration @MapperScan("com.example.demo.mapper") public class MyBatisConfig { @Bean public SqlSessionFactoryBean sqlSessionFactoryBean() throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml")); sessionFactory.setPlugins(new Interceptor[]{pageHelper()}); return sessionFactory; } @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/test"); dataSource.setUsername("root"); dataSource.setPassword("root"); return dataSource; } @Bean public PageHelper pageHelper() { PageHelper pageHelper = new PageHelper(); Properties properties = new Properties(); properties.setProperty("dialect", "mysql"); properties.setProperty("reasonable", "true"); properties.setProperty("pageSizeZero", "true"); pageHelper.setProperties(properties); return pageHelper; } } ``` 3. 在Java代码调用mapper方法进行分页查询使用RowBounds方式,例如: ``` @Autowired private UserMapper userMapper; public List<User> getUserListByRowBounds(String name, Integer startIndex, Integer pageSize) { RowBounds rowBounds = new RowBounds(startIndex, pageSize); return userMapper.getUserList(name, rowBounds); } ``` 或者使用PageHelper方式,例如: ``` @Autowired private UserMapper userMapper; public PageInfo<User> getUserListByPageHelper(String name, Integer pageNum, Integer pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> userList = userMapper.getUserList(name); return new PageInfo<>(userList); } ``` 其,startIndex和pageSize是分页查询的参数,使用RowBounds方式需要在mapper使用if标签进行判断,如果有值则使用limit关键字进行分页查询使用PageHelper方式则直接调用PageHelper.startPage方法进行分页查询,返回的结果需要使用PageInfo进行包装。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值