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

Java中用Mybatis插入mysql報(bào)主鍵重復(fù)的解決方案

 更新時(shí)間:2023年02月08日 08:54:00   作者:澤米  
這篇文章主要介紹了Java中用Mybatis插入mysql報(bào)主鍵重復(fù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。

Mybatis插入mysql報(bào)主鍵重復(fù)的問(wèn)題

首先思路是這樣的,先去數(shù)據(jù)表里面去找有沒(méi)有這個(gè)主鍵的數(shù)據(jù)(如果有會(huì)有返回值,如果沒(méi)有則返回null),如果有則對(duì)該條數(shù)據(jù)進(jìn)行更新操作,如果沒(méi)有,則對(duì)數(shù)據(jù)表進(jìn)行插入操作。

原來(lái)數(shù)據(jù)表中有這些數(shù)據(jù)。

數(shù)據(jù)表對(duì)應(yīng)的bean的結(jié)構(gòu)如下:

public class DataBean {
    String key;
    String value;
 
    public DataBean() {
 
    }
    public DataBean(String key, String value) {
        this.key = key;
        this.value = value;
    }
 
    public String getKey() {
        return key;
    }
 
    public void setKey(String key) {
        this.key = key;
    }
 
    public String getValue() {
        return value;
    }
 
    public void setValue(String value) {
        this.value = value;
    }
 
    @Override
    public String toString() {
        return "DataBean{" +
                "key='" + key + '\'' +
                ", value='" + value + '\'' +
                '}';
    }
}

下面是我Mapper內(nèi)的內(nèi)容:

    <insert id="InsertDataToTestTable" parameterType="test.bean.DataBean">
        insert into testtable values(#{key},#{value})
    </insert>
 
    <update id="UpdateDataToTestTable" parameterType="test.bean.DataBean">
        UPDATE testtable SET value=#{value} WHERE `key`=#{key}
    </update>
 
    <select id="SelectDataToTestTable" parameterType="int" resultType="test.bean.DataBean">
        SELECT * from testtable where `key`=#{key}
    </select>

首先通過(guò)SqlSession.selectOne去查,看我此次想要插入的bean是否存在于表里面(表的主鍵為key),如果存在,那么select語(yǔ)句會(huì)返回Databean對(duì)象,此時(shí)就可以去對(duì)表中數(shù)據(jù)進(jìn)行相應(yīng)的value更新操作了。

如果不存在的話,那么select語(yǔ)句返回的是null,此時(shí)就可以進(jìn)行相應(yīng)的插入操作,將數(shù)據(jù)插入到表中。

下面是測(cè)試代碼:

    public static void main(String[] args) {
        SqlSession session = SqlSessionFactoryUtil.getSqlSession();
         DataBean dataBean=new DataBean();
         dataBean.setKey("123");
         dataBean.setValue("1111");
 
 
         if(session.selectOne("DataMapper.SelectDataToTestTable",Integer.valueOf(dataBean.getKey()))!=null){
             //查看select語(yǔ)句輸出結(jié)果
             System.out.println(session.selectOne("DataMapper.SelectDataToTestTable",Integer.valueOf(dataBean.getKey())));
             session.update("DataMapper.UpdateDataToTestTable",dataBean);
         }else {
             session.insert("DataMapper.InsertDataToTestTable", dataBean);
         }
            session.commit();
    }

現(xiàn)在我的表里面是有key=123,value=111的記錄,那么我這次執(zhí)行程序會(huì)將其value更新為1111。下面請(qǐng)看輸出結(jié)果以及表中數(shù)據(jù)更改。

select操作在查詢key為123的時(shí)候返回的值。

并且數(shù)據(jù)庫(kù)的記錄已經(jīng)做了對(duì)應(yīng)的更改。

下面我進(jìn)行插入記錄key:123333 value:123123,我們知道表中是沒(méi)有key為123333的記錄的,所以select操作會(huì)返回null,然后執(zhí)行insert操作而不是update操作。

    public static void main(String[] args) {
        SqlSession session = SqlSessionFactoryUtil.getSqlSession();
         DataBean dataBean=new DataBean();
         dataBean.setKey("123333");
         dataBean.setValue("123123");
 
 
 
         if(session.selectOne("DataMapper.SelectDataToTestTable",Integer.valueOf(dataBean.getKey()))!=null){
             //查看select語(yǔ)句輸出結(jié)果
             System.out.println(session.selectOne("DataMapper.SelectDataToTestTable",Integer.valueOf(dataBean.getKey())));
             session.update("DataMapper.UpdateDataToTestTable",dataBean);
         }else {
             session.insert("DataMapper.InsertDataToTestTable", dataBean);
         }
            session.commit();
    }

至此,當(dāng)數(shù)據(jù)庫(kù)插入數(shù)據(jù)的時(shí)候遇到主鍵重復(fù)的錯(cuò)誤問(wèn)題已經(jīng)解決,我這里只是提供一種思路和一些簡(jiǎn)單的實(shí)現(xiàn),希望能對(duì)你們有幫助~

Mybatis返回插入的主鍵

<insert id="insertTask" parameterType="Task" useGeneratedKeys="true" keyProperty="id">

總結(jié)

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

相關(guān)文章

  • junit4教程junit4.5官方下載

    junit4教程junit4.5官方下載

    前提:本文假設(shè)讀者已經(jīng)具有使用JUnit 4以前版本的經(jīng)驗(yàn)。
    2008-09-09
  • SpringBoot集成EasyExcel的應(yīng)用場(chǎng)景分析

    SpringBoot集成EasyExcel的應(yīng)用場(chǎng)景分析

    這篇文章主要介紹了SpringBoot集成EasyExcel的應(yīng)用場(chǎng)景,java領(lǐng)域解析、生成excel比較有名的框架有apache poi、jxl等,今天通過(guò)實(shí)例代碼給大家詳細(xì)介紹,需要的朋友可以參考下
    2021-07-07
  • Java實(shí)現(xiàn)記事本功能

    Java實(shí)現(xiàn)記事本功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)記事本功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • java設(shè)計(jì)模式之模板方法模式詳解

    java設(shè)計(jì)模式之模板方法模式詳解

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之模板方法模式的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁(yè)面

    springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁(yè)面

    這篇文章主要介紹了springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁(yè)面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • SpringSecurity攔截器鏈的使用詳解

    SpringSecurity攔截器鏈的使用詳解

    這篇文章主要介紹了SpringSecurity攔截器鏈的使用詳解,webSecurity的build方法最終調(diào)用的是doBuild方法,doBuild方法調(diào)用的是webSecurity的performBuild方法,webSecurity完成所有過(guò)濾器的插件,最終返回的是過(guò)濾器鏈代理類filterChainProxy,需要的朋友可以參考下
    2023-11-11
  • SpringBoot實(shí)現(xiàn)Excel讀取的實(shí)例教程

    SpringBoot實(shí)現(xiàn)Excel讀取的實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)Excel讀取的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java異常處理深入理解

    Java異常處理深入理解

    這篇文章主要介紹了java項(xiàng)目常用異常處理匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • 舉例說(shuō)明Java中代碼塊的執(zhí)行順序

    舉例說(shuō)明Java中代碼塊的執(zhí)行順序

    這篇文章主要介紹了舉例說(shuō)明Java中代碼塊的執(zhí)行順序,包括靜態(tài)屬性和非靜態(tài)屬性以及構(gòu)造函數(shù)等相關(guān)的執(zhí)行先后,需要的朋友可以參考下
    2015-07-07
  • spring @profile注解的使用方法

    spring @profile注解的使用方法

    本篇文章主要介紹了spring @profile注解的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論

杂多县| 繁峙县| 安泽县| 广宁县| 秦皇岛市| 米脂县| 洞头县| 竹山县| 信宜市| 富顺县| 全州县| 滕州市| 临桂县| 东台市| 孝义市| 景泰县| 二手房| 平定县| 徐水县| 化隆| 黄陵县| 土默特左旗| 新乡县| 滁州市| 景宁| 株洲县| 大城县| 芜湖市| 温宿县| 抚松县| 项城市| 琼结县| 利辛县| 馆陶县| 克山县| 西峡县| 田林县| 穆棱市| 通许县| 海晏县| 龙井市|