MyBatisコード例シリーズ-10:MyBatis PageHelperプラグインによる改ページクエリを実現します.


スーパーチャネル:MyBatisコードインスタンスシリーズ-序論
この章は主にMyBatisを記録します.PageHelperプラグインを通じて、ページ別のクエリを実現します.関連する技術点は以下の通りです.
comple.github.pagehelperはオープンソースのMyBatis改ページプラグインで、アドレスは:https://github.com/pagehelper/Mybatis-PageHelper
1.SQL
drop table apple;
create table `apple`(
    `id` int(4) unsigned auto_increment not null comment '    id',
    `name` varchar(20) not null comment '      ',
    `price` int(3) not null comment '  ',
    primary key(id)
)engine=InnoDB comment='    ' auto_increment=1001 default charset=utf8;
insert into `apple`(name,price) values('   ',10);
insert into `apple`(name,price) values('   ',10);
insert into `apple`(name,price) values('   ',10);
insert into `apple`(name,price) values('   ',10);
insert into `apple`(name,price) values('   ',10);
insert into `apple`(name,price) values('   ',10);
insert into `apple`(name,price) values('   ',10);
insert into `apple`(name,price) values('   ',10);
insert into `apple`(name,price) values('   ',20);
insert into `apple`(name,price) values('   ',20);
insert into `apple`(name,price) values('   ',20);
insert into `apple`(name,price) values('   ',20);
insert into `apple`(name,price) values('   ',20);
insert into `apple`(name,price) values('   ',20);
insert into `apple`(name,price) values('   ',20);
insert into `apple`(name,price) values('   ',20);
insert into `apple`(name,price) values('   ',20);
insert into `apple`(name,price) values('   ',20);
insert into `apple`(name,price) values('   ',30);
insert into `apple`(name,price) values('   ',30);
insert into `apple`(name,price) values('   ',30);
insert into `apple`(name,price) values('   ',30);
insert into `apple`(name,price) values('   ',30);
insert into `apple`(name,price) values('   ',30);
insert into `apple`(name,price) values('   ',30);
insert into `apple`(name,price) values('   ',30);
select count(*) from `apple`;
select * from `apple`;
2.PageHelperプラグインの設定
2.1.jarパッケージの導入
私が使っているのはMaven方式です.pom.xmlは以下の通りです.
<pagehelper.version>5.1.2pagehelper.version>



<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelperartifactId>
    <version>${pagehelper.version}version>
dependency>
2.2.スクリーンショットの設定:PageInterceptor
現在は2つの方法があります.
  • は、MyBatisプロファイルにスクリーンセーバープラグイン
    
    <plugins>
        
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            
            <property name="param1" value="value1"/>
        plugin>
    plugins>
  • を配置する.
  • Springプロファイルにスクリーンセーバープラグイン
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      
      <property name="plugins">
        <array>
          <bean class="com.github.pagehelper.PageInterceptor">
            <property name="properties">
              
              <value>
                params=value1
              value>
            property>
          bean>
        array>
      property>
    bean>
  • を配置する.
    詳細なパラメータはたくさんあります.興味があれば自分で参考してください.https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
    私は第一の方式を採用しています.私の構成は以下の通りです.
    <plugins>
        
        
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            
            <property name="helperDialect" value="mysql"/>
            
            <property name="pageSizeZero" value="true"/>
            
            <property name="reasonable" value="true"/>
        plugin>
    plugins>
    3.PageHelperプラグインを使用する
    3.1.MyBatis Generatorによるコード生成
    参照できます.MyBatisコードの例シリーズ-08:Mavenを通じてMyBatis Generatorを実行し、MyBatis Generatorの拡張用法―中国語の注釈を生成し、MapperをDaoと改めて命名します.
    生成結果は以下の通りです.Apple Enttity.java
    package pers.hanchao.himybatis.page.entity;
    
    public class AppleEntity {
        /**
         * 
    
         *     id
         *     : apple.id
         * 
    */
    prvate Integer id
    //other field
    //setter getter toString hash Code equals
    )
    Apple Dao.java
    package pers.hanchao.himybatis.page.dao;
    
    import java.util.List;
    import pers.hanchao.himybatis.page.entity.AppleEntity;
    
    public interface AppleDao {
        /**
         *             
         *
         * @param id
         */
        int deleteByPrimaryKey(Integer id);
    
        //int insert(Apple apple);
        //Topic selectByPrimaryKey(Integer id);
        //List selectAll();
        //int updateByPrimaryKey(Apple apple);
    }
    Apple Dao.xml
    
    
    <mapper namespace="pers.hanchao.himybatis.page.dao.AppleDao">
      <resultMap id="BaseResultMap" type="pers.hanchao.himybatis.page.entity.AppleEntity">
        
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="price" jdbcType="INTEGER" property="price" />
      resultMap>
      <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
        
        delete from apple
        where id = #{id,jdbcType=INTEGER}
      delete>
        
    mapper>
    3.2. コードApp.java
  • に すると、 は ページではなく、
  • である.
  • は、 のクエリーの にPageHelper.startPage(1,5);を すれば、 ページが します.
  • Apple.java
    package pers.hanchao.himybatis.page;
    
    import com.github.pagehelper.Page;
    import com.github.pagehelper.PageHelper;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.apache.log4j.Logger;
    import pers.hanchao.himybatis.page.dao.AppleDao;
    import pers.hanchao.himybatis.page.entity.AppleEntity;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.util.List;
    
    /**
     * 

    PageHelper

    * @author hanchao 2018/2/4 18:23 **/
    public class AppleApp { /** */ private static final Logger LOGGER = Logger.getLogger(AppleApp.class); /** */ private static Reader reader; /** */ private static SqlSessionFactory sqlSessionFactory; static { try { reader = Resources.getResourceAsReader("mybatis-config-page.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); LOGGER.error(" MyBatis !"); } } /** *

    PageHelper

    * @author hanchao 2018/2/4 18:22 **/
    public static void main(String[] args) { SqlSession sqlSession = sqlSessionFactory.openSession(); try { AppleDao appleDao = sqlSession.getMapper(AppleDao.class); LOGGER.info(" :"); LOGGER.info(appleDao.selectAll()); System.out.println(); LOGGER.info(" :"); LOGGER.info(" 1 , 5 "); PageHelper.startPage(1,5); // Page LOGGER.info(appleDao.selectAll()); // Page LOGGER.info((List)appleDao.selectAll()); System.out.println(); LOGGER.info(" 2 , 5 "); PageHelper.startPage(2,5); // Page LOGGER.info(appleDao.selectAll()); // Page LOGGER.info((List)appleDao.selectAll()); System.out.println(); LOGGER.info(" 1 , 2 "); PageHelper.startPage(1,2); // Page LOGGER.info(appleDao.selectAll()); // Page LOGGER.info((List)appleDao.selectAll()); //sqlSession.commit(); }catch (Exception e){ sqlSession.rollback(); e.printStackTrace(); LOGGER.error(" !"); }finally { sqlSession.close(); } } }
    3.3.レスリング
    2018-02-04 18:39:07 INFO  AppleApp:46 -2018-02-04 18:39:07 DEBUG JdbcTransaction:137 - Opening JDBC Connection
    2018-02-04 18:39:08 DEBUG PooledDataSource:406 - Created connection 1752203484.
    2018-02-04 18:39:08 DEBUG JdbcTransaction:101 - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@687080dc]
    2018-02-04 18:39:08 DEBUG selectAll:159 - ==>  Preparing: select id, name, price from apple 
    2018-02-04 18:39:08 DEBUG selectAll:159 - ==> Parameters: 
    2018-02-04 18:39:08 DEBUG selectAll:159 - <==      Total: 26
    2018-02-04 18:39:08 INFO  AppleApp:47 - [AppleEntity [Hash = 990045553, id=1001, name=   , price=10], AppleEntity [Hash = 1102596912, id=1002, name=   , price=10], AppleEntity [Hash = 835342812, id=1003, name=   , price=10], AppleEntity [Hash = 1037565081, id=1004, name=   , price=10], AppleEntity [Hash = 992819960, id=1005, name=   , price=10], AppleEntity [Hash = 1178329478, id=1006, name=   , price=10], AppleEntity [Hash = 1178598558, id=1007, name=   , price=10], AppleEntity [Hash = 978880655, id=1008, name=   , price=10], AppleEntity [Hash = 1232562686, id=1009, name=   , price=20], AppleEntity [Hash = 987502881, id=1010, name=   , price=20], AppleEntity [Hash = 832799179, id=1011, name=   , price=20], AppleEntity [Hash = 1035021448, id=1012, name=   , price=20], AppleEntity [Hash = 1175784884, id=1013, name=   , price=20], AppleEntity [Hash = 976335100, id=1014, name=   , price=20], AppleEntity [Hash = 1176054925, id=1015, name=   , price=20], AppleEntity [Hash = 990279210, id=1016, name=   , price=20], AppleEntity [Hash = 976337983, id=1017, name=   , price=20], AppleEntity [Hash = 1232958618, id=1018, name=   , price=20], AppleEntity [Hash = 990060577, id=1019, name=   , price=30], AppleEntity [Hash = 1102611936, id=1020, name=   , price=30], AppleEntity [Hash = 835357836, id=1021, name=   , price=30], AppleEntity [Hash = 1037580105, id=1022, name=   , price=30], AppleEntity [Hash = 992834984, id=1023, name=   , price=30], AppleEntity [Hash = 1178344502, id=1024, name=   , price=30], AppleEntity [Hash = 1178613582, id=1025, name=   , price=30], AppleEntity [Hash = 978895679, id=1026, name=   , price=30]]
    
    2018-02-04 18:39:08 INFO  AppleApp:50 -2018-02-04 18:39:08 INFO  AppleApp:51 -  15 
    2018-02-04 18:39:08 DEBUG SQL_CACHE:54 - Cache Hit Ratio [SQL_CACHE]: 0.0
    2018-02-04 18:39:08 DEBUG selectAll_COUNT:159 - ==>  Preparing: SELECT count(0) FROM apple 
    2018-02-04 18:39:08 DEBUG selectAll_COUNT:159 - ==> Parameters: 
    2018-02-04 18:39:08 DEBUG selectAll_COUNT:159 - <==      Total: 1
    2018-02-04 18:39:08 DEBUG selectAll:159 - ==>  Preparing: select id, name, price from apple LIMIT ? 
    2018-02-04 18:39:08 DEBUG selectAll:159 - ==> Parameters: 5(Integer)
    2018-02-04 18:39:08 DEBUG selectAll:159 - <==      Total: 5
    2018-02-04 18:39:08 INFO  AppleApp:54 - Page{count=true, pageNum=1, pageSize=5, startRow=0, endRow=5, total=26, pages=6, reasonable=true, pageSizeZero=true}
    2018-02-04 18:39:08 INFO  AppleApp:56 - [AppleEntity [Hash = 990045553, id=1001, name=   , price=10], AppleEntity [Hash = 1102596912, id=1002, name=   , price=10], AppleEntity [Hash = 835342812, id=1003, name=   , price=10], AppleEntity [Hash = 1037565081, id=1004, name=   , price=10], AppleEntity [Hash = 992819960, id=1005, name=   , price=10], AppleEntity [Hash = 1178329478, id=1006, name=   , price=10], AppleEntity [Hash = 1178598558, id=1007, name=   , price=10], AppleEntity [Hash = 978880655, id=1008, name=   , price=10], AppleEntity [Hash = 1232562686, id=1009, name=   , price=20], AppleEntity [Hash = 987502881, id=1010, name=   , price=20], AppleEntity [Hash = 832799179, id=1011, name=   , price=20], AppleEntity [Hash = 1035021448, id=1012, name=   , price=20], AppleEntity [Hash = 1175784884, id=1013, name=   , price=20], AppleEntity [Hash = 976335100, id=1014, name=   , price=20], AppleEntity [Hash = 1176054925, id=1015, name=   , price=20], AppleEntity [Hash = 990279210, id=1016, name=   , price=20], AppleEntity [Hash = 976337983, id=1017, name=   , price=20], AppleEntity [Hash = 1232958618, id=1018, name=   , price=20], AppleEntity [Hash = 990060577, id=1019, name=   , price=30], AppleEntity [Hash = 1102611936, id=1020, name=   , price=30], AppleEntity [Hash = 835357836, id=1021, name=   , price=30], AppleEntity [Hash = 1037580105, id=1022, name=   , price=30], AppleEntity [Hash = 992834984, id=1023, name=   , price=30], AppleEntity [Hash = 1178344502, id=1024, name=   , price=30], AppleEntity [Hash = 1178613582, id=1025, name=   , price=30], AppleEntity [Hash = 978895679, id=1026, name=   , price=30]]
    
    2018-02-04 18:39:08 INFO  AppleApp:60 -  25 
    2018-02-04 18:39:08 DEBUG SQL_CACHE:54 - Cache Hit Ratio [SQL_CACHE]: 0.5
    2018-02-04 18:39:08 DEBUG selectAll:159 - ==>  Preparing: select id, name, price from apple LIMIT ?, ? 
    2018-02-04 18:39:08 DEBUG selectAll:159 - ==> Parameters: 5(Integer), 5(Integer)
    2018-02-04 18:39:08 DEBUG selectAll:159 - <==      Total: 5
    2018-02-04 18:39:08 INFO  AppleApp:63 - Page{count=true, pageNum=2, pageSize=5, startRow=5, endRow=10, total=26, pages=6, reasonable=true, pageSizeZero=true}
    2018-02-04 18:39:08 INFO  AppleApp:65 - [AppleEntity [Hash = 990045553, id=1001, name=   , price=10], AppleEntity [Hash = 1102596912, id=1002, name=   , price=10], AppleEntity [Hash = 835342812, id=1003, name=   , price=10], AppleEntity [Hash = 1037565081, id=1004, name=   , price=10], AppleEntity [Hash = 992819960, id=1005, name=   , price=10], AppleEntity [Hash = 1178329478, id=1006, name=   , price=10], AppleEntity [Hash = 1178598558, id=1007, name=   , price=10], AppleEntity [Hash = 978880655, id=1008, name=   , price=10], AppleEntity [Hash = 1232562686, id=1009, name=   , price=20], AppleEntity [Hash = 987502881, id=1010, name=   , price=20], AppleEntity [Hash = 832799179, id=1011, name=   , price=20], AppleEntity [Hash = 1035021448, id=1012, name=   , price=20], AppleEntity [Hash = 1175784884, id=1013, name=   , price=20], AppleEntity [Hash = 976335100, id=1014, name=   , price=20], AppleEntity [Hash = 1176054925, id=1015, name=   , price=20], AppleEntity [Hash = 990279210, id=1016, name=   , price=20], AppleEntity [Hash = 976337983, id=1017, name=   , price=20], AppleEntity [Hash = 1232958618, id=1018, name=   , price=20], AppleEntity [Hash = 990060577, id=1019, name=   , price=30], AppleEntity [Hash = 1102611936, id=1020, name=   , price=30], AppleEntity [Hash = 835357836, id=1021, name=   , price=30], AppleEntity [Hash = 1037580105, id=1022, name=   , price=30], AppleEntity [Hash = 992834984, id=1023, name=   , price=30], AppleEntity [Hash = 1178344502, id=1024, name=   , price=30], AppleEntity [Hash = 1178613582, id=1025, name=   , price=30], AppleEntity [Hash = 978895679, id=1026, name=   , price=30]]
    
    2018-02-04 18:39:08 INFO  AppleApp:69 -  12 
    2018-02-04 18:39:08 DEBUG SQL_CACHE:54 - Cache Hit Ratio [SQL_CACHE]: 0.6666666666666666
    2018-02-04 18:39:08 DEBUG selectAll:159 - ==>  Preparing: select id, name, price from apple LIMIT ? 
    2018-02-04 18:39:08 DEBUG selectAll:159 - ==> Parameters: 2(Integer)
    2018-02-04 18:39:08 DEBUG selectAll:159 - <==      Total: 2
    2018-02-04 18:39:08 INFO  AppleApp:72 - Page{count=true, pageNum=1, pageSize=2, startRow=0, endRow=2, total=26, pages=13, reasonable=true, pageSizeZero=true}
    2018-02-04 18:39:08 INFO  AppleApp:74 - [AppleEntity [Hash = 990045553, id=1001, name=   , price=10], AppleEntity [Hash = 1102596912, id=1002, name=   , price=10], AppleEntity [Hash = 835342812, id=1003, name=   , price=10], AppleEntity [Hash = 1037565081, id=1004, name=   , price=10], AppleEntity [Hash = 992819960, id=1005, name=   , price=10], AppleEntity [Hash = 1178329478, id=1006, name=   , price=10], AppleEntity [Hash = 1178598558, id=1007, name=   , price=10], AppleEntity [Hash = 978880655, id=1008, name=   , price=10], AppleEntity [Hash = 1232562686, id=1009, name=   , price=20], AppleEntity [Hash = 987502881, id=1010, name=   , price=20], AppleEntity [Hash = 832799179, id=1011, name=   , price=20], AppleEntity [Hash = 1035021448, id=1012, name=   , price=20], AppleEntity [Hash = 1175784884, id=1013, name=   , price=20], AppleEntity [Hash = 976335100, id=1014, name=   , price=20], AppleEntity [Hash = 1176054925, id=1015, name=   , price=20], AppleEntity [Hash = 990279210, id=1016, name=   , price=20], AppleEntity [Hash = 976337983, id=1017, name=   , price=20], AppleEntity [Hash = 1232958618, id=1018, name=   , price=20], AppleEntity [Hash = 990060577, id=1019, name=   , price=30], AppleEntity [Hash = 1102611936, id=1020, name=   , price=30], AppleEntity [Hash = 835357836, id=1021, name=   , price=30], AppleEntity [Hash = 1037580105, id=1022, name=   , price=30], AppleEntity [Hash = 992834984, id=1023, name=   , price=30], AppleEntity [Hash = 1178344502, id=1024, name=   , price=30], AppleEntity [Hash = 1178613582, id=1025, name=   , price=30], AppleEntity [Hash = 978895679, id=1026, name=   , price=30]]
    2018-02-04 18:39:08 DEBUG JdbcTransaction:123 - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@687080dc]
    2018-02-04 18:39:08 DEBUG JdbcTransaction:91 - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@687080dc]
    2018-02-04 18:39:08 DEBUG PooledDataSource:363 - Returned connection 1752203484 to pool.
    4.PageHelperプラグインについて
    4.1. と の
  • pom.xmlはjarパケットを します.come.githb.pagehelper.pagehelper
  • MyBatisプロファイル ページブロッカー:comp.githb.pagehelper.PageInterceptr
  • コードの で、 ページが なクエリーの に、 ページを く:PageHelper.startPage(1,5)
  • 4.2.PageHelper び し
  • PageHelper は なThreadLocalパラメータを しており、 ページパラメータとスレッドはバインディングされている.
  • PageHelperメソッドの び し にMyBatisクエリ に くことが されている り、PageHelperはfinallyコードセグメントの で にThreadLocalの されているオブジェクトをクリアします.
  • は、 にPageHelper ページ を び すだけで、MyBatisクエリを しないと、 ではない.
  • なやり
    //         
    PageHelper.startPage(1, 10);
    List list;
    //  param1 == null,         MyBatis  ,      !
    if(param1 != null){
        list = countryMapper.selectIf(param1);
    } else {
        list = new ArrayList();
    }
    List list;
    //        MyBatis           ,     !
    if(param1 != null){
        PageHelper.startPage(1, 10);
        list = countryMapper.selectIf(param1);
    } else {
        list = new ArrayList();
    }
    4.3.PageHelperその の
  • PageHelperクエリの は、すべてPageであり、 でタイプ を う がある.
  • PageHelper.startPageメソッドに く のMybatisのクエリのみがページ されます.
  • PageHelperプラグインは、for udate を む ページをサポートしていません.