一对一
一对一关联查询分为两种方式:一种为嵌套结果查询,一种为嵌套条件查询(推荐使用)
利用User实体类和Position实体类为例:
User实体类
public class User implements Serializable{
private Integer id; private String userName; private String realName; private Byte sex; private String mobile; private String email; private String note; private TPosition position; private TPosition position2; private List<TJobHistory> jobs ; private List<HealthReport> healthReports; private List<TRole> roles; 省略get set方法 }
Position实体类
public class Position { private Integer id; private String postName; private String note; 省略get set 方法 }
XML配置(嵌套结果)
<!-- BaseResultMap --> <resultMap id="BaseResultMap" type="TUser"> <id column="id" property="id" /> <result column="user_name" property="userName" /> <result column="real_name" property="realName" /> <result column="sex" property="sex" /> <result column="mobile" property="mobile" /> <result column="email" property="email" /> <result column="note" property="note" /> </resultMap> <!-- 拓展resultMap 可以进行继承操作 --> <resultMap id="userAndPosition1" extends="BaseResultMap" type="TUser"> <association property="position" javaType="TPosition" columnPrefix="post_"> <id column="id" property="id"/> <result column="name" property="postName"/> <result column="note" property="note"/> </association> </resultMap> <!-- 查询语句 SQL连接查询 --> <select id="selectUserPosition1" resultMap="userAndPosition1"> select a.id, user_name, real_name, sex, mobile, email, a.note, b.id post_id, b.post_name, b.note post_note from t_user a, t_position b where a.position_id = b.id </select>
XML配置(嵌套条件)
<!-- BaseResultMap --> <resultMap id="BaseResultMap" type="TUser"> <id column="id" property="id" /> <result column="user_name" property="userName" /> <result column="real_name" property="realName" /> <result column="sex" property="sex" /> <result column="mobile" property="mobile" /> <result column="email" property="email" /> <result column="note" property="note" /> </resultMap> <!-- 拓展resultMap 可以进行继承操作 可以引用其他mapper文件方法--> <resultMap id="userAndPosition2" extends="BaseResultMap" type="TUser"> <association property="position" fetchType="lazy" column="position_id" select="com.enjoylearning.mybatis.mapper.PositionMapper.selectByPrimaryKey" /> <association property="position2" fetchType="lazy" column="post_id" select="com.enjoylearning.mybatis.mapper.PositionMapper.selectByPrimaryKey" /> </resultMap> <!-- 查询语句 SQL连接查询 --> <select id="selectUserPosition2" resultMap="userAndPosition2"> select a.id, a.user_name, a.real_name, a.sex, a.mobile, a.position_id, a.post_id from t_user a </select>
无论是嵌套结果还是嵌套查询,只要是一对一的关联都可以用如上方法得到数据。
细心的小伙伴可以发现,在嵌套条件时,我加入了两个association 分别对应User表中的两个Position实体,这个用处就在于,当User表关联两个Dictionary字典表时,可以进行配置多个也是可以的。