-
resultType方式
实体类
public class Orders{
private Long id;
private String name;
private Double prices;
//略
}
public class Custom extends Orders{
private String name;
private String sex;
private String address;
//略
}
UserMapper.xml
<select id="findOrdersUser" resultType="Custom">
select u.name,u.sex,u.address,o.* from USER u left join ORDERS o
on u.id=o.user_id
</select>
-
resultMap方式
-
一对一关联
实体类
public class Student {
private int id;
private String name;
private int cid;
private Classroom classroom;//写不写都可以
//略
}
public class Classroom {
private int id;
private String name;
//略
}
StudentMapper.xml
<resultMap type="Student" id="mymap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="cid" property="cid"/>
<association property="classroom" javaType="Classroom">
<!-- id:关联查询用户的唯一标识
column:指定唯一标识用户信息的列
javaType:映射到Student的哪个属性
-->
<id column="cid" property="id"/>
<result column="cname" property="name"/>
</association>
</resultMap>
<select id="selAll" resultMap="mymap">
select s.id,s.name,s.cid,c.id cid,c.name cname from student s left join classroom c
on s.cid=c.id
</select>
-
一对多关联
实体类
public class Classroom {
private int id;
private String name;
private List<Student> stuList;
//略
}
public class Student {
private int id;
private String name;
//略
}
ClassroomMapper.xml
<resultMap type="Classroom" id="mymap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<collection property="stuList" ofType="Student">
<!--
collection:对关联查询到多条记录映射到集合对象中
property:将关联查询到多条记录映射到Classroom的stuList属性
ofType:指定映射到list集合属性中pojo的类型
-->
<id column="sid" property="id"/>
<result column="sname" property="name"/>
</collection>
</resultMap>
<select id="selAll" resultMap="mymap">
select c.id,c.name,s.id sid,s.name sname from classroom c left join student s
on s.cid=c.id
</select>
-
resultType、resultMap总结:
resultType:
作用:将查询结果按照sql列名、pojo属性名一致性映射到pojo中。
场合:常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页面时,此时可直接使用resultType将每一条记录映射到pojo中,在前端页面遍历list(list中是pojo)即可。
resultMap:使用association和collection完成一对一和一对多高级映射(对结果有特殊的映射要求)。
association:
作用:将关联查询信息映射到一个pojo对象中。
场合:为了方便查询关联信息可以使用association将关联订单信息映射为用户对象的pojo属性中,比如:查询订单及关联用户信息。
使用resultType无法将查询结果映射到pojo对象的pojo属性中,根据对结果集查询遍历的需要选择使用resultType还是resultMap。
collection:
作用:将关联查询信息映射到一个list集合中。
场合:为了方便查询遍历关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块及模块下的菜单,可使用collection将模块映射到模块list中,将菜单列表映射到模块对象的菜单list属性中,这样的作的目的也是方便对查询结果集进行遍历查询。
如果使用resultType无法将查询结果映射到list集合中。
-
AutoMapping一对一关联查询
把对象间的关联关系通过起别名的方式,连接对象属性和sql字段。
别名格式: `对象名.属性名`
其中 ` 是mysql中去关键字的
. 点在sql命令中是关键字
实体类
public class Student {
private int id;
private String name;
private int cid;
private Classroom classroom;//写不写都可以
//略
}
public class Classroom {
private int id;
private String name;
//略
}
StudentMapper.xml
<select id="selAll" resultType="Student">
select s.id,s.name,s.cid,c.id `classroom.id`,c.name `classroom.name`
from student s left join classroom c on s.cid=c.id
</select>