乐趣区

关于java:resultMap的使用

resultType 能够把查问的后果封装在 pojo 中,但 pojo 类的属性名和查问到的数据库表的字段名统一。

如果 sql 查问到的字段与 pojo 的属性名不统一,则须要应用 resultMap 将字段名和属性名对应起来,进行手动配置封装,将后果映射到 pojo 中

<!-- resultMap 最终还是要将后果映射到 pojo 上,type 就是指定映射到哪一个 pojo -->
    <!-- id:设置 ResultMap 的 id -->
    <resultMap type="order" id="orderResultMap">
        <!-- 定义主键 , 十分重要。如果是多个字段, 则定义多个 id -->
        <!-- property:主键在 pojo 中的属性名 -->
        <!-- column:主键在数据库中的列名 -->
        <id property="id" column="id" />

        <!-- 定义一般属性 -->
        <result property="userId" column="user_id" />
        <result property="number" column="number" />
        <result property="createtime" column="createtime" />
        <result property="note" column="note" />
    </resultMap>

resultMap 中 association 一对一的关系
一对一数据模型:订单用户
一个订单信息只会是一个人下的订单,所以从查问订单信息登程关联查问用户信息为一对一查问。如果从用户信息登程查问用户下的订单信息则为一对多查问,因为一个用户能够下多个订单。

革新 pojo 类
在订单类(order)中增加 User 属性,User 属性是一个援用类型,用于存储关联查问的用户信息,因为关联关系是一对一,所以只须要增加单个属性即可


<resultMap type="order" id="orderUserResultMap">
    <id property="id" column="id" />
    <result property="userId" column="user_id" />
    <result property="number" column="number" />
    <result property="createtime" column="createtime" />
    <result property="note" column="note" />

    <!-- association:配置一对一属性 -->
    <!-- property:order 外面的 User 属性名 -->
        <!-- javaType: 属性类型 -->
    <association property="user" javaType="user">
        <!-- id: 申明主键,示意 user_id 是关联查问对象的惟一标识 -->
        <id property="id" column="user_id" />
        <result property="username" column="username" />
        <result property="address" column="address" />
    </association>

</resultMap>

<!-- 一对一关联,查问订单,订单外部蕴含用户属性 -->
<select id="queryOrderUserResultMap" resultMap="orderUserResultMap">
    SELECT  o.id, o.user_id, o.number, o.createtime,o.note,
    u.username,u.address
    FROM
    `order` o LEFT JOIN `user` u 
    ON o.user_id = u.id
</select>

resultMap 中 collection 一对多和多对多关系
批改 pojo 类,在 pojo 类增加订单汇合属性
一个用户对应这多个订单

<resultMap type="user" id="userOrderResultMap">
    <id property="id" column="id" />
    <result property="username" column="username" />
    <result property="birthday" column="birthday" />
    <result property="sex" column="sex" />
    <result property="address" column="address" />

    <!-- 配置一对多的关系
        property:填写 pojo 类中汇合类类属性的名称
        javaType:填写汇合类型的名称 
    -->
    <collection property="orders" javaType="list" ofType="order">
        <!-- 配置主键,是关联 Order 的惟一标识 -->
        <id property="id" column="oid" />
        <result property="number" column="number" />
        <result property="createtime" column="createtime" />
        <result property="note" column="note" />
    </collection>
</resultMap>

<!-- 一对多关联,查问订单同时查问该用户下的订单 -->
<select id="queryUserOrder" resultMap="userOrderResultMap">
    SELECT u.id, u.username,u.birthday,u.sex,u.address,
    o.id oid, o.number, o.createtime,o.note
    FROM `user` u LEFT JOIN `order` o 
    ON u.id = o.user_id
</select>
退出移动版