plugins分页查询
应用场景
MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据,分页功能只需要在配置文件中引入plugins标签。
代码实现
导入PageHelper分页插件坐标
<!--分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.3</version>
</dependency>
在MyBatis核心配置文件配置PageHelper分页插件
<!--设置分页插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
测试代码
// 分页插件测试
@Test
public void testPageHelper() throws Exception {
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
// 指定查询页码和每页显示条数
PageHelper.startPage(1, 3);
List<Person> list = PersonMapper.findByIdAndNameIf(null);
for (Person person: list) {
System.out.println(person);
}
// 获取其他分页数据
PageInfo<Person> pageInfo = new PageInfo<>(list);
System.out.println(pageInfo.getTotal()); //总记录数
System.out.println(pageInfo.getPages());//总页数
System.out.println(pageInfo.getPageNum()); //当前页
System.out.println(pageInfo.getPageSize());//每页显示条数
System.out.println(pageInfo.isIsFirstPage());//是否为第一页
System.out.println(pageInfo.isIsLastPage());//是否为最后一页
}
MyBatis的多表联合查询
一对一
一对一操作:通过一方可以关联查询出另外一方的关系数据
案例中是通过Person可以查询当前Person关联的唯一的证件Card的数据,在card表中我们设定了一个外键字段per_fk 关联peson表中的主键id字段。
PersonMapper.xml
<resultMap type="person" id="newperson">
<id property="id" column="id"/>
<result property="name" column="name"/>
<!--
一对一操作的映射配置
column: 当前的主类,提供查询从表对象的依据.
javaType: 查询从表最终获取的结果类型.
property 当前类型中对应的属性
-->
<association property="card" column="id" javaType="com.offcn.bean.Card">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="num" column="num"/>
</association>
</resultMap>
<select id="getInfoById" parameterType="string" resultMap="newperson">
<!-- 第一种和第二种配置方式的查询语句写法 -->
SELECT p.*,c.* FROM person p,card c WHERE p.id=c.per_fk AND p.name=#{name}
</select>
mybatis-config.xml
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/offcn/mapper/PersonMapper.xml"/>
</mappers>
</configuration>
一对多
本案例采用的是用户和订单来进行讲解,一个用户可以关联查询出自己的订单信息,在订单表中添加一个外键字段关联用户表中的主键。
TeacherMapper.xml
<mapper namespace="com.offcn.mapper.TeacherMapper">
<!--附加: Student selectStudentById(int i); -->
<resultMap id="map999" type="com.offcn.pojo.Student">
<id property="sid" column="sid"></id>
<result property="sname" column="sname"></result>
<result property="fkTid" column="fk_tid"></result>
<association property="teacher" javaType="com.offcn.pojo.Teacher"
column="fk_tid"
select="selectTeacherByTid"
></association>
</resultMap&