MyBatis(6)

本文介绍了如何使用MyBatis的PageHelper插件来简化数据库查询的分页操作。通过在配置文件中添加PageInterceptor插件,并在Mapper接口中调用startPage方法,可以轻松实现数据的分页查询,避免了在每个查询语句后手动添加limit关键字的繁琐工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值