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

溫馨提示×

溫馨提示×

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

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

Mybatisplus插入后返回元素id的問題怎么解決

發布時間:2023-03-21 17:52:14 來源:億速云 閱讀:696 作者:iii 欄目:開發技術

這篇文章主要講解了“Mybatisplus插入后返回元素id的問題怎么解決”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Mybatisplus插入后返回元素id的問題怎么解決”吧!

    mybatis-plus插入后返回插入元素的id

    有三種方法,第三種最簡單。

    不想麻煩的直接看第三種

    1.mybatis原生

    mybaits-plus要使用mybatis原生需要一下配置,指定下mapper文件的位置就好

    mybatis-plus:
      mapper-locations: classpath*:mapperxml/*Mapper.xml

    直接先看mapper.xml文件,這個insert語句實際上就是插入MouldMessage這個我定義的實體類。

    <mapper namespace="com.hwz.MessageMouldMapper">
        <insert id="testInsert" useGeneratedKeys="true" keyProperty="id">
            INSERT INTO t_XXXX
            XXXXXX,XXXX,XXXXX
            VALUES XXXX,XXXX,XXXX
        </insert>
    </mapper>

    userGenerateKeys告訴mybatis使用自增主鍵,keyProperty指定這個主鍵名稱叫id。

    然后再mapper接口定義這個方法

    Long testInsert(MessageMould messageMould);

    調用這個插入語句,information這個實例時沒有定義id,創建時間這些字段的,輸出結果是數據表修改條數,這里插入一條,所以返回1。

    System.out.println(messageMouldMapper.testInsert(information)+“----”);

    然后這時候我們輸出下information的一些屬性,發現本來作為參數的information被mybatis自動填充上了id和創建時間

    System.out.println(information.getId()+“*******”+information.getCreateTime());

    所以結論就是,插入之后找傳入的參數,就能找到新增加元素的id

    2.使用mybatis-plus注解

    其實跟原生mybatis一樣,插入后元素的id會直接映射到參數中,只不過用注解代替了mapper.xml文件

    @Insert(value = "INSERT INTO t_XXXX" +
            "XXX,XXX,XXX " +
            "VALUES (XXX,XXX,XXX)")
    @SelectKey(statement="select LAST_INSERT_ID()",keyProperty = "id",before = false,resultType = Long.class)
    Integer testInsert1(MessageMould messageMould);

    執行完這條insert操作后,直接拿形參messageMould的id,就能拿到id

    3.使用mybatis-plus提供的insert

    mybatis只要extends BaseMapper就可以調用他的insert方法。其實也就跟上面2個一樣。i調用insert(MessageMould messageMould)后,id會映射到形參messageMould中,直接拿形參messageMould的id,就能拿到id

    Mybatis-plus設置id自增,插入數據

    沒修改前

    這是我的實體類。

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    public class Company {
      private Integer id;
      private String cid;
      private String cname;
      private String address;
      private String representation;
      private String phone;
      private String email;
      private String weburl;
      private String introductory;
    }

    我的數據庫設置的是id自增。 添加數據時沒有加上id的數據。

    然后報錯

    Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@59238b99]
    Creating a new SqlSession
    SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cc8aa87] was not registered for synchronization because synchronization is not active
    Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cc8aa87]
    2021-11-07 14:28:06.789 ERROR 5620 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.dk.pojo.Company' with value '1457233381002637313' Cause: java.lang.IllegalArgumentException: argument type mismatch] with root cause

    查詢得知,當時實體中,plus主鍵生成方式不設置生成方式時,默認的是自增。而且生成的值就如報錯中的&lsquo;1457233381002637313&rsquo;很長的一個值。

    而主鍵的設置類型有:

    AUTO(0, “數據庫ID自增”),
    INPUT(1, “用戶輸入ID”),
    ID_WORKER(2, “全局唯一ID”),
    UUID(3, “全局唯一ID”),
    NONE(4, “該類型為未設置主鍵類型”),
    ID_WORKER_STR(5, “字符串全局唯一ID”);

    所以修改后

    第一次:

    @TableId( type = IdType.AUTO)
    private Integer id;

    這樣的修改跟修改前一樣。我們需要的是12、13這樣的序列,所以需要設置id生成方式,就需要在注解設置value的值。

    @TableId(value = “id”, type = IdType.AUTO)
    private Integer id;

    這樣指定id的值,我們在用plus插件insert時就不用插入id的值。生成的id值跟數據庫對應。

    感謝各位的閱讀,以上就是“Mybatisplus插入后返回元素id的問題怎么解決”的內容了,經過本文的學習后,相信大家對Mybatisplus插入后返回元素id的問題怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

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

    AI

    江西省| 交口县| 当阳市| 宁武县| 邵阳市| 调兵山市| 获嘉县| 嵊泗县| 运城市| 黑龙江省| 西藏| 河南省| 成安县| 西和县| 崇仁县| 图木舒克市| 乐平市| 千阳县| 大连市| 广丰县| 安多县| 西盟| 巴林右旗| 临沂市| 桃源县| 米易县| 邻水| 金堂县| 湛江市| 汉源县| 仲巴县| 石嘴山市| 安泽县| 曲阳县| 仁怀市| 甘孜县| 泰和县| 嘉荫县| 五家渠市| 靖远县| 韩城市|