1.MyBatis的分页
使用JDBC的方式实现过关于数据的分页,主要实现的原理:在查询的语句后面添加limit关键字,然后实现查询的数据分页功能。
但是如果需要在所有的查询中都添加分页的话,那么就需要在所有的select语句后面添加limit关键字,这样的工作量是巨大的。同时也要改动大量的代码。
mybatis中提供的插件(plugin)机制,运行在mybatis的原有的处理逻辑上添加一些额外的逻辑,这样既不需要修改原来的代码,而且还可以非常容易进行实现。
mybatis的插件机制,本质就拦截指定的查询操作,然后在查询的操作添加相关的分页逻辑。
PageHelper插件
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- 配置分页依赖 -->
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
package com.zxc.user.bean;
public class UserBean {
private int userid;
private String username;
private int userage;
private String useraddress;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getUserage() {
return userage;
}
public void setUserage(int userage) {
this.userage = userage;
}
public String getUseraddress() {
return useraddress;
}
public void setUseraddress(String useraddress) {
this.useraddress = useraddress;
}
}
package com.zxc.user.mapper;
import com.zxc.user.bean.UserBean;
import java.util.List;
public interface UserMapper {
boolean inserMore(List<UserBean> userBeanList);
List<UserBean> selectUser();
}
<?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.zxc.user.mapper.UserMapper">
<insert id="inserMore" parameterType="java.util.List" >
insert into t_user values
<foreach collection="list" item="user" separator=",">
(null,#{user.username},#{user.userage},#{user.useraddress})
</foreach>
</insert>
<resultMap id="userMap" type="com.zxc.user.bean.UserBean">
<id column="user_id" property="userid"></id>
<result column="user_name" property="username"></result>
<result column="user_age" property="userage"></result>
<result column="user_address" property="useraddress"></result>
</resultMap>
<select id="selectUser" resultMap="userMap">
select * from t_user
</select>
</mapper>
mydrivername=com.mysql.jdbc.Driver
myurl=jdbc:mysql://127.0.0.1:3306/test3?useUnicode=true&characterEncoding=UTF-8
myusername=root
mypassword=123456
<?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="mydata.properties"></properties>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
<!-- 配置mybatis默认的连接数据库的环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事务管理器 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${mydrivername}"/>
<property name="url" value="${myurl}"/>
<property name="username" value="${myusername}"/>
<property name="password" value="${mypassword}"/>
</dataSource>
</environment>
</environments>
<!-- 配置MyBatis数据访问接口的SQL映射文件路径 -->
<mappers>
<mapper resource="UserMapper.xml"></mapper>
</mappers>
</configuration>
public static void inserMore(){
SqlSession sqlSession=null;
try{
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
sqlSession=sqlSessionFactory.openSession();
UserMapper userMapper= sqlSession.getMapper(UserMapper.class);
List<UserBean> list=new ArrayList<UserBean>();
for(int i=1; i<=50;i++){
UserBean userBean=new UserBean();
userBean.setUsername("zhangsan--"+i);
userBean.setUserage(20+i);
userBean.setUseraddress("西安--"+i);
list.add(userBean);
}
userMapper.inserMore(list);
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
public static void selectUser(){
SqlSession sqlSession=null;
try{
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
sqlSession=sqlSessionFactory.openSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
PageHelper.startPage(2,10);
List<UserBean> userBeanList=userMapper.selectUser();
PageInfo<UserBean> pageInfo=new PageInfo<UserBean>(userBeanList);
List<UserBean> userBeans=pageInfo.getList();
for(UserBean userBean:userBeans){
System.out.println("姓名是"+userBean.getUsername());
}
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}