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 u.name,u.sex,u.address,o.* from USER u left join ORDERS o
on u.id=o.user_id
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
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
一对多关联
实体类
public class Classroom {
private int id;
private String name;
private List stuList;
//略
}
public class Student {
private int id;
private String name;
//略
}
ClassroomMapper.xml
select c.id,c.name,s.id sid,s.name sname from classroom c left join student s
on s.cid=c.id
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 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