mybatis中resultMap的Colum和property属性

1: resultMap标签

当我们的数据库字段与实体类的属性不一致时,就需要使用该标签进行一一映射。

2:使用情况

2.1 简单查询
 <resultMap id="这个resultMap的id" type="对应实体类的全限定类名">
         <id column="id" property="id"></id>
        <result column="username" property="name"></result>
        <result column="author" property="author"></result>
        <result column="number" property="number"></result>
       .............
       colum对应数据库的字段,property对应实体类的属性
    </resultMap>

他表示对数据按照什么样的规则进行一一映射,如:

  <!-- 根据编号查找书籍-->
    <select id="SelectbooksByNumber" parameterType="String"  resultMap="名字">
        select * from book where number=#{number};
    </select>

上面的查找结果按照你给的resultMap的对应规则进行映射。

2.2 一对一

association 属性用于处理一对一关系(One-to-One)的映射。它允许我们在映射文件中定义一个对象类型的属性,并将其与其他实体类关联起来。需要注意的是你sql语句查出来的列名称是别名,那你就要填别名,就不是你数据库的列名称了。

以下是 association 属性的详细说明:

  • property:指定对象属性的名称,它对应于 JavaBean 中的属性名,用于设置或获取映射结果。
  • column:指定数据库中与对象关联的列名。列如传递到子查询中{sid=id},id必须出现在父查询的结果集中,子查询中要使用sid
  • javaType:指定对象属性的类型。通常,MyBatis会根据返回类型自动推断出对象类型,所以很少需要显式设置该属性。
  • select:指定用于加载对象的 SQL 语句或引用一个已经定义的 <select> 元素。(它会从column 属性指定的列中检索数据,作为参数传递给目标 select 语句)
  • fetchType:指定对象的加载方式。可以设置为 lazy(延迟加载)或 eager(即时加载)。默认为 eager。
    <resultMap id="userMap" type="com.sweet.shiro.entry.User">
        <id column="uid" property="id"/>
        <result column="username" property="username"/>
        <!--角色信息-->

        <!-- 一对一 -->
        <association property="role" javaType="com.sweet.shiro.entry.Role">
            <id column="id" property="id"/>
            <result column="rname" property="name"/>
        </association>

返回结果:User
User中含有单个Role属性 即一对一的关系
JavaType是用来指定pojo中属性的类型

2.3 一对多

collection 属性用于处理一对多关系(One-to-Many)的映射。它允许我们在映射文件中定义一个集合类型的属性,将其与其他实体类关联起来。同样和一对一 一样需要注意列名称。

以下是 collection 属性的详细说明:

  • property:指定集合属性的名称,它对应于 JavaBean 中的属性名,用于设置或获取映射结果。
  • column:指定数据库中与对象关联的列名。列如传递到子查询中{sid=id},id必须出现在父查询的结果集中,子查询中要使用sid
  • javaType:指定集合对象的类型。通常,MyBatis会根据返回类型自动推断出集合类型,所以很少需要显式设置该属性。
  • ofType:指定集合中元素的类型。这是必需的,因为 MyBatis 需要知道如何映射从数据库中获取的数据到具体的对象类型。
  • select:指定用于加载对象的 SQL 语句或引用一个已经定义的 <select> 元素。(它会从column 属性指定的列中检索数据,作为参数传递给目标 select 语句)
  • fetchType:指定集合的加载方式。可以设置为 lazy(延迟加载)或 eager(即时加载)。默认为 eager。
    <resultMap id="userMap" type="com.sweet.shiro.entry.User">
        <id column="uid" property="id"/>
        <result column="username" property="username"/>
        <!--角色信息-->
        <collection property="roles" javaType="list" ofType="com.sweet.shiro.entry.Role">
            <id column="id" property="id"/>
            <result column="rname" property="name"/>
        </collection>
    </resultMap>

    <select id="findRolesByUserName" parameterType="String" resultMap="userMap">
         select u.id uid ,u.username,r.id,r.`name` rname
         from t_user u
         LEFT JOIN t_user_role ur
         on u.id = ur.roleId
         LEFT JOIN t_role r
         on ur.roleId = r.id
         where u.username = #{username}
    </select>

返回结果:User
User中含有Role属性集合 一对多的关系
JavaType是用来指定pojo中属性的类型,
ofType指定的是 映射到list集合属性中pojo的类型
其中Role属性集合为List

pojo

public class User implements Serializable {
    private Integer id;
    private String username;
    private String password;
    private String salt;
    private Integer status; // 用户状态 0: 正常   1:禁用   2:锁定

    //角色集合
    private List<Role> roles;

role表

在这里插入图片描述
user表
在这里插入图片描述
user与role的映射表
在这里插入图片描述

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
MyBatis是一种基于XML文件配置的持久化框架,其resultMap是其的一个非常重要的组件之一。简单来说,就是将查询结果映射成一个Java对象,以便于程序员的使用和维护。下面就来详细了解一下MyBatisresultMap。 1. resultMap的定义 在MyBatisMapper XML文件,可以通过定义resultMap来映射查询结果。具体的定义如下: ``` <resultMap id="resultMapName" type="resultType"> <!-- 这里定义映射关系 --> </resultMap> ``` 其,id为resultMap的名字,type为结果类型,也就是结果对象所在的类的全限定名。这里需要注意,resultType和type只能设置一个。 2. resultMap的映射关系 在resultMap,映射关系定义使用的是result标签,具体定义如下: ``` <result property="propertyName" column="columnName" javaType="javaType" jdbcType="jdbcType" typeHandler="typeHandler" /> ``` 其property为结果对象属性名,column为查询语句的列名,javaType为该属性的Java类型,jdbcType为该属性在数据库的类型,typeHandler为类型转换器。需要注意的是,column、javaType、jdbcType和typeHandler是可选的,如果没有指定,则MyBatis会自动根据属性名和列名进行简单的映射。 3. 关联关系映射 在实际开发,经常会涉及到多张表之间的关联查询,此时需要用到MyBatis的关联映射。具体定义如下: ``` <association property="propertyName" resultMap="resultMapName" /> ``` 其propertyName为当前结果对象用来保存关联对象的属性名,resultMapName为该关联对象所用的resultMap的名字。 4. 集合关联映射 除了单个对象之外,有时候还需要将查询结果映射成一个包含多个对象的集合。此时需要用到MyBatis的集合关联映射。具体定义如下: ``` <collection property="propertyName" resultMap="resultMapName" /> ``` 其propertyName为当前结果对象用来保存集合的属性名,resultMapName为该集合元素所用的resultMap的名字。 5. resultMap的使用 在映射结果时,需要在查询语句使用resultMap,具体定义如下: ``` <select id="selectUser" parameterType="int" resultMap="resultMapName"> select id, username, password from user where id = #{id} </select> ``` 其resultMapName为映射结果所用的resultMap的名字。 综上所述,MyBatisresultMap是一个非常重要的组件,能够实现查询结果的映射和关联关系的处理,大大提高了程序员的开发效率。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值