MyBatisコード例シリーズ-10:MyBatis PageHelperプラグインによる改ページクエリを実現します.
78009 ワード
スーパーチャネル:MyBatisコードインスタンスシリーズ-序論
この章は主にMyBatisを記録します.PageHelperプラグインを通じて、ページ別のクエリを実現します.関連する技術点は以下の通りです.
comple.github.pagehelperはオープンソースのMyBatis改ページプラグインで、アドレスは:https://github.com/pagehelper/Mybatis-PageHelper
1.SQL
2.1.jarパッケージの導入
私が使っているのはMaven方式です.pom.xmlは以下の通りです.
現在は2つの方法があります.は、MyBatisプロファイルにスクリーンセーバープラグイン を配置する. Springプロファイルにスクリーンセーバープラグイン を配置する.
詳細なパラメータはたくさんあります.興味があれば自分で参考してください.https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
私は第一の方式を採用しています.私の構成は以下の通りです.
3.1.MyBatis Generatorによるコード生成
参照できます.MyBatisコードの例シリーズ-08:Mavenを通じてMyBatis Generatorを実行し、MyBatis Generatorの拡張用法―中国語の注釈を生成し、MapperをDaoと改めて命名します.
生成結果は以下の通りです.Apple Enttity.java
この章は主に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つの方法があります.
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="param1" value="value1"/>
plugin>
plugins>
<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.javapackage 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.javapackage 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 - 1 , 5
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 - 2 , 5
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 - 1 , 2
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 を む ページをサポートしていません.