mybatis <association> 标签的使用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: mybatis <association> 标签的使用

MyBatis是一个流行的Java ORM框架,用于将Java对象映射到关系数据库中。MyBatis提供了许多标签来简化ORM映射,其中之一是标签。允许您通过SQL语句映射Java对象。在使用MyBatis时,标签用于处理关联关系,可以将多个表中的数据映射到单个Java对象中。本文将详细介绍标签的使用方法和用途。

在 MyBatis 中, 是一个非常重要的标签,它用于描述两个实体类之间的一对一关系。通俗地说,如果一个实体类中包含了另外一个实体类的对象,那么就可以使用 标签来建立这种一对一的关系。

一、标签的基本使用方法

标签用于处理两个对象之间的关联关系,它的基本语法如下:

<association property="属性名" javaType="对象类型" resultMap="结果映射">
    <id property="属性名" column="列名"/>
    <result property="属性名" column="列名"/>
    ……
</association>

其中,标签的属性说明如下:
property:表示当前对象的属性名。
javaType:表示当前对象的Java类型。
resultMap:表示当前对象的结果映射。
在标签中,我们可以使用和标签来定义当前对象的属性。其中,标签用于定义当前对象的主键属性,标签用于定义当前对象的非主键属性。这两个标签的属性说明如下:
property:表示当前对象的属性名。
column:表示当前对象属性对应的列名。
下面,我们来看一个具体的例子:

<resultMap id="userMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="user_name"/>
    <result property="password" column="user_password"/>
    <association property="role" javaType="Role" resultMap="roleMap">
        <id property="id" column="role_id"/>
        <result property="roleName" column="role_name"/>
        <result property="roleDesc" column="role_desc"/>
    </association>
</resultMap>

在上面的例子中,我们定义了一个名为userMap的结果映射,它对应的Java类型是User类。在该结果映射中,我们使用了标签来定义User对象和Role对象之间的关联关系。其中,User对象中的属性role对应的是Role对象,它的Java类型是Role类,结果映射是roleMap。

二、标签的高级使用方法
除了上面介绍的基本使用方法外,标签还有一些高级用法,下面我们来逐一讲解。

使用select属性
在标签中,我们可以使用select属性来指定一个SQL语句,用于查询关联对象的信息。这个SQL语句可以使用动态SQL来构建,以便根据需要动态生成查询条件。下面是一个例子:

<resultMap id="userMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="user_name"/>
    <result property="password" column="user_password"/>
    <association property="role" javaType="Role" select="selectRoleById">
        <id property="id" column="role_id"/>
        <result property="roleName" column="role_name"/>
        <result property="roleDesc" column="role_desc"/>
    </association>
</resultMap>
<select id="selectRoleById" resultType="Role">
    select * from role where id = #{
   id}
</select>

在上面的例子中,我们使用了select属性来指定了一个SQL语句selectRoleById,用于查询Role对象的信息。该SQL语句中使用了#{id}占位符,它的值将由Java代码动态生成。

使用fetchType属性
在标签中,我们可以使用fetchType属性来控制关联对象的加载方式。fetchType属性有两个取值,lazy和eager。其中,lazy表示延迟加载,即只有在需要使用关联对象时才会进行加载;eager表示立即加载,即在查询主对象时就会同时加载关联对象。下面是一个例子:

<resultMap id="userMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="user_name"/>
    <result property="password" column="user_password"/>
    <association property="role" javaType="Role" resultMap="roleMap" fetchType="lazy">
        <id property="id" column="role_id"/>
        <result property="roleName" column="role_name"/>
        <result property="roleDesc" column="role_desc"/>
    </association>
</resultMap>

在上面的例子中,我们使用了fetchType属性来指定了关联对象的加载方式为lazy,即延迟加载。

使用notNullColumn属性
在标签中,我们可以使用notNullColumn属性来指定关联对象的非空列。这个属性的作用是在查询关联对象时,只查询指定的非空列,可以提高查询效率。下面是一个例子:

<resultMap id="userMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="user_name"/>
    <result property="password" column="user_password"/>
    <association property="role" javaType="Role" resultMap="roleMap" notNullColumn="role_name, role_desc">
        <id property="id" column="role_id"/>
        <result property="roleName" column="role_name"/>
        <result property="roleDesc" column="role_desc"/>
    </association>
</resultMap>

在上面的例子中,我们使用了notNullColumn属性来指定了关联对象Role的非空列为role_name和role_desc。

使用autoMapping属性
在标签中,我们可以使用autoMapping属性来控制是否自动映射关联对象的属性。autoMapping属性有两个取值,true和false。其中,true表示自动映射,即关联对象的属性会自动映射到主对象中;false表示不自动映射,即需要手动指定关联对象的属性。下面是一个例子:

<resultMap id="userMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="user_name"/>
    <result property="password" column="user_password"/>
    <association property="role" javaType="Role" resultMap="roleMap" autoMapping="false">
        <id property="id" column="role_id"/>
        <result property="roleName" column="role_name"/>
        <result property="roleDesc" column="role_desc"/>
    </association>
</resultMap>

在上面的例子中,我们使用了autoMapping属性来指定了关联对象的自动映射方式为false,即需要手动指定关联对象的属性。

总结

标签是MyBatis中非常重要的一个标签,它用于处理对象之间的关联关系。在使用标签时,我们需要注意一些高级用法,如使用select属性、fetchType属性、notNullColumn属性和autoMapping属性等。只有熟练掌握了这些高级用法,才能更好地使用MyBatis框架,提高开发效率和代码质量。

公众号请关注"果酱桑", 一起学习,一起进步!

目录
相关文章
|
7月前
|
SQL XML Java
Mybatis中选择语句的使用:<choose>标签、分区排序 Row_num() over ()函数的使用呢
Mybatis中选择语句的使用:<choose>标签、分区排序 Row_num() over ()函数的使用呢
55 0
|
3月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
3月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
2月前
|
SQL XML Java
Mybatis的<where>,<if>等标签用法
这篇文章详细解释了Mybatis中<where>和<if>等标签的用法,展示了如何在SQL动态构建中有效地过滤条件和处理逻辑分支。
200 1
|
2月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
43 0
Mybatis入门(select标签)
|
2月前
|
SQL Java 数据库连接
Mybatis的<insert>,<update>,<delete>标签用法
这篇文章详细讲解了Mybatis中<insert>, <update>, <delete>标签的使用方法,并提供了示例代码来展示如何执行数据库的增删改操作。
54 0
|
4月前
|
SQL Java 数据库连接
MyBatis Mapper.XML 标签使用说明
MyBatis Mapper.XML 标签使用说明
38 0
|
6月前
|
存储 Java 数据库连接
mybatis精讲(三)--标签及TypeHandler使用
mybatis精讲(三)--标签及TypeHandler使用
|
7月前
|
SQL Java 关系型数据库
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
115 0
|
7月前
|
SQL Java 关系型数据库
MyBatis中的9种常用动态sql标签精妙用法
MyBatis中的9种常用动态sql标签精妙用法
267 0