zoukankan      html  css  js  c++  java
  • MyBatis分页剖析

    对于Mybatis的分页,selectList方法是通过传一个RowBounds对象过去实现的。如:session.selectList("com.wheat.dao.UserDao.returnAllUser",null, new RowBounds(10,20)); 运行起来没有问题。在调优的时候发现,怎么后台的打印信息怎么那么多的?我分页大小是20,log4j却常常打印一整版。我调用出错了?查了下一切正常。

        今天决定在机器上试验下。我写了两种方式的分页。一种是Mybatis内置的分页,另一种是自己写SQL的分页。数据库依然是MySQL,测试环境Junit。

        上码,Mybatis内置的分页:

    1. <span style="font-family:SimSun;font-size:14px;">   @Test  
    2.     @SuppressWarnings("rawtypes")  
    3.     public void TestUserDaoPagingWithMybatisWay() throws IOException{  
    4.         String resource = "META-INF/conf/mybatis-config.xml";  
    5.         InputStream inputStream = Resources.getResourceAsStream(resource);  
    6.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
    7.         SqlSession session = sqlSessionFactory.openSession();  
    8.         List result = session.selectList("com.wheat.dao.UserDao.returnAllUser"nullnew RowBounds(10,20));  
    9.         if(result!=null){  
    10.             for(Object o:result){  
    11.                 Map map = (Map) o;  
    12.                 System.out.print(map.get("ID")+",");  
    13.                 System.out.print(map.get("USERNO")+",");  
    14.                 System.out.println(map.get("USERNAME"));  
    15.             }  
    16.             System.out.println("success!");  
    17.         }  
    18.     }</span>  

        SQL的分页:

    1. <span style="font-family:SimSun;font-size:14px;">   @Test  
    2.     @SuppressWarnings("rawtypes")  
    3.     public void TestUserDaoPagingWithMyWay() throws IOException{  
    4.         String resource = "META-INF/conf/mybatis-config.xml";  
    5.         InputStream inputStream = Resources.getResourceAsStream(resource);  
    6.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
    7.         SqlSession session = sqlSessionFactory.openSession();  
    8.         HashMap<String, Object> requestParameters = new HashMap<String, Object>();  
    9.         requestParameters.put("begin"10);  
    10.         requestParameters.put("pageSize"20);  
    11.         List result = session.selectList("com.wheat.dao.UserDao.returnAllUserWithPaging",requestParameters);  
    12.         if(result!=null){  
    13.             for(Object o:result){  
    14.                 Map map = (Map) o;  
    15.                 System.out.print(map.get("ID")+",");  
    16.                 System.out.print(map.get("USERNO")+",");  
    17.                 System.out.println(map.get("USERNAME"));  
    18.             }  
    19.             System.out.println("success!");  
    20.         }  
    21.     }</span>  

        对应的Mapper文件代码:

    1. <span style="font-family:SimSun;font-size:14px;">   <select id="returnAllUser" resultType="java.util.HashMap" >  
    2.         <![CDATA[ 
    3.             SELECT ID, USERNAME, USERNO FROM USERINFO 
    4.         ]]>  
    5.     </select>  
    6.     <select id="returnAllUserWithPaging" resultType="java.util.HashMap" parameterType="java.util.HashMap">  
    7.         <![CDATA[ 
    8.             SELECT ID, USERNAME, USERNO FROM USERINFO 
    9.         ]]>  
    10.         <trim prefix="LIMIT" prefixOverrides=",">  
    11.             <if test="begin != null">#{begin,jdbcType=NUMERIC}</if>  
    12.             <if test="pageSize != null">,#{pageSize,jdbcType=NUMERIC}</if>  
    13.         </trim>  
    14.     </select></span>  

         运行的控制台信息:

         Mybatis内置的分页:

         SQL的分页:

        从上面可以看到,Mybatis内置方式的分页其实是先将表中的前面 (初始位置+分页大小)行返回,再从中截取最后面分页大小行数据返回给我们。而不是像我之前所想的那样,Mybatis先将分页语句按语言特性重写再执行。

        所以在使用MyBatis开发时,分页语句还是得自己写。如果涉及到上万行的查询。这个性能瓶颈将变得很明显。

  • 相关阅读:
    百度mp3地址解密码
    VB 在EXE后附加信息
    截屏函数
    Base64和StrToByte
    The Android ION memory allocator, DMABUF is mentioned as well
    DDC EDID 介绍
    Memory management for graphic processors TTM的由来
    科普 写display driver的必看 How video card works [2D的四种主要操作]
    GEM vs TTM
    DMABUF 背景介绍文章 Sharing buffers between devices
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786516.html
Copyright © 2011-2022 走看看