怎么在Mybatis中实现映射,分页,排序功能

  介绍

怎么在Mybatis中实现映射,分页,排序功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1,三种对象映射关系

1.1一对一

一个人对应一个身份证,一位同学对应一个班级,每个房间都有自己的房间号,当一个事物它对应另一个事物是唯一的,那么它们之间的关系就是一对一的。

这里我演示的案例是,一个学生有着一位老师

<强>老师基础信息:

怎么在Mybatis中实现映射,分页,排序功能

<强>学生详细信息:

怎么在Mybatis中实现映射,分页,排序功能

如果说,我们需要将两个表一起查出来,我们可以这么做:

<强>问题:强如果对象的列重复了,必须要使用到别名

1,先定义实体结构,也就是我们返结果的实体类

public  class  Student  {   ,@TableId   ,private  int  id;   ,private  String 名称;   ,private  int  tid;   ,@TableField (exist =,假)   ,private  Teacher 教师;   }

<>强老师:

public  class  Teacher  {   ,@TableId   ,private  int  id;   ,private  String 名称;   }

2,编写xml文件

这里有两种方式,使用协会时的关键在于告诉mybatis如何加载关联(assocition)。

<李>

嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型。

<李>

嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集。

<强>第一种:使用嵌套查询,也就是使用另一个SQL

//, teacherMapper.xml   & lt; ? xml  version=?.0“,编码=癠TF-8", ?比;   & lt; ! DOCTYPE 映射器   ,PUBLIC “-//mybatis.org//DTD  Mapper  3.0//EN"   ,“http://mybatis.org/dtd/mybatis-3-mapper.dtd"比;=& lt; mapper 名称空间“com.lll.mybatisplusdemo.mapper.TeacherMapper"祝辞   ,& lt; select  id=癵etTeacher", parameterType=癷nt", resultType=皌eacher"比;   ,select  *,得到teacher  where  id =, # {id};   ,& lt;/select>   & lt;/mapper>//studentMapper.xml   & lt; ? xml  version=?.0“,编码=癠TF-8", ?比;   & lt; ! DOCTYPE 映射器   ,PUBLIC “-//mybatis.org//DTD  Mapper  3.0//EN"   ,“http://mybatis.org/dtd/mybatis-3-mapper.dtd"比;      ,& lt; select  id=癵etStudent2", parameterType=癷nt", resultMap=癵etStudentMap2"比;   ,select  *,得到student  where  id =# {id};   ,& lt;/select>      ,& lt; resultMap  id=癵etStudentMap2",类型=皊tudent"比;   ,& lt; id 列=癷d",财产=癷d"祝辞& lt;/id>   ,& lt; result 列=皀ame",财产=皀ame"祝辞& lt;/result>   ,& lt; result 列=皌id",财产=皌id"祝辞& lt;/result>   ,& lt; association 财产=皌eacher",将javaType=皌eacher",列=皌id",选择=癱om.lll.mybatisplusdemo.mapper.TeacherMapper.getTeacher"比;   & lt;才能id 列=癷d",财产=癷d"祝辞& lt;/id>   & lt;才能result 列=皀ame",财产=皀ame"祝辞& lt;/result>   ,& lt;/association>   ,& lt;/resultMap>   & lt;/mapper>

嵌套查询的方式很简单,但是对于大型数据集合和列表将不会表现很好。问题就是我们熟知的
“N + 1查询问题”。概括地讲,N + 1查询问题可以是这样引起的:

<李>

你执行了一个单独的SQL语句来获取结果列表(就是“+ 1”)。

<李>

对返回的每条记录,你执行了一个查询语句来为每个加载细节(就是“N”)。

<强>第二种:使用嵌套结果来映射联合查询来的数据

& lt; ? xml  version=?.0“,编码=癠TF-8", ?比;   & lt; ! DOCTYPE 映射器   ,PUBLIC “-//mybatis.org//DTD  Mapper  3.0//EN"   ,“http://mybatis.org/dtd/mybatis-3-mapper.dtd"比;=& lt; mapper 名称空间“com.lll.mybatisplusdemo.mapper.StudentMapper"祝辞   ,& lt; select  id=癵etStudent", parameterType=癷nt", resultMap=癵etStudentMap"比;   SELECT 才能。*,b.id  as  cid, b.name  as  cname 得到‘学生’,as , teacher  as  b  WHERE  a.id =# {id},以及a.tid =, b.id;   ,& lt;/select>   ,& lt; resultMap  id=癵etStudentMap",类型=皊tudent"比;   ,& lt; id 列=癷d",财产=癷d"祝辞& lt;/id>   ,& lt; result 列=皀ame",财产=皀ame"祝辞& lt;/result>   ,& lt; result 列=皌id",财产=皌id"祝辞& lt;/result>   ,& lt; association 财产=皌eacher",将javaType=皌eacher"比;   & lt;才能id 列=癱id",财产=癷d"祝辞& lt;/id>   & lt;才能result 列=癱name",财产=皀ame"祝辞& lt;/result>   ,& lt;/association>   ,& lt;/resultMap>   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Mybatis中实现映射,分页,排序功能