Mybatis的association标签简介:
- mybatis进行多表查询时会用上association标签,它的属性包括property,column,javaType等,它的作用是让实体类对象与数据库表的列相互对应,以便让mybatis可以进行多表查询。
Mybatis的association标签用法:
第一种方式:(嵌套结果方式)
<!-- 定义封装account和user的resultMap -->
<resultMap id="标签的id既名字,可随意" type="查询的主表对应的实体类路径(如:cn.hdc.User)">
<id property="实体类中表示主键的名称" column="数据库表主键名称"></id>
<result property="实体类属性" column="数据库表列名"></result>
<result property="实体类属性" column="数据库表列名"></result>
<!-- 一对一的关系映射,配置封装user的内容 -->
<association property="实体类属性(另一张表的对象)"
javaType="另一张表对应的实体类路径">
<!-- 说明封装的实体类对象 -->
<id property="主键对应的实体类属性" column="主键名称"></id>
<result property="实体类属性" column="数据库表列名"/>
<result property="实体类属性" column="数据库表列名"/>
<result property="实体类属性" column="数据库表列名"/>
<result property="实体类属性" column="数据库表列名"/>
<result property="实体类属性" column="数据库表列名"/>
<result property="实体类属性" column="数据库表列名"/>
</association>
</resultMap>
第二种:(嵌套查询方式)
<!-- 定义封装account和user的resultMap -->
<resultMap id="标签的id既名字,可随意" type="查询的主表对应的实体类名称或者实体类路径(如:cn.hdc.User)">
<id property="实体类中表示主键的名称" column="数据库表主键名称"></id>
<result property="实体类属性" column="数据库表列名"></result>
<result property="实体类属性" column="数据库表列名"></result>
<!-- 一对一的关系映射,配置封装user的内容 -->
<association //这个对象来源于下边select查到的结果
property="实体类属性(另一张表的对象)"
//如果第一张表有外键,column="外键列名"。
//如果第一张表没有外键,column="javaType对应表中的主键名"
column="这里是数据库表的某一个列的值,作为下边select的参数"
javaType="另一张表对应的实体类路径"
select="cn.hdc.mapper.findCodeById">
</resultMap>
使用Mybatis的association标签的注意事项:
- association标签是放在resultMap标签体内部的,在select标签的resultMap属性中配置resultMap标签的id名mybatis方可识别。(注意resultMap标签和resultMap属性是不同的,resultMap标签是一个标签体可以配置id属性和type属性,而resultMap属性是放在标签体内部的,需要配置resultMap标签的id属性)
- association标签的javaType属性不能遗漏,不然mybatis将不知道是哪个实体类的属性和实体类表相互对应。