MyBatis_6

MyBatis_6

一、MyBatis的分页

通过分页插件来完成对数据库表记录的分页查询。
在javaWEB的学习过程中,使用JDBC的方式实现过关于数据的分页,主要实现的原理:

在查询的语句后面添加limit关键字,然后实现查询的数据分页功能。但是如果需要在所有的查询中都添加分页的话,那么就需要在所有的select语句后面添加limit关键字,这样的工作量是巨大的。同时也要改动大量的代码。
mybatis中提供的插件(plugin)机制,运行在mybatis的原有的处理逻辑上添加一些额外的逻辑,这样既不需要修改原来的代码,而且还可以非常容易进行实现。

mybatis的插件机制,本质就拦截指定的查询操作,然后在查询的操作添加相关的分页逻辑。

使用PageHelper实现分页
1.创建数据库表

#用户基本信息表
create  table t_user(
user_id int primary key auto_increment,
user_name varchar(20),
user_age int,
user_address varchar(30)
);

2.创建项目
3.修改项目结构
4.Pom.xml配置依赖

<!-- 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>

5.创建javabean

package com.wangxing.mybatis.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;
    }
}

6.创建数据访问接口

package com.wangxing.mybatis.mapper;

import com.wangxing.mybatis.bean.UserBean;

import java.util.List;

public interface UserMapper {
    public  void insertUser(List<UserBean> userBeanList);
    public  List<UserBean> selectUser();
}

7.SQL映射文件

<?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.wangxing.mybatis.mapper.UserMapper">
    <insert id="insertUser" 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.wangxing.mybatis.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>

8.创建核心配置文件

<?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="mydate.properties"></properties>
    <!--配置控制台输出sql语句-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--配置分页插件的拦截器-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 配置方言,使用的是那个库  ,在PageHelper5.0之后 不需要配置-->
            <!--  <property name="dialect" value="mysql"/> -->
        </plugin>
    </plugins>
    <!-- 配置mybatis默认的连接数据库的环境 -->
    <environments default="development">
        <environment id="development">
            <!-- 配置事务管理器 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${mydriver}"/>
                <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>

9.测试代码

package com.wangxing.mybatis.test;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wangxing.mybatis.bean.UserBean;
import com.wangxing.mybatis.mapper.UserMapper;
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 java.util.ArrayList;
import java.util.List;
public class TestMain {
    //得到SqlSession对象
    public static SqlSession getSqlSession()throws Exception{
        SqlSession sqlSession=null;
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        return  sqlSessionFactory.openSession();
    }
    //得到添加到数据库表中的数据集合
    public  static List<UserBean> getData() {
        List<UserBean> userBeanList = new ArrayList<UserBean>();
        for (int i = 1; i <= 100; i++) {
            UserBean userBean = new UserBean();
            userBean.setUsername("张三-" + i);
            userBean.setUserage(20 + i);
            userBean.setUseraddress("西安-" + i);
            userBeanList.add(userBean);
        }
        return userBeanList;
    }
    //批量添加数据
    public static  void testInsert(){
        SqlSession sqlSession=null;
        try {
            sqlSession=getSqlSession();
            UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
            userMapper.insertUser(getData());
            sqlSession.commit();
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally {
            sqlSession.close();
        }
    }
    //测试分页查询
    public static void testSelectPage(){
        SqlSession sqlSession = null;
        try{
            sqlSession = getSqlSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            //设置分页参数
            //设置分页的起始页码和每页的显示数据的行数
            PageHelper.startPage(1,10);
            List<UserBean> userBeanList=userMapper.selectUser();
            PageInfo<UserBean> pageInfo = new PageInfo<UserBean>(userBeanList);
            sqlSession.commit();
            System.out.println("当前页=="+pageInfo.getPageNum());
            System.out.println("每页数量=="+pageInfo.getPageSize());
            System.out.println("当前页的数量=="+pageInfo.getSize());
            System.out.println("总记录数=="+pageInfo.getTotal());
            System.out.println("总页数=="+pageInfo.getPages());
            //得到当前页的结果集合
            List<UserBean> userlist=pageInfo.getList();
            for(UserBean  userBean:userlist){
                System.out.println(userBean.getUserid()+
                        "\t"+userBean.getUsername()+
                        "\t"+userBean.getUserage()+
                        "\t"+userBean.getUseraddress());
            }
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally {
            sqlSession.close();
        }
    }
    public static void main(String[] args) {
        //testInsert();
        testSelectPage();
    }
}

添加数据结果:
在这里插入图片描述
分页查询结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis PageHelper是一个用于实现分页查询的插件,它可以帮助我们快速实现分页功能,并且与Mapper.xml完全解耦,避免了直接编写分页SQL的麻烦。在使用MyBatis PageHelper时,可以根据不同的情况进行配置。 如果你使用的是Spring Boot,可以直接配置几个属性来启用MyBatis PageHelper。在application.properties或application.yml文件中,添加以下配置项: ``` mybatis.configuration-properties.helperDialect=mysql mybatis.configuration-properties.offsetAsPageNum=true mybatis.configuration-properties.rowBoundsWithCount=true mybatis.configuration-properties.reasonable=true mybatis.configuration-properties.mapper-locations=mybatis/mapper/*.xml ``` 其中,helperDialect指定了数据库的方言,offsetAsPageNum设置为true表示使用RowBounds分页方式,rowBoundsWithCount设置为true表示查询总数时会同时执行count查询,reasonable设置为true表示当pageNum<=0或pageNum>pages时会自动修正为合理的值,mapper-locations指定了Mapper.xml文件的位置。 另外,如果你使用的是Spring Boot,还可以直接引入pagehelper-spring-boot-starter依赖,它会自动配置PageHelper,省去了许多不必要的配置。 ```xml <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.12</version> </dependency> ``` 通过以上配置,你就可以在MyBatis中使用PageHelper来实现分页查询了。 #### 引用[.reference_title] - *1* [【Mybatis】使用PageHelper进行分页查询](https://blog.csdn.net/Flying_Ape/article/details/128098911)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Mybatis分页插件——PageHelper快速入门](https://blog.csdn.net/weixin_52850476/article/details/124802877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值