基于Maven项目,mybatis分页需要加入的依赖包,通过插件的方式进行分页的。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
<!-- 解析sql的包 -->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>3.0</version>
</dependency>
在mybatis-config主配置文件中,加入以下配置。
<!-- 配置分页插件 -->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
</plugins>
department 数据访问层接口类
package com.mapper;
import java.util.List;
import com.bean.Department;
public interface DepartmentMapper {
/**
* 添加部门
* @param department 部门对象
*/
public void saveDepartment(Department department);
/**
* 删除部门
* @param id 部门编号
*/
public void deleteDepartmentById(Integer id);
/**
* 修改部门
* @param department 部门对象
*/
public void updateDepartment(Department department);
/**
* 根据部门编号查询部门信息
* @param id 部门编号
* @return 返回查询部门信息
*/
public Department findDepartmentById(Integer id);
/**
* 查询全部部门
* @return 返回部门列表
*/
public List<Department> findDepartments();
}
数据访问层映射文件
<?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.mapper.DepartmentMapper">
<!-- 添加部门 -->
<!--
需求:数据插入成功后,获取当前记录的主键值,如何做?
有两种方式:
第一种:使用insert标签中的属性来设置,需要设置以下几个属性:
1)useGeneratedKeys="true":把useGeneratedKeys打开
2)keyColumn:用于指定数据库表中的主键字段
3)keyProperty:指定主键对象的实体属性名称
第二种:使用selectKey子标签来设置。属性如下:
1)keyColumn:用于指定数据库表中的主键字段
2)keyProperty:指定主键对象的实体属性名称
3)order:表示获取的时间顺序,有两个值:
a)BEFORE:表示执行insert语句之前获取
b)AFTER:表示执行insert语句之后获取,通常使用此值
4)resultType:获取得到主键类型
-->
<insert id="saveDepartment">
<selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO tb_depart(name) VALUES(#{name})
</insert>
<!-- 删除部门 -->
<delete id="deleteDepartmentById" parameterType="int">
DELETE FROM tb_depart WHERE id=#{id}
</delete>
<!-- 修改部门 -->
<update id="updateDepartment" parameterType="Department">
UPDATE tb_depart SET name=#{name} WHERE id=#{id}
</update>
<!-- 根据部门编号查询部门信息 -->
<select id="findDepartmentById" parameterType="int" resultType="Department">
SELECT * FROM tb_depart WHERE id=#{id}
</select>
<!-- 查询全部部门 -->
<select id="findDepartments" resultType="Department">
SELECT * FROM tb_depart
</select>
</mapper>
测试类
package mybatis02;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.bean.Department;
import com.mapper.DepartmentMapper;
import com.util.MyBatisUtil;
/**
* 部门测试类
* @title DepartmentTest.java
*/
public class DepartmentTest {
// 创建logger对象 日志文件
private static final Logger logger = LogManager.getLogger(DepartmentTest.class);
// 测试添加部门,要想获得添加后的id,需要通过获取对象id的方式,即对象.getId();方法
@Test
public void testSaveDepartment() {
// 获取SqlSession
SqlSession session = MyBatisUtil.openSession();
// 获取mapper对象
DepartmentMapper mapper = session.getMapper(DepartmentMapper.class);
try {
Department department = new Department("后勤部");
// 执行添加方法
mapper.saveDepartment(department);
// 提交事务
session.commit();
logger.info("添加成功!" + department);
System.out.println(department);
} catch (Exception e) {
e.printStackTrace();
session.rollback(); // 回滚事务
logger.info("添加失败!");
} finally {
// 关闭资源
session.close();
}
}
// 修改
@Test
public void testUpdateDepartment() {
SqlSession session = MyBatisUtil.openSession();
DepartmentMapper mapper = session.getMapper(DepartmentMapper.class);
mapper.updateDepartment(new Department(2,"财务部"));
session.commit();
session.close();
}
// 查询
@Test
public void testFindDepartmentById() {
SqlSession session = MyBatisUtil.openSession();
DepartmentMapper mapper = session.getMapper(DepartmentMapper.class);
Department department = mapper.findDepartmentById(2);
System.out.println(department);
session.close();
logger.info("查询成功!");
}
// 查询全部
@Test
public void testFindDepartments() {
SqlSession session = MyBatisUtil.openSession();
DepartmentMapper mapper = session.getMapper(DepartmentMapper.class);
//Page<Object> page = PageHelper.startPage(2, 3); // 设置分页
PageHelper.startPage(4, 3);
List<Department> departs = mapper.findDepartments();
for (Department depart : departs) {
System.out.println(depart);
}
/*
System.out.println("列数:" + page.getCountColumn());
System.out.println("当前页:" + page.getPageNum());
System.out.println("总页:" + page.getPages());
System.out.println("每页显示的记录数:" + page.getPageSize());
System.out.println("排序:" + page.getOrderBy());
System.out.println("最后一行:" + page.getEndRow());
System.out.println("开始一行:" + page.getStartRow());
System.out.println("总记录数:" + page.getTotal());
*/
PageInfo<Department> pageInfo = new PageInfo<Department>(departs, 3);
System.out.println("下一页:" + pageInfo.getNextPage());
System.out.println("当前页:" + pageInfo.getPageNum());
System.out.println("总页数:" + pageInfo.getPages());
System.out.println("是否为第一页:" + pageInfo.isIsFirstPage());
System.out.println("是否为最后一页:" + pageInfo.isIsLastPage());
System.out.println("是否有下一页:" + pageInfo.isHasNextPage());
int[] ps = pageInfo.getNavigatepageNums();
//int ps = pageInfo.getNavigatePages();
for (int i = 0; i < ps.length; i++) {
System.out.print(ps[i] + " ");
}
System.out.println();
session.close();
}
// 删除
@Test
public void testDeleteDepartmentById() {
SqlSession session = MyBatisUtil.openSession();
DepartmentMapper mapper = session.getMapper(DepartmentMapper.class);
mapper.deleteDepartmentById(3);
session.commit();
session.close();
}
}