摘要:概述本章學(xué)習(xí)基本映射相關(guān)知識(shí)點(diǎn)。表示執(zhí)行該語句將清空一級(jí)二級(jí)緩存,默認(rèn)為。賦值主鍵的字段名,即把數(shù)據(jù)庫內(nèi)部生產(chǎn)的主鍵賦值給該字段。
概述
本章學(xué)習(xí)Mysql基本映射--INSERT相關(guān)知識(shí)點(diǎn)。insert的用法比select要簡(jiǎn)單很多。
本系列文章是基于Mybatis 3.4.6 版本,數(shù)據(jù)庫使用的是Mysql 5.7。
INSERT標(biāo)簽insert標(biāo)簽常用屬性:
id:可以理解為Mybatis執(zhí)行語句的名稱,與Mapper接口一一對(duì)應(yīng),此屬性為必須屬性,且在命名空間(mapper標(biāo)簽的namespace)中唯一。
parameterType:該屬性的含義就是其字面意思,即傳入語句的參數(shù)類型,是類的全限定類名,非必須。
flushCache:表示執(zhí)行該語句將清空一級(jí)、二級(jí)緩存,默認(rèn)為true。
timeout:超時(shí)時(shí)間,即程序提交sql語句到數(shù)據(jù)庫等待的時(shí)間,超過此設(shè)置時(shí)間將拋出超時(shí)異常,默認(rèn)設(shè)置是不超時(shí),也就是說程序會(huì)一直等待直到有結(jié)果返回,單位為妙。
useGeneratedKeys:該屬性是獲取數(shù)據(jù)庫內(nèi)部生產(chǎn)的主鍵,默認(rèn)為false。
keyProperty:賦值主鍵的屬性名,即把數(shù)據(jù)庫內(nèi)部生產(chǎn)的主鍵賦值給該屬性。
keyColumn:賦值主鍵的字段名,即把數(shù)據(jù)庫內(nèi)部生產(chǎn)的主鍵賦值給該字段。
不返回主鍵此是插入數(shù)據(jù)最簡(jiǎn)單的用法,在上一章的基礎(chǔ)上,需要編寫mapper配置文件和mapper接口。
mapper配置文件
代碼如下:
INSERT INTO sys_user (user_account, user_password, created_date) VALUES (#{userAccount}, #{userPassword}, #{createdDate})
mapper接口
接口代碼如下:
// 返回值int為插入數(shù)據(jù)的行數(shù) public int insert(SysUser sysUser) throws Exception ;
測(cè)試用例
測(cè)試用戶代碼如下:
@Test public void testInsert(){ // 獲得sqlSession SqlSession sqlSession = getSqlSession(); try{ // 獲取Mapper接口 SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class); SysUser user = new SysUser(); user.setUserAccount("admin"); user.setUserPassword("123"); user.setCreatedDate(new Date()); // 插入的條數(shù) int count = sysUserMapper.insert(user); // 提交事務(wù),數(shù)據(jù)存入數(shù)據(jù)庫 sqlSession.commit(); }catch (Exception e){ e.printStackTrace(); }finally { sqlSession.close(); } }返回自增主鍵
根據(jù)上面對(duì)INSERT標(biāo)簽屬性的學(xué)習(xí)知道,如果要返回?cái)?shù)據(jù)庫自增的主鍵,可通過設(shè)置useGeneratedKeys和keyProperty以及keyCulomn(返回多個(gè)時(shí)需指定字段順序)。
mapper配置文件
代碼如下:
INSERT INTO sys_user (user_account, user_password, created_date) VALUES (#{userAccount}, #{userPassword}, #{createdDate})
mapper接口
接口代碼如下:
// 返回值int仍然為插入影響的行數(shù),數(shù)據(jù)庫內(nèi)部自增id值被封裝到參數(shù)對(duì)象中 public int insertAndResultAutoId(SysUser sysUser) throws Exception;
測(cè)試用例
測(cè)試用戶代碼如下:
@Test public void testInsertAndResultAutoId(){ // 獲得sqlSession SqlSession sqlSession = getSqlSession(); try{ // 獲取Mapper接口 SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class); SysUser user = new SysUser(); user.setUserAccount("admin"); user.setUserPassword("123"); user.setCreatedDate(new Date()); // 插入前,id為空 System.out.println(user.getId()); // 插入的條數(shù) int count = sysUserMapper.insertAndResultAutoId(user); // 插入后,id的值為新插入數(shù)據(jù)的數(shù)據(jù)庫自增id值 System.out.println(user.getId()); // 提交事務(wù),數(shù)據(jù)存入數(shù)據(jù)庫 sqlSession.commit(); }catch (Exception e){ e.printStackTrace(); }finally { sqlSession.close(); } }返回非自增主鍵
對(duì)于一些數(shù)據(jù)庫不支持自增ID,比如Oracle數(shù)據(jù)庫使用的序列,然后賦值給id字段,再執(zhí)行數(shù)據(jù)庫插入操作,此情況的實(shí)現(xiàn)如下:
mapper配置文件
代碼如下:
SELECT LAST_INSERT_ID() INSERT INTO sys_user (user_account, user_password, created_date) VALUES (#{userAccount}, #{userPassword}, #{createdDate})
mapper接口
接口代碼如下:
// 返回值int仍然為插入影響的行數(shù),數(shù)據(jù)庫內(nèi)部自增id值被封裝到參數(shù)對(duì)象中 public int insertAndSelectKey(SysUser sysUser) throws Exception;
測(cè)試用例
測(cè)試用戶代碼如下:
@Test public void testInsertAndSelectKey(){ // 獲得sqlSession SqlSession sqlSession = getSqlSession(); try{ // 獲取Mapper接口 SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class); SysUser user = new SysUser(); user.setUserAccount("admin"); user.setUserPassword("123"); user.setCreatedDate(new Date()); // 插入前,id為空 System.out.println(user.getId()); // 插入影響的條數(shù) int count = sysUserMapper.insertAndSelectKey(user); // 插入后,id的值為新插入數(shù)據(jù)的數(shù)據(jù)庫自增id值 System.out.println(user.getId()); // 提交事務(wù),數(shù)據(jù)存入數(shù)據(jù)庫 sqlSession.commit(); }catch (Exception e){ e.printStackTrace(); }finally { sqlSession.close(); } }批量插入
此部分內(nèi)容將在動(dòng)態(tài)SQL中進(jìn)行學(xué)習(xí)。
總結(jié)本節(jié)學(xué)習(xí)了mybatis的基本的insert的用法,希望對(duì)大家有幫助。
最后創(chuàng)建了qq群方便大家交流,可掃描加入,同時(shí)也可加我qq:276420284,共同學(xué)習(xí)、共同進(jìn)步,謝謝!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71253.html
摘要:將語句硬編碼到代碼中,修改語句需要重新編譯代碼設(shè)想使用配置文件配置。從結(jié)果集中遍歷數(shù)據(jù)的時(shí)候存在硬編碼。表示一個(gè)拼接符號(hào),會(huì)引用注入,所以不建議使用。和表示查詢出一條記錄進(jìn)行映射。 MyBatis是什么 mybatis是托管在github上的ORM框架,讓程序員將主要精力放在SQL上,通過mybatis提供映射方式,自由靈活(SQL的可定制性較高,半自動(dòng)化)生成滿足需求的SQL語句。m...
摘要:執(zhí)行沒有,批處理不支持,將所有都添加到批處理中,等待統(tǒng)一執(zhí)行,它緩存了多個(gè)對(duì)象,每個(gè)對(duì)象都是完畢后,等待逐一執(zhí)行批處理。 Mybatis常見面試題 #{}和${}的區(qū)別是什么? #{}和${}的區(qū)別是什么? 在Mybatis中,有兩種占位符 #{}解析傳遞進(jìn)來的參數(shù)數(shù)據(jù) ${}對(duì)傳遞進(jìn)來的參數(shù)原樣拼接在SQL中 #{}是預(yù)編譯處理,${}是字符串替換。 使用#{}可以有效的防止...
摘要:解決方法使用數(shù)據(jù)庫連接池管理數(shù)據(jù)庫連接。向中設(shè)置參數(shù),對(duì)占位符號(hào)位置和設(shè)置參數(shù)值,硬編碼在代碼中,同樣也不利于系統(tǒng)的維護(hù)。從中遍歷結(jié)果集數(shù)據(jù)時(shí),存在硬編碼,將獲取表的字段進(jìn)行硬編碼,不利于系統(tǒng)維護(hù)。 Mybatis Mybatis 和 SpringMVC 通過訂單商品案例驅(qū)動(dòng) 官方中文地址:http://www.mybatis.org/mybati... 官方托管地址:https://...
摘要:內(nèi)部將通過創(chuàng)建事務(wù)管理應(yīng)用服務(wù)器負(fù)責(zé)管理數(shù)據(jù)庫連接生命周期使用。對(duì)于大型數(shù)據(jù)庫而言這會(huì)導(dǎo)致很差的性能問題。這是指檢索出的對(duì)象不會(huì)被共享并且可以被調(diào)用者安全地修改不會(huì)其他潛在的調(diào)用者或者線程的潛在修改干擾。 第一章 mybatis 簡(jiǎn)介 以下內(nèi)容是自己在看本書時(shí)覺得重要的地方記錄下來,一方面自己做個(gè)筆記也希望對(duì)其他同行有幫助 簡(jiǎn)介 mybatis: 是一個(gè)簡(jiǎn)化和實(shí)現(xiàn)了Java數(shù)據(jù)持久層的...
閱讀 3787·2021-11-24 09:39
閱讀 2988·2021-11-16 11:49
閱讀 2112·2019-08-30 13:54
閱讀 1132·2019-08-30 13:03
閱讀 1118·2019-08-30 11:10
閱讀 749·2019-08-29 17:10
閱讀 1276·2019-08-29 15:04
閱讀 1241·2019-08-29 13:02