MyBatis(五) insert、update、delete 、主鍵回填、返回matched行數和affected行數、引數配置#{},${}
insert元素
<insert id="insertStudent" parameterType="student">
insert into student_info (stu_age,stu_sex,stu_name) values
(#{stuAge},#{stuSex},#{stuName})
</insert>
屬性和select元素的基本一樣,比較特殊是下面屬性
useGeneratedKeys | 使用JDBC的getGeneratedKeys取出資料庫內部生成的主鍵,要使 用必須給keyProperty或者keyColumn賦值 | true/false,預設是false |
keyProperty | 表示pojo的那個屬性的作為主鍵 | 如果是聯合主鍵逗號隔開。 |
keyColumn | 指明第幾列是主鍵,不能和keyProperty同時使用,只接受整型引數(1,2,3等等) | 如果是聯合主鍵的是逗號隔開 如1,2 |
加上 useGeneratedKey = "true" , keyProperty = "javaBean的主鍵欄位",在insert 物件後,直接呼叫物件的主鍵欄位的
get方法獲取主鍵
<insert id="insertStudent" parameterType="student" keyProperty="stuId"
useGeneratedKeys="true"
>
insert into student_info (stu_age,stu_sex,stu_name) values
(#{stuAge},#{stuSex},#{stuName})
</insert>
其他規則主鍵生成(比如說序列生成)
藉助seletkey元素:
keyProperty表示主鍵欄位,resultType是返回的主鍵型別
order 屬性可選 (before,after) 預設是before,表示insert前或者insert後獲取key
之後也是通過呼叫物件的get主鍵方法獲取主鍵值。
<selectKey keyProperty="stuId" resultType="int" order="BEFORE">
select if(max(stu_id) is null,1,max(stu_id)+2) from student_info
</selectKey>
如果是序列只要將上面的sql片段替換 select 序列.nextval from dual
完整使用
<insert id="insertStudent" parameterType="student"
>
<selectKey keyProperty="stuId" resultType="int" order="BEFORE">
select if(max(stu_id) is null,1,max(stu_id)+2) from student_info
</selectKey>
insert into student_info (stu_age,stu_sex,stu_name) values
(#{stuAge},#{stuSex},#{stuName})
</insert>
update 和delete元素
Mybatis執行完update和delete也會返回影響的行數。存在返回行數的值有問題的,檢查defaultExecutorType的引數設定,可以進行設為simple,simple就是預設值。
<update id="updateStudentInfo" parameterType="student">
update student_info
set stu_name = #{stuName} where stu_id = #{stuId}
</update>
<delete id="deleteStudentbyId" parameterType="int">
delete from student_info where stu_id = #{id}
</delete>
獲取matched行數
預設情況下,返回的就是matched 行數。也就是查詢條件匹配的行數。
defaultExecutorType有三個執行器SIMPLE、REUSE和BATCH。其中BATCH可以批量更新操作快取SQL以提高效能,但是有個缺陷就是無法獲取update、delete返回的行數。defaultExecutorType的預設執行器是SIMPLE。
int count = mapper.insertStudent(stu);
如果有SQL片段,update student_info set sex = '1' where id =1; 資料庫裡面執行會影響一條記錄
當mybatis第一次執行的時候返回的1
當mybatis第二次執行的時候返回的也是1,其實我們想要獲取的是更改的記錄數。也就是Affected rows.
如何獲取Affected rows
因為mybatis返回的預設是匹配的行數,而不是受影響的行數,如何設定返回的是受影響的行數,
加上useAffectedRows引數為true
jdbc:mysql://${jdbc.host}/${jdbc.db}?useAffectedRows=true
Mybatis的入參配置
入參的時候可以指定下面這些引數。
javaType是可選的,如果不指定,會自動檢測.
#{age,jdbcType=TINYINT,javaType=Integer,typeHandler=...}
#{}: 入參,mybatis會做預編譯處理,比較安全,適合傳入的形參,sql語句具體需要的引數值
${} : mybatis不會做預編譯處理,不安全,適合傳入SQL語句本省的內容。
<sql id="studentColumns">
${prefix}.stu_id,${prefix}.stu_Age,${prefix}.stu_Sex,${prefix}.stu_Name
</sql>
<include refid="studentColumns">
<property name="prefix" value="m"/>
</include>
參考部落格:https://www.jianshu.com/p/daccc3ad6867
相關文章
- java-Mybatis XML 對映器(select,insert, update 和 delete)JavaMyBatisXMLdelete
- 利用insert,update和delete注入獲取資料delete
- MyBatis中主鍵回填的兩種實現方式MyBatis
- Mybatis(五)--原始碼分析傳入單個list引數和多個list引數寫法MyBatis原始碼
- SQLite語句(二):INSERT DELETE UPDATE SELECTSQLitedelete
- ORACLE RAC叢集大範圍delete大表與insert&update同時執行導致活動會話數飆升Oracledelete會話
- PostgreSQL並行查詢相關配置引數SQL並行
- 引數配置
- mybatis如何傳引數MyBatis
- MyBatis 引數處理MyBatis
- Mybatis的引數-parameterTypeMyBatis
- Mybatis引數傳遞MyBatis
- sql server 帶有OUTPUT的INSERT,DELETE,UPDATESQLServerdelete
- DBeaver如何生成select,update,delete,insert語句delete
- python疑問5:位置引數,預設引數,可變引數,關鍵字引數,命名關鍵字引數區別Python
- 常用的jvm配置引數 :永久區引數配置JVM
- weblogic執行緒池引數調優配置方法Web執行緒
- 五分鐘學習 Java 8 行為引數化Java
- scala:函式作為值或引數進行傳遞、作為返回值進行返回函式
- Sqlserver update\delete用inner join關聯,會update\delete關鍵字後面的表關聯到的行SQLServerdelete
- c++函式引數和返回值C++函式
- mysql 在delete、insert、update 時,page的變化MySqldelete
- KunlunDB功能之insert/update/delete...returning語句delete
- java 執行緒池的初始化引數解釋和引數設定Java執行緒
- JavaWeb引數配置JavaWeb
- 12.MyBatis學習--對映檔案_引數處理_單個引數&多個引數&命名引數MyBatis
- 尋找寫程式碼感覺(七)之封裝請求引數和返回引數封裝
- Bash變數和引數變數
- python變數和引數Python變數
- nginx 常見引數以及重定向引數配置Nginx
- Python函式/動態引數/關鍵字引數Python函式
- mybatis 的傳入引數如何既有物件又有單個引數MyBatis物件
- mybatis 批量新增insert、更新update詳解MyBatis
- 輕量ORM-SqlRepoEx (四)INSERT、UPDATE、DELETE 語句ORMSQLdelete
- mybatis 傳入多個引數MyBatis
- Mybatis引數處理總結MyBatis
- mybatis二級快取引數MyBatis快取
- mybatis引數型別錯誤MyBatis型別