您的位置:首页 > 数据库 > Oracle

Mybatis Example对Oracle数据库的分页查询

2018-03-27 16:40 155 查看

问题:

    在使用mybatis过程中通过mybatis-generator逆向生成实体(包含example)和mapper(包含xml文件)。    对于example的理解,可以认为是一个高级查询的过程,但从执行代码的表面角度看,有点像Hibernate。    如何使用mybatis的example来实现一个有条件筛选的分页?

思路:

    先在navicat中写出一个简单的能够实现筛选(条件)和分页的sql语句    mysql中实现比较简单select * from tableA where A.a>10 limit startRow ,pageSize    在Oracle中语句就相对比较复杂SELECT*FROM( SELECT t.*, row_number () over ( ORDER BY GUID ) AS num FROM tableA t WHERE MJ >= 10 ) ttWHEREnum BETWEEN 5AND 6    简单解释一下这个语句,先从from()开始理解:    首先查询条件筛选过的A.*(全部字段)和row_number()    然后再从其中查询序列号在5到6的结果(ps:也是一个条件查询)

解决:

    1在mapper.java中声明方法List<WfjzTsjb> selectByPage(@Param("start") int start,@Param("end") int end,@Param("example") AExample example);     2在对应的mapper.xml中写对应的sql语句     <select id="selectByPage" parameterType="com.pojo.A" resultMap="BaseResultMap">   select   <include refid="Base_Column_List" />   from  ( SELECT t.*, row_number () over ( ORDER BY GUID ) as num FROM Database.A t    <if test="param3 != null">      <include refid="Update_By_Example_Where_Clause" />     </if>   ) tt where num between #{start} and #{end}  </select>
    ps:关键是<if test="param3!=null">,因为这个是参照默认的selectByExample写的,_parameter是接口方法中只有一个参数的写法    3编写测试方法,测试结果public class SimpleTest{    static ListServiceImpl serviceImpl = new ListServi4000ceImpl();    public static void main(String[] args) throws IOException {// TODO Auto-generated method stubString resource = "mybatis.xml";           // 定位核心配置文件InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    // 创建 SqlSessionFactorySqlSession sqlSession = sqlSessionFactory.openSession();    // 获取到 SqlSessionAMapper aMapper = sqlSession.getMapper(AMapper.class);AExample example = new AExample();Criteria criteria = example.createCriteria();BigDecimal dec = new BigDecimal(10.0);criteria.andMjGreaterThanOrEqualTo(dec);List<A> list = aMapper.selectByPage(5, 10, example);//serviceImpl.getList().size());for(A a : list)System.out.println("当前:" + a.getMj());}}测试结果如图,验证成功
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: