1.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.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>
3.创建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;
}
}
4.数据访问接口
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();
}
5.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="person" separator=",">
(null,#{person.username},#{person.userage},#{person.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>
6.创建核心配置文件
<!-- 配置分页插件的拦截器 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 配置方言,使用的是那个库 ,在PageHelper5.0之后 不需要配置-->
<!-- <property name="dialect" value="mysql"/> -->
</plugin>
</plugins>
7.测试代码
package com.wangxing.mybatis.test;
import com.github.pagehelper.Page;
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("zhangsan-"+i);
userBean.setUserage(20+i);
userBean.setUseraddress("xian-"+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(2,10);
List<UserBean> userBeanList=userMapper.selectUser();
PageInfo<UserBean> pageInfo=new PageInfo<UserBean>(userBeanList);
//Page<UserBean> page=(Page<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()+" "+userBean.getUsername());
}
}catch (Exception e){
e.printStackTrace();
sqlSession.rollback();
}finally {
sqlSession.close();
}
}
public static void main(String[] args) {
//testInsert();
testSelectPage();
}
}
8.运行结果
2.通过mybatis-generator工具生成java代码
根据数据库表结构去自动生成项目中的java代码【实体类{javaBean},数据访问接口,Mapper文件】
需要4个文件:
- mybatis-generator-core-1.3.6.jar 核心
- mysql-connector-java-5.1.27.jar 数据库驱动
- generatorConfig.xml 配置文件
- mybatis.bat 可执行文件
下载地址:https://github.com/mybatis/generator/releases
使用mybatis-generator工具示例:
1.创建数据库表
#创建Person表
create table t_person(
per_id int primary key auto_increment,
per_name varchar(20),
per_pass varchar(20),
per_age int,
per_address varchar(20),
per_sex bit,
per_day datetime
);
2.修改generatorConfig.xml 配置文件【使用说明.txt】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--数据库驱动-->
<classPathEntry location="mysql-connector-java-5.1.27.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接地址账号密码-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test"
userId="root"
password="123456">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--生成javabean类存放位置-->
<javaModelGenerator targetPackage="com.wangxing.mybatis.bean" targetProject="src">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成SQL映射文件存放位置-->
<sqlMapGenerator targetPackage="com.wangxing.mybatis.mapper" targetProject="src">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--生成 Mapper接口存放位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.wangxing.mybatis.mapper" targetProject="src">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--生成对应表及类名-->
<table tableName="t_person" domainObjectName="PersonBean" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true"/>
</context>
</generatorConfiguration>
双击”mybatis.bat”,在当前目录下生成src文件夹,保存的是根据数据库表生成的【实体类{javaBean},数据访问接口,Mapper文件】