国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mybatis實(shí)戰(zhàn):四、insert 用法(普通插入、返回主鍵自增的值)

這篇具有很好參考價(jià)值的文章主要介紹了mybatis實(shí)戰(zhàn):四、insert 用法(普通插入、返回主鍵自增的值)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、簡(jiǎn)單的 insert 方法

1.UserMapper.xml

      <insert id="insert" useGeneratedKeys="true" keyProperty="id" >
      insert into sys_user(user_name,user_password,user_email,user_info,head_img,create_time)
        values ( #{userName} , #{userPassword} , #{userEmail},
        #{userInfo} , #{headImg, jdbcType=BLOB },
        #{createTime, jdbcType= TIMESTAMP})
    </insert>

1.指定特殊數(shù)據(jù)類型

(1)為了防止類型錯(cuò)誤,對(duì)于 些特殊的數(shù)據(jù)類型,建議指定具體的 jdbcType
headimg 指定 BLOB 類型, createTime 指定 TIME STAMP 類型
(2)BLOB 對(duì)應(yīng)的類型是 ByteArrayinputStream ,就是二進(jìn)制數(shù)據(jù)流
由于數(shù)據(jù)庫(kù)區(qū)分 date、time、datetime 類型,但是 Java 中一般都使用 jave.util.Date
類型 因此為了保證數(shù)據(jù)類型的正確,需要手動(dòng)指定日期類型, date、time datetime
應(yīng)的 JDBC 類型分別為 DATE、TIME、TIMESTAMP

2.<insert >元素,這個(gè)標(biāo)簽包含如下屬性

id :命名空間中的唯 標(biāo)識(shí)符,可用來(lái)代表這條語(yǔ)句
parameterType :即將傳入的語(yǔ)句參數(shù)的完全限定類名或別名 這個(gè)屬性是可選的,因?yàn)?MyBatis 可以推斷出傳入語(yǔ)句的具體參數(shù),因此不建議配置該屬性
flushCache :默認(rèn)值為 true ,任何時(shí)候只要語(yǔ)句被調(diào)用,都會(huì)清空一級(jí)緩存和二級(jí)緩存
timeout :設(shè)置在拋出異常之前,驅(qū)動(dòng)程序等待數(shù)據(jù)庫(kù)返回請(qǐng)求結(jié)果的秒數(shù)
statementType :對(duì)于 STATEMENT PREPARED ALLABLE, MyBatis 會(huì)分別使用對(duì)應(yīng)的 Statement PreparedStatement Callable tatement ,默認(rèn) 值為PREPARED
useGeneratedKeys :默認(rèn)值為false ,如果設(shè)置為true, MyBatis 使用 JDBC getGeneratedKeys 方法來(lái)取出由數(shù)據(jù)庫(kù)內(nèi)部生成的主鍵
keyProperty: MyBatis 通過(guò) getGeneratedKeys 獲取 鍵值后將要賦值的屬性名
如果希望得到多個(gè)數(shù)據(jù)庫(kù)自動(dòng)生成的列,屬性值也可以是以逗號(hào)分隔的屬性名稱列
keyColumn :僅對(duì)時(shí)INSERT和 UPDATE 有用 通過(guò)生成的鍵值設(shè)置 中的列名, 這個(gè)
設(shè)置僅在某些數(shù)據(jù)庫(kù)(如 PostgreSQL )中是必須的, 當(dāng)主鍵列不是 中的第 列時(shí)
要設(shè)置。如果希望得到多個(gè)生成的列,也可以是逗號(hào)分隔的屬性名稱列表
database Id :如果配置了 databaseidProvider會(huì)加載所有的不帶 databaseId 的或匹配當(dāng)前 databaseId 的語(yǔ)句 如果同時(shí)存在帶databaseId 和不帶 databaseid 的語(yǔ)句,后者會(huì)被忽略.

?2.UserMapperTest

  @Test
    public void testinsert() {
        SqlSession sqlSession = getSqlSession();
        try {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            SysUser user = new SysUser();
            user.setUserName("test1");
            user.setUserPassword("123456");
            user.setUserEmail("test@mybatis.tk");
            user.setUserInfo("test_info");
            user.setHeadImg(new byte[]{1, 2, 3});
            user.setCreateTime(new Date());

            //只插入一條數(shù)據(jù)
            int result=userMapper.insert(user);
            Assert.assertEquals(1, result);
            //id null ,沒(méi)有給 id 賦佳,并且沒(méi)有配置回寫 id 的值
            Assert.assertNotNull(user.getId());
            System.out.println(user.getId());
        } finally {
            sqlSession.rollback();
//          sqlSession.commit();
            sqlSession.close();
        }
    }

?1.只插入一條數(shù)據(jù)

Assert.assertEquals(1, result);

2.回滾(不寫入數(shù)據(jù)庫(kù))

            sqlSession.rollback();
//修改數(shù)據(jù)庫(kù) sqlSession.commit();

3.插入后判斷是否為空(為空/不為空,拋異常)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-733459.html

Assert.assertNotNull(user.getId());
Assert.assertNull(user.getId());

3.UserMapper

int insert(SysUser user);

二、返回主鍵自增的值

方法一:使用 JDBC 方式返回主鍵自增的值

<insert id="insert" useGeneratedKeys="true" keyProperty="id" >
useGeneratedKeys 設(shè)置為 true 后, MyBatis 會(huì)使用 JDBC getGeneratedKeys方
 法來(lái)取出 由數(shù)據(jù)庫(kù)內(nèi)部生成的主鍵。獲得主鍵值后將其賦值給 keyProperty 配置的 id 屬性。
 當(dāng)需要設(shè)置多個(gè)屬性時(shí),使用逗號(hào)隔開,這種情況下通常還需要設(shè)置 keyCo lumn 屬性 按順
 序指定數(shù)據(jù)庫(kù)的列,這里列的值會(huì)和 keyProperty 配置的屬性一一對(duì)應(yīng)。由于要使用數(shù)據(jù)庫(kù)
 返回的主鍵值,所以 上下兩部分的列中去掉了 id 列和對(duì)應(yīng)的#{ id }屬性。

?方法二:使用 selectKey 返回主鍵的值

<selectKey resultType="Long" order="AFTER" keyProperty="id">
            SELECT LAST_INSERT_ID()
        </selectKey>
1.selectKey 標(biāo)簽 keyColumn keyProperty 和上面 useGeneratedKeys 的用法含義相同 ,這 resultType 用于設(shè)置返回值類型 ,order 屬性的設(shè)置和使用的數(shù)據(jù)庫(kù)有關(guān) MySQL 數(shù)據(jù)庫(kù)中, order 屬性設(shè)置的值是 AFTER,因?yàn)楫?dāng)前記錄的主鍵值在 insert 語(yǔ)句 ,執(zhí)行成功后才能獲取 而在 Oracle 數(shù)據(jù)庫(kù)中, order 的值要設(shè)置為 BEFORE ,這是因?yàn)?Oracl 中需要先從序列獲取值,然后將值作為主鍵插入到數(shù)據(jù)庫(kù)中.
2.可以發(fā)現(xiàn), selectKey 元素放置的位置和之前 MySQL 例子中的不同,其實(shí)這個(gè)元素放置的位置不會(huì)影響 selectKey 中的方法在 insert 前面或者后面執(zhí)行的順序,影響執(zhí)行順序 order 屬性,這么寫僅僅是為了符合實(shí)際的執(zhí)行順序,看起來(lái)更直觀而已
selectKey 元素中的內(nèi)容。它內(nèi)容就是一個(gè)獨(dú)立的 SQL 語(yǔ)句,
在 Oracle 示例中, SELECT SEQ_ ID.nextval from dual是一個(gè)獲取序列的 SQL 語(yǔ)句。 MySQL 中的 SQL 語(yǔ)句 SELECT LAST_ INSERT_ ID ()用于獲取
數(shù)據(jù)庫(kù)中最后插入的數(shù)據(jù)的 ID 以下是其他 些支持主鍵自增的數(shù)據(jù)庫(kù)配置 electKey中回寫主鍵的 SQL
··DB2 使用 VALUES IDENTITY_VAL_LOCAL ()
? MYSQL 使用 SELECT LAST_INSERT_ID ()
? SQLSERVER 使用 SELECT SCOPE_IDENTITY ()。
? CLOUDSCAPE 使用 VALUES IDENTITY_VAL_LOCAL ()
? DERBY 使用 VALUES IDENTITY_VAL_LOCAL ()
? HSQLDB 使用 CALL IDENTITY()
SYBASE 使用 SELECT @@IDENTITY
? DB2 MF 使用 SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMYl
? FORMIX 使用 select dbinfo ('sqlea.sqlerrdl') from systables where
tabid=l

到了這里,關(guān)于mybatis實(shí)戰(zhàn):四、insert 用法(普通插入、返回主鍵自增的值)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【SpringBoot】Mybatis執(zhí)行insert/update后如何獲得主鍵id

    在業(yè)務(wù)開發(fā)的時(shí)候,由于MyBatis框架的insert語(yǔ)句默認(rèn)是不返回記錄的主鍵值,而是返回插入的記錄條數(shù)的,但是如果業(yè)務(wù)層需要得到插入數(shù)據(jù)的主鍵時(shí)候,可以通過(guò)配置的方式來(lái)實(shí)現(xiàn)獲取插入數(shù)據(jù)的ID功能。 方法1、開啟useGeneratedKeys屬性方法 方法2、使用selectKey和 order=\\\"AFTER\\\"方式

    2024年02月11日
    瀏覽(23)
  • Mybatis使用insert插入后獲取id值

    在mapper中定義insert方法: 屬性 useGeneratedKeys:設(shè)置為true,否則無(wú)法獲取到主鍵id。 keyProperty:實(shí)體類對(duì)象的主鍵id屬性名稱。 keyColumn:數(shù)據(jù)庫(kù)中主鍵id字段名稱。 調(diào)用orderMapper.insertOrder(record)執(zhí)行插入語(yǔ)句,返回值是一個(gè)int類型,如果成功返回的是1,失敗返回的是exception。 插

    2024年02月16日
    瀏覽(23)
  • Mybatis 批量新增 只返回第一主鍵ID 其他返回null

    出現(xiàn) 問(wèn)題 是加 on duplicate key update 受了影響, 去掉 on duplicate key update代碼 ON DUPLICATE key update是根據(jù)索引字段是否重復(fù)來(lái)判斷是否執(zhí)行,如果重復(fù)則執(zhí)行update,否則則執(zhí)行insert。 優(yōu)先級(jí)主鍵唯一索引 當(dāng)主鍵重復(fù)時(shí)則執(zhí)行update 當(dāng)主鍵不重復(fù),唯一索引重復(fù)時(shí)也執(zhí)行update 當(dāng)主鍵

    2024年02月16日
    瀏覽(23)
  • Mybatis的<insert>,<update>,<delete>標(biāo)簽用法

    之前對(duì)mybatis的select標(biāo)簽以及其他相關(guān)標(biāo)簽做了講解,很多標(biāo)簽也是可以拿到增刪改的標(biāo)簽中來(lái)用的,下面先說(shuō)下insert標(biāo)簽的用法: insert 標(biāo)簽顧名思義就是插入語(yǔ)句,用于將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中,一般插入標(biāo)簽沒(méi)有返回值,傳入一個(gè)實(shí)體對(duì)象的數(shù)據(jù),一般不對(duì)插入的數(shù)據(jù)做判斷

    2024年02月07日
    瀏覽(30)
  • mysql表主鍵自增過(guò)大問(wèn)題

    mysql表主鍵自增過(guò)大問(wèn)題

    問(wèn)題及項(xiàng)目環(huán)境 ? 問(wèn)題 最近在做項(xiàng)目時(shí),發(fā)現(xiàn)我創(chuàng)建的每一個(gè)表的主鍵設(shè)置自增,在插入數(shù)據(jù)數(shù)據(jù)時(shí)會(huì)出現(xiàn) 自增值過(guò)大的問(wèn)題。 問(wèn)題展示: 在后端執(zhí)行Basemapper中的insert()方法時(shí),數(shù)據(jù)庫(kù)中的主鍵id字段為下: 且我在對(duì)應(yīng)的實(shí)體類的設(shè)置為下: ?我們的期望時(shí)看到Id = 1,而不是

    2024年02月16日
    瀏覽(16)
  • spring boot集成mybatis-plus——Mybatis Plus 新增數(shù)據(jù)并返回主鍵 ID(圖文講解)

    spring boot集成mybatis-plus——Mybatis Plus 新增數(shù)據(jù)并返回主鍵 ID(圖文講解)

    ?更新時(shí)間 2023-01-10 15:37:37 大家好,我是小哈。 本小節(jié)中,我們將學(xué)習(xí)如何通過(guò) Mybatis Plus 框架給數(shù)據(jù)庫(kù)表新增數(shù)據(jù),主要內(nèi)容思維導(dǎo)圖如下: Mybatis Plus 新增數(shù)據(jù)思維導(dǎo)圖 為了演示新增數(shù)據(jù),在前面小節(jié)中,我們已經(jīng)定義好了一個(gè)用于測(cè)試的用戶表, 執(zhí)行腳本如下: 定義一

    2024年02月02日
    瀏覽(40)
  • 通過(guò)DBeaver 給Postgre SQL表 設(shè)置主鍵自增

    通過(guò)DBeaver 給Postgre SQL表 設(shè)置主鍵自增

    1.創(chuàng)建表 CREATE TABLE public.company ( id int4 NOT NULL , name?text NOT NULL, age int4 NOT NULL, address bpchar(50) NULL, salary float4 NULL, join_date date NULL, CONSTRAINT company_pkey PRIMARY KEY (id) ); 2.插入數(shù)據(jù)(不傳入id) INSERT INTO public.company (name, age, address, salary, join_date) VALUES(\\\'Kobe\\\', 20, \\\'Lake\\\', 10000, \\\'1996-07-13\\\'); ?

    2024年02月12日
    瀏覽(20)
  • mysql高并發(fā)下主鍵自增打來(lái)的問(wèn)題

    在一般情況下,在新增領(lǐng)域?qū)ο蠛螅夹枰@取對(duì)應(yīng)的主鍵值。使用應(yīng)用層來(lái)維護(hù)主鍵,在一定程度上有利于程序性能的優(yōu)化和應(yīng)用移植性的提高。在采用數(shù)據(jù)庫(kù)自增主鍵的方案里,如果JDBC驅(qū)動(dòng)不能綁定新增記錄對(duì)應(yīng)的主鍵,就需要手工執(zhí)行查詢語(yǔ)句以獲取對(duì)應(yīng)的主鍵值,對(duì)

    2024年02月13日
    瀏覽(16)
  • Hibernate適配DM數(shù)據(jù)庫(kù)主鍵自增配置

    Hibernate適配DM數(shù)據(jù)庫(kù)主鍵自增配置

    hibernate有多種生成主鍵策略,例如assigned、increment、hilo、seqhilo、sequence、identity、native、uuid、guid等方法,其中native由hibernate根據(jù)使用的數(shù)據(jù)庫(kù)自行判斷采用identity、hilo、sequence其中一種作為主鍵生成方式,靈活性很強(qiáng)。如果能支持identity則使用identity,如果支持sequence則使用

    2023年04月24日
    瀏覽(22)
  • MySQL數(shù)據(jù)庫(kù)——MySQL AUTO_INCREMENT:主鍵自增長(zhǎng)

    在 MySQL 中,當(dāng)主鍵定義為自增長(zhǎng)后,這個(gè)主鍵的值就不再需要用戶輸入數(shù)據(jù)了,而由數(shù)據(jù)庫(kù)系統(tǒng)根據(jù)定義自動(dòng)賦值。每增加一條記錄,主鍵會(huì)自動(dòng)以相同的步長(zhǎng)進(jìn)行增長(zhǎng)。 通過(guò)給字段添加? AUTO_INCREMENT ?屬性來(lái)實(shí)現(xiàn)主鍵自增長(zhǎng)。語(yǔ)法格式如下: 默認(rèn)情況下,AUTO_INCREMENT 的初

    2024年02月11日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包