一、MySQL的sql分頁語句
SELECT *
FROM table
LIMIT ( currentPage- 1 ) * pageSize, pageSize;
二、創建項目並導包(準備工作)
1. 這裏我創建的是動態web項目
2. 導包(沒有jar包的可以去maven下載)
3.創建mybatis.cfg.xml
< ? xml version= "1.0" encoding= "UTF-8" ? >
< ! -- 引入頭文件 -- >
< ! DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
< configuration>
< properties resource= "db.properties" > < / properties>
< settings>
< setting name= "logImpl" value= "LOG4J" / >
< / settings>
< ! -- 配置數據庫的連接
default :默認使用哪一個數據庫連接
-- >
< environments default = "mysql" >
< environment id= "mysql" >
< ! -- 事務管理 使用JDBC的事務 -- >
< transactionManager type= "JDBC" > < / transactionManager>
< ! -- 使用什麼數據庫連接池 durid -- >
< dataSource type= "POOLED" >
< property name= "driver" value= "${dirver}" / >
< property name= "url" value= "${url}" / >
< property name= "username" value= "${username}" / >
< property name= "password" value= "${password}" / >
< / dataSource>
< / environment>
< / environments>
< ! -- 配置映射 -- >
< mappers>
< mapper resource= "com/lasing/mapping/UserMapping.xml" / >
< / mappers>
< / configuration>
4. 創建db.properties
#修改數據庫username, password, url爲自己的數據庫
dirver= com. mysql. jdbc. Driver
url= jdbc: mysql: / / localhost: 3306 / springdemo
username= root
password= 123456
5. 創建User實體類(記得在mysql創建數據庫和表)
package com. lasing. domain;
import java. util. Date;
public class User {
private Integer id;
private String name;
private String address;
private Date birthday;
public User ( ) {
}
public User ( String name, String address, Date birthday) {
this . name = name;
this . address = address;
this . birthday = birthday;
}
public User ( Integer id, String name, String address, Date birthday) {
this . id = id;
this . name = name;
this . address = address;
this . birthday = birthday;
}
public Integer getId ( ) {
return id;
}
public void setId ( Integer id) {
this . id = id;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public String getAddress ( ) {
return address;
}
public void setAddress ( String address) {
this . address = address;
}
public Date getBirthday ( ) {
return birthday;
}
public void setBirthday ( Date birthday) {
this . birthday = birthday;
}
@Override
public String toString ( ) {
return "User [id=" + id + ", name=" + name + ", address=" + address + ", birthday=" + birthday + "]" ;
}
}
6. 創建UserMapper
public interface UserMapper {
public void add ( User user) ;
}
7. 創建UserMapping.xml
< ? xml version= "1.0" encoding= "UTF-8" ? >
< ! -- 引入頭文件 -- >
< ! DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
< mapper namespace= "com.lasing.mapper.UserMapper" >
< ! -- 插入 -- >
< insert id= "add" parameterType= "com.lasing.domain.User" >
insert into user ( name, address, birthday) values ( #{ name} , #{ address} , #{ birthday} )
< / insert>
< / mapper>
8.創建MyBatisTest
public class MyBatisTest {
public static void main ( String[ ] args) {
}
}
9. 創建MyBatisUtils
package com. lasing. utils;
import java. io. InputStream;
import org. apache. ibatis. session. SqlSession;
import org. apache. ibatis. session. SqlSessionFactory;
import org. apache. ibatis. session. SqlSessionFactoryBuilder;
public class MybatisUtil {
static InputStream is = MybatisUtil. class . getResourceAsStream ( "/mybatis.cfg.xml" ) ;
static SqlSessionFactory factory = new SqlSessionFactoryBuilder ( ) . build ( is ) ;
public static SqlSession openSession ( ) {
return factory. openSession ( ) ;
}
public static void closeSession ( SqlSession session) {
session. commit ( ) ;
session. close ( ) ;
}
}
10. 創建工具類PageBean
package com. lasing. utils;
public class PageBean {
private Integer currentPage;
private Integer startIndex;
private Integer pageSize;
private Integer totalCount;
private Integer totalPage;
public Integer getCurrentPage ( ) {
return currentPage;
}
public void setCurrentPage ( Integer currentPage) {
this . currentPage = currentPage;
this . startIndex = ( this . currentPage- 1 ) * this . pageSize;
}
public Integer getStartIndex ( ) {
return startIndex;
}
public void setStartIndex ( Integer startIndex) {
this . startIndex = startIndex;
}
public Integer getPageSize ( ) {
return pageSize;
}
public void setPageSize ( Integer pageSize) {
this . pageSize = pageSize;
}
public Integer getTotalCount ( ) {
return totalCount;
}
public void setTotalCount ( Integer totalCount) {
this . totalCount = totalCount;
this . totalPage= ( int ) Math. ceil ( this . totalCount* 1.0 / pageSize) ;
}
public Integer getTotalPage ( ) {
return totalPage;
}
public void setTotalPage ( Integer totalPage) {
this . totalPage = totalPage;
}
}
三、分頁的方法【四種】
1.方法一
< ! -- 分頁查詢全部 -- >
< select id= "queryForPage1" resultType= "com.lasing.domain.User" >
select * from user limit #{ param1} , #{ param2}
< / select>
public List< User> queryForPage1 ( int currentPage, int pageSize) ;
public class MyBatisTest {
public static void main ( String[ ] args) {
SqlSession session = MybatisUtil. openSession ( ) ;
UserMapper Mapper = session. getMapper ( UserMapper. class ) ;
int currentPage = 1 ;
int pageSize = 5 ;
List< User> list = Mapper. queryForPage1 ( ( currentPage- 1 ) * pageSize, pageSize) ;
for ( User user : list) {
System. out. println ( user. toString ( ) ) ;
}
}
}
2.方法二
< select id= "queryForPage2" resultType= "com.lasing.domain.User" >
select * from user limit #{ startIndex} , #{ pageSize}
< / select>
public List< User> queryForPage2 ( Map< String, Object> map) ;
public class MyBatisTest {
public static void main ( String[ ] args) {
SqlSession session = MybatisUtil. openSession ( ) ;
UserMapper Mapper = session. getMapper ( UserMapper. class ) ;
int currentPage = 1 ;
int pageSize = 5 ;
Map< String, Object> map = new HashMap < > ( ) ;
map. put ( "startIndex" , ( currentPage- 1 ) * pageSize) ;
map. put ( "pageSize" , pageSize) ;
List< User> list = Mapper. queryForPage2 ( map) ;
for ( User user : list) {
System. out. println ( user. toString ( ) ) ;
}
}
}
3.方法三【通過RowBounds來實現分頁】
< select id= "queryForPage3" resultType= "com.lasing.domain.User" >
select * from user
< / select>
import java. util. List;
import org. apache. ibatis. session. RowBounds;
import org. apache. ibatis. session. SqlSession;
import com. lasing. domain. User;
import com. lasing. mapper. UserMapper;
import com. lasing. utils. MybatisUtil;
public class MyBatisTest {
public static void main ( String[ ] args) {
SqlSession session = MybatisUtil. openSession ( ) ;
UserMapper Mapper = session. getMapper ( UserMapper. class ) ;
int currentPage = 1 ;
int pageSize = 5 ;
RowBounds rowBounds = new RowBounds ( ( currentPage- 1 ) * pageSize, pageSize) ;
List< User> list = session. selectList ( "com.lasing.mapper.UserMapper.queryAll" , null, rowBounds) ;
for ( User user : list) {
System. out. println ( user. toString ( ) ) ;
}
}
}
4.方法四【通過工具類PageBean存儲分頁信息進行分頁,實戰中常用】
< select id= "queryCount" resultType= "java.lang.Integer" >
select count ( * ) from user
< / select>
< select id= "queryForPage4" resultType= "com.lasing.domain.User" >
select * from user limit #{ startIndex} , #{ pageSize}
< / select>
public Integer queryCount ( ) ;
public List< User> queryForPage4 ( PageBean pageBean) ;
public class MyBatisTest {
public static void main ( String[ ] args) {
SqlSession session = MybatisUtil. openSession ( ) ;
UserMapper mapper = session. getMapper ( UserMapper. class ) ;
int currentPage = 4 ;
int pageSize = 5 ;
Integer totalCount = mapper. queryCount ( ) ;
PageBean pageBean = new PageBean ( ) ;
pageBean. setPageSize ( pageSize) ;
pageBean. setCurrentPage ( currentPage) ;
pageBean. setTotalCount ( totalCount) ;
List< User> list = mapper. queryForPage4 ( pageBean) ;
for ( User user : list) {
System. out. println ( user. toString ( ) ) ;
}
System. out. println ( "當前第" + pageBean. getCurrentPage ( ) + "頁 共" + pageBean. getTotalCount ( ) + "條" ) ;
}
}
四、模糊+分頁查詢
< ! -- 模糊查詢總條數 -- >
< select id= "queryCount2" resultType= "java.lang.Integer" parameterType= "java.lang.String" >
select count ( * ) from user where name like "%" #{ value} "%" or address like "%" #{ value} "%"
< / select>
< select id= "queryLikeAsPage" resultType= "com.lasing.domain.User" >
select * from user
where name like "%" #{ keywords} "%" or address like "%" #{ keywords} "%"
limit #{ startIndex} , #{ pageSize}
< / select>
public Integer queryCount2 ( String keywords) ;
public List< User> queryLikeAsPage ( Map< String, Object> map) ;
public class MyBatisTest {
public static void main ( String[ ] args) {
SqlSession session = MybatisUtil. openSession ( ) ;
UserMapper mapper = session. getMapper ( UserMapper. class ) ;
int currentPage = 1 ;
int pageSize = 5 ;
String keywords = "ing1" ;
Integer count2 = mapper. queryCount2 ( keywords) ;
PageBean pageBean = new PageBean ( ) ;
pageBean. setPageSize ( pageSize) ;
pageBean. setCurrentPage ( currentPage) ;
pageBean. setTotalCount ( count2) ;
Map< String, Object> map = new HashMap < > ( ) ;
map. put ( "keywords" , keywords) ;
map. put ( "startIndex" , pageBean. getStartIndex ( ) ) ;
map. put ( "pageSize" , pageBean. getPageSize ( ) ) ;
List< User> list = mapper. queryLikeAsPage ( map) ;
for ( User user : list) {
System. out. println ( user. toString ( ) ) ;
}
System. out. println ( "當前第" + pageBean. getCurrentPage ( ) + "/" + pageBean. getTotalPage ( ) + "頁 共" + pageBean. getTotalCount ( ) + "條" ) ;
}
}