中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis?resultMap標簽繼承、復用、嵌套的方法

發布時間:2022-03-10 16:35:28 來源:億速云 閱讀:598 作者:iii 欄目:開發技術

本篇內容主要講解“Mybatis resultMap標簽繼承、復用、嵌套的方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Mybatis resultMap標簽繼承、復用、嵌套的方法”吧!

    resultMap標簽繼承、復用、嵌套

    記錄演示 Mybatis 中 resultMap 標簽繼承、復用(包括跨文件)以及多層嵌套的使用方法,

    • 繼承: 繼承已存在的 resultMap 標簽進行擴展

    • 復用: 跨mapper文件引用現存的 resultMap 標簽

    • 嵌套: 多層嵌套的JavaBean與 resultMap 映射方法

    定義表與實體類

    創建三個表 group member score

    score 與 member 一對一,通過 score.id 關聯

    group 與 member 一對多,通過 group.id 關聯

    create table `score` (
        `id` int comment '主鍵',
        `math` float comment '數學成績',
        `history` float comment '歷史成績',
        primary key (`id`)
    )
    create table `member` (
        `id` int comment '主鍵',
        `name` varchar comment '姓名',
        `group_id` int comment '所屬組group表id',
        `score_id` int comment '成績Score表id',
        primary key (`id`)
    )
    create table `group` (
        `id` int comment '主鍵',
        `name` varchar comment '組名',
        primary key (`id`)
    )
    實體類

    創建三個實體類 Group Member Score

    Score 類的對象是 Member 類的成員變量

    Member 類的對象集合是 Group 類的成員變量

    /** 成績類 */
    public class Score {
        private Integer id;
        /** 數學成績 */
        private Float math;
        /** 歷史成績 */
        private Float hitory;
        ...getter And setter...
    }
    /** 成員類 */
    public class Member {
        private Integer id;
        /** 姓名 */
        private String name;
        /** 分數對象 */
        private Score score;
        ...getter And setter...
    }
    /** 組類 */
    public class Group {
        private Integer id;
        /** 組名 */
        private String groupName;
        /** 成員 */
        private List<Member> members;
        ...getter And setter...
    }
    定義與表映射的 resultMap

    在 BeanMapper.xml 定義最基本的與數據庫表字段映射的 resultMap 標簽

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.BeanMapper">
        <!-- Score實體類映射 -->
        <resultMap id="scoreMap" type="com.example.Score">
            <id column="id" jdbcType="INTEGER" property="id" />
            <result column="math" jdbcType="FLOAT" property="math" />
            <result column="history" jdbcType="FLOAT" property="history" />
        </resultMap>
        <!-- Member實體類映射 -->
        <resultMap id="memberMap" type="com.example.Member">
            <id column="id" jdbcType="INTEGER" property="id" />
            <result column="name" jdbcType="VARCHAR" property="name" />
        </resultMap>
        <!-- Group實體類映射 -->
        <resultMap id="groupMap" type="com.example.Group">
            <id column="id" jdbcType="INTEGER" property="id" />
            <result column="name" jdbcType="VARCHAR" property="groupName" />
        </resultMap>
    </mapper>

    繼承、復用、嵌套

    創建 DemoMapper.xml,演示標簽的繼承、復用、嵌套

    復用現存標簽時若位于相同mapper文件可直接使用 resultMap 的 id 屬性引用,跨文件時需要指定 namespace 屬性才可正常引用

    • extends: 繼承,可繼承其他 resultMap 并加以擴展

    • association: 復用現存的 resultMap,適用于對應的屬性為單JavaBean時,使用 javaType 指定Java類型

    • collection: 復用現存的 resultMap,適用于對應的屬性為JavaBean集合時,使用 ofType 指定Java類型

    • columnPrefix: 只將該屬性指定前綴的屬性賦值給當前 resultMap,存在多層嵌套時每進入一層就會將本層前綴截取掉。

    如下面的mapper文件中,外層的 fullMemberMap 前綴為 member_,經本次篩選 member_score_id -> score_id,

    內層的 scoreMap 前綴為 score_,經本次篩選 score_id -> id,最終被賦值給 Score.id

    所以只有形如 member_score_id 的字段才會最終進入 scoreMap 的取值范圍中

    若是不復用只是單純嵌套,則可以直接將三個類寫在一個 resultMap 標簽內實現

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.DemoMapper">
        <!-- extends: 繼承 -->
        <resultMap id="fullMemberMap" extends="com.example.BeanMapper.memberMap" type="com.example.Member">
            <!-- association: 復用已存在的resultMap,單JavaBean屬性時使用
                            使用javaType屬性指定JavaBean的類型
                            跨文件引用需指定namespace -->
            <!-- columnPrefix: 只從 score_ 開頭的字段為當前resultMap取值 -->
            <association  property="score" resultMap="com.example.BeanMapper.scoreMap" javaType="com.example.Score" columnPrefix="score_" />
        </resultMap>
        
        <resultMap id="fullGroupMap" extends="com.example.BeanMapper.groupMap" type="com.example.Group">
            <!-- collection: 復用已存在的resultMap,JavaBean集合屬性時使用
                            使用ofType屬性指定JavaBean的類型
                            同文件引用無需指定namespace -->
            <!-- columnPrefix: 只從 member_ 開頭的字段為當前resultMap取值
                            進入fullMemberMap內嵌套的scoreMap時前綴 member_ 會被去除,即 member_score_id 字段才能被scoreMap正確接收 -->
            <collection property="members" ofType="com.example.Member" resultMap="fullMemberMap" columnPrefix="member_"/>
        </resultMap>
        <!-- 直接引用最終的resultMap,并根據columnPrefix屬性設置的前綴為各個字段指定不同的別名 -->
        <select id="selectGroupById" parameterType="java.lang.Integer" resultMap="fullGroupMap">
            select g.id, g.name,
                   m.id member_id, m.name member_name,
                   s.id member_score_id, s.math member_score_math, s.history member_score_history
              from `group` g
                left join `member` m on m.group_id = g.id
                left join `score` s on s.id = m.score_id
              where g.id = #{id,jdbcType=INTEGER}
        </select>
    </mapper>

    使用resultmap需要注意的地方

    今天主要還是根據需求在進行sql的編寫 ,在mybatis里面進行復查和復用的時候一定要去看所對應的有沒有這個類 ,今天弄了幾個dto,還有時間戳的轉換,java里面的時間戳是以毫秒來進行計算的。

    到此,相信大家對“Mybatis resultMap標簽繼承、復用、嵌套的方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    德格县| 阳谷县| 昌乐县| 峨眉山市| 龙胜| 南开区| 淳安县| 固安县| 库伦旗| 镇雄县| 婺源县| 临汾市| 班玛县| 瑞金市| 台湾省| 京山县| 大连市| 咸丰县| 玛多县| 乌拉特前旗| 开阳县| 额尔古纳市| 信阳市| 西充县| 华亭县| 东乌珠穆沁旗| 南江县| 合水县| 安塞县| 浑源县| 石河子市| 永吉县| 汶上县| 金乡县| 桑植县| 京山县| 襄汾县| 察隅县| 庐江县| 天津市| 孝昌县|