一、标签
在sqlmapper配置文件中使用多表联查:
一对一:在resultMap标签中使用association标签,语法:
<resultMap type = "需要映射的实体类名" id = "别名">
<result column = "表中的字段名" property = "实体类中的属性名" />
<association property = "表联查时在实体类对应的属性名">
<result column = "联查的表中的字段名" property = "联查的实体类中的属性名">
</association>
</resultMap>
<select id = "接口类中的方法名" resultMap = "resultMap中起的别名(即id的值)">
对应的sql语句
</select>
<!-- 表联查时,要将两个表所有的字段都要分别做映射关系处理,无论是否与属性名相同 -->
一对多:在resultMap标签中使用collection标签,语法:
<resultMap type = "需要映射的实体类名" id = "别名">
<result column = "表中的字段名" property = "实体类中的属性名" />
<collection property = "表联查时实体类中对应的属性名" ofType = "表联查对应的实体类名">
<result column = "表联查中的字段名" property = "表联查对应实体类中的属性名" />
</collection>
<select id = "接口类中的方法名" resultMap = "resultMap中起的别名(即id的值)">
对应的sql语句
</select>
<!-- 表联查时,要将两个表所有的字段都要分别做映射关系处理,无论是否与属性名相同 -->
二、注解
在@Results注解里使用@Result注解
一对一:在@Result注解中使用@One注解
// 若想在联查时显示传走的字段名对应的值,需要写对应映射
@Result({
@Result(column = "字段名",property = "属性名"),
@Result(column = "表联查需要的传输的字段名",property = "表联查时当前实体类对应的属性名",
one = @One(select = "在表联查对应的接口类中对应方法的完整路径,不用写(参数)"))
})
@select("全查的sql语句")
// 写注解的时候不需要映射的字段可以不写映射,在表联查的时候尽量写全查
一对多:在@Result注解中使用@Many注解
// 若想在联查时显示传走的字段名对应的值,需要写对应映射
@Result({
@Result(column = "字段名",property = "属性名"),
@Result(column = "表联查需要的传输的字段名",property = "表联查时当前实体类对应的属性名",
many= @Many(select = "在表联查对应的接口类中对应方法的完整路径,不用写(参数)"))
})
@select("全查的sql语句")
// 写注解的时候不需要映射的字段可以不写映射,在表联查的时候尽量写全查