最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis?實現(xiàn)多對多中間表插入數(shù)據(jù)

 更新時間:2022年02月28日 09:29:11   作者:黃國攀  
這篇文章主要介紹了MyBatis?實現(xiàn)多對多中間表插入數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

多對多中間表插入數(shù)據(jù)

在做這個員工管理系統(tǒng)demo的時候,由于user和role是多對多關(guān)系,且user主鍵是自增的,所有我們沒辦法提前知曉這個user_id,所以插入的時候,就需要先插入user,然后再找到剛插入的id拿出來,再插入中間表user_role,這樣才能將表關(guān)系對應起來,才能算一個完整的插入的過程。

所以現(xiàn)在的問題就是怎么知道這個user_id,再怎么拿出來,再插入中間表user_role。

方法

在MyBatis中要用到insert和update元素下的3個屬性:

  • useGeneratedKeys (僅對 insert 和 update 有用)這會令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數(shù)據(jù)庫內(nèi)部生成的主鍵(比如:像 MySQL 和 SQL Server 這樣的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的自動遞增字段),默認值:false。
  • keyProperty (僅對 insert 和 update 有用)唯一標記一個屬性,MyBatis 會通過 getGeneratedKeys 的返回值或者通過 insert 語句的 selectKey 子元素設(shè)置它的鍵值,默認:unset。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。
  • keyColumn (僅對 insert 和 update 有用)通過生成的鍵值設(shè)置表中的列名,這個設(shè)置僅在某些數(shù)據(jù)庫(像 PostgreSQL)是必須的,當主鍵列不是表中的第一列的時候需要設(shè)置。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。

具體實現(xiàn)

1.插入user表,可以看到我們并沒有插入user_id這個屬性,因為是自增的。

<insert id="insert" useGeneratedKeys="true" keyProperty="user_id" keyColumn="user_id">
        insert into user
        (user_name,user_gender,user_email,user_phone,user_address,user_birthday,department_id)
        values(#{user_name},#{user_gender},#{user_email},#{user_phone},#{user_address},#{user_birthday},#{department_id})
    </insert>

2.重點是中間表user_role ,可以看到,我們直接就使用user下面的user_id了,我們也沒有做查詢操作,所以我們并不知曉它的具體值。

<insert id="insertUserRole">
        insert into user_role values(#{user.user_id},#{role.role_id})
    </insert>

3.test類,為了方便大家更好的理解,我們可以做一次測試。

通過下面代碼可以看到:我們在插入user后,就能夠把user_id打印出來,再插入到中間表中,并沒做其他諸如查詢的操作。

Date date = new Date();
        User user = new User("mike33", "male", "axxxx@163.com", "183xxxxxxxx", "chengdu", date, 1);
        Role role = new Role();
        role.setRole_id(4);
        //插入user
        service.insert(user);
        //打印user_id
        System.out.println("user_id----->>>>" + user.getUser_id());
        //插入中間表
        service.insertUserRole(user, role);

結(jié)果:可以看到我們直接插入后,就能取得user_id了,然后再插入中間表,這就解決了這個問題。

當然由于插入一個新的user,必須同時滿足user和role的映射,所以這里使用Spring transaction來保證這個插入過程的完整性。

使用注解方式實現(xiàn)。

@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED)
    public void insertUserRole(User user, Role role) {
        this.insert(user);
        mapper.insertUserRole(user, role);
    }

多對多的關(guān)聯(lián)表中,如何同時插入數(shù)據(jù)的學習心得

今天在寫學校的實訓項目時,遇到如下問題,一個實體類與另一個實體類是多對多的關(guān)系,且有個實體類中所存儲的是另一個實體類的集合,所以在進行插入操作是,要同時向兩張表中插入數(shù)據(jù),現(xiàn)在已經(jīng)得到解決辦法。

Student類:

?? ?public class Student implements Serializable {
?? ? ? ?private Integer id;
?? ? ? ?private String name;
?? ? ? ?private Integer age;
?? ? ? ?private String bir;
?? ? ? ?private String phone;
?? ? ? ?private String qq;
?? ? ? ?private String attr;
?? ? ? ?private String starts;
?? ? ? ?private String mark;
?? ? ? ?private Integer cityId;
?? ? ? ?private Integer clazzId;
?? ? ? ?private Integer groupId;
?? ? ? ?private String cityName;
?? ? ? ?private String clazzName;
?? ? ? ?private String groupName;
?? ? ? ?private List<Tag> tagList;
?? ?}

Tag表: 

public class Tag implements Serializable {
? ? private Integer id;
? ? private String name;
? ? private String type;
? ? private Date createtime;
}

有如下需求,在插入學生時,學生會有很多的標簽(tag),在頁面?zhèn)骰財?shù)據(jù)是,用了一個tagList集合來接收,現(xiàn)在要將學生的信息插入到學生表中,然后將學生的標簽放在另一張關(guān)聯(lián)表中。

插入步驟

步驟一:

先插入學生信息:

<insert id="save" useGeneratedKeys="true" keyProperty="id" keyColumn="id" >
    insert into t_student(name, age, bir, phone, qq, attr, starts, mark, cityid, clazzid, groupid) values(#{name}, #{age}, #{bir},#{phone},#{qq},#{attr},#{starts},#{mark},#{cityId},#{clazzId},#{groupId})
</insert>
// useGeneratedKeys 是否以jdbc的方式將插入后的自增主鍵又返回個實體類
// keyProperty 實體類中對應的主鍵屬性名
// keyCloumn 數(shù)據(jù)庫中對應的主鍵屬性名

2.插入關(guān)聯(lián)表數(shù)據(jù)

<insert id="saveStudentTag" parameterType="com.lbw.ems.entity.Student">
        insert into t_student_tag(studentid, tagid) values
        <foreach collection="tagList" item="tag" separator=",">
            (#{id}, #{tag.id})
        </foreach>
    </insert>
// 因為此時我們需要當前的學生的Id,所以我們的參數(shù)類型還是一個Student類,在插入是,我們需要的是Student類中tagList集合中所有的id
所以使用了foreach標簽
// foreach標簽 遍歷array、list、map(我只用過list)
// collection 填你想要遍歷的集合在實體類中對應的屬性名
// item 將每次遍歷出來的對象取一個名字,不然不好取值,尤其是在兩個實體類的字段名相同的時候,真的難頂
// sparator="," 每遍歷一次后,在后面加上你所填的符

結(jié)果測試

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解JSON與?Java對象之間的轉(zhuǎn)化

    詳解JSON與?Java對象之間的轉(zhuǎn)化

    在現(xiàn)在的日常開發(fā)中,不管前端還是后端,JSON?格式的數(shù)據(jù)是用得比較多的,甚至可以說無處不在。所以本文主要來講講JSON?格式的數(shù)據(jù)與?Java?對象之間的轉(zhuǎn)化吧
    2023-03-03
  • 淺談序列化之protobuf與avro對比(Java)

    淺談序列化之protobuf與avro對比(Java)

    下面小編就為大家?guī)硪黄獪\談序列化之protobuf與avro對比(Java)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • SpringBoot2 整合MinIO中間件實現(xiàn)文件便捷管理功能

    SpringBoot2 整合MinIO中間件實現(xiàn)文件便捷管理功能

    這篇文章主要介紹了SpringBoot2 整合MinIO中間件,實現(xiàn)文件便捷管理,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • JAVA Frame 窗體背景圖片,首位相接滾動代碼實例

    JAVA Frame 窗體背景圖片,首位相接滾動代碼實例

    這篇文章主要介紹了JAVA Frame 窗體背景圖片,首位相接滾動代碼示例,需要的朋友可以參考下復制代碼
    2017-04-04
  • 淺談Mybatis二級緩存的缺陷

    淺談Mybatis二級緩存的缺陷

    本文主要介紹了淺談Mybatis二級緩存的缺陷,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • SpringBoot集成阿里巴巴Druid監(jiān)控的示例代碼

    SpringBoot集成阿里巴巴Druid監(jiān)控的示例代碼

    這篇文章主要介紹了SpringBoot集成阿里巴巴Druid監(jiān)控的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 使用CI/CD工具Github Action發(fā)布jar到Maven中央倉庫的詳細介紹

    使用CI/CD工具Github Action發(fā)布jar到Maven中央倉庫的詳細介紹

    今天通過對Github Action的簡單使用來介紹了CI/CD的作用,這個技術(shù)體系是項目集成交付的趨勢,也是面試中的一個亮點技能。 而且這種方式可以實現(xiàn)“一次配置,隨時隨地集成部署”,感興趣的朋友一起看看吧
    2021-07-07
  • Java枚舉與.net枚舉區(qū)別詳解

    Java枚舉與.net枚舉區(qū)別詳解

    這篇文章主要介紹了Java枚舉與.net枚舉區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 背包問題-動態(tài)規(guī)劃java實現(xiàn)的分析與代碼

    背包問題-動態(tài)規(guī)劃java實現(xiàn)的分析與代碼

    這篇文章主要給大家介紹了關(guān)于背包問題動態(tài)規(guī)劃java實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java經(jīng)典面試題匯總:Java Web

    Java經(jīng)典面試題匯總:Java Web

    本篇總結(jié)的是Java Web相關(guān)的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07

最新評論

黄骅市| 汾西县| 嘉定区| 云龙县| 河东区| 吉木乃县| 阜城县| 娱乐| 金平| 洞口县| 青海省| 永胜县| 兴文县| 盐亭县| 海林市| 武川县| 册亨县| 天长市| 安顺市| 星座| 阳春市| 镇安县| 平阳县| 葵青区| 罗城| 博野县| 平顺县| 莱阳市| 洛川县| 延川县| 子洲县| 沅陵县| 钟祥市| 灵宝市| 马鞍山市| 安龙县| 新郑市| 合阳县| 文昌市| 武宣县| 大竹县|