MyBaits學習筆記(mysql分頁實現)

一、MySQL的sql分頁語句

--currentPage 當前頁
--pageSize 頁面大小
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");
	//1.得到sqlSessionFactory
	static SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is );
	/**
	 * 得到Session
	 * @retrun
	 * */
	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.方法一

  • 在UserMapping.xml添加以下代碼
<!-- 分頁查詢全部 -->
<select id="queryForPage1"  resultType="com.lasing.domain.User">
      select * from user limit #{param1},#{param2}
</select>
  • 在UserMapper添加以下代碼
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.方法二

  • 在UserMapping.xml添加以下代碼
<select id="queryForPage2" resultType="com.lasing.domain.User">
     select * from user limit #{startIndex},#{pageSize}
</select>
  • 在UserMapper添加以下代碼
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來實現分頁】

  • 在UserMapping.xml添加以下代碼
<select id="queryForPage3" resultType="com.lasing.domain.User">
      select * from user
</select>
  • 在UserMapper添加以下代碼
//不寫,使用sqlsession中的方法,也可以自己定義
  • 測試
import java.util.List;

import org.apache.ibatis.session.RowBounds;//導mybatis裏面的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;
		/**
		* 參數1:開始條  偏移量
		* 參數2:查詢總條數
		* */
		RowBounds rowBounds = new  RowBounds((currentPage-1)*pageSize,pageSize);
		List<User> list =  session.selectList("com.lasing.mapper.UserMapper.queryAll",  null, rowBounds);//使用sqlsession核心接口的方法
		for (User user : list) {
			System.out.println(user.toString());
		}
	}
}

4.方法四【通過工具類PageBean存儲分頁信息進行分頁,實戰中常用】

  • 在UserMapping.xml添加以下代碼
<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>
  • 在UserMapper添加以下代碼
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() + "條");
	}
}

四、模糊+分頁查詢

  • 在UserMapping.xml添加以下代碼
<!-- 模糊查詢總條數 -->
<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>
  • 在UserMapper添加以下代碼
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() +  "條");
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章