Mybatis常見知識點
${}和#{}有什么區別
${}是簡單的字串替換,屬于靜態文本替換,并且并不是在預處理的時候進行替換,實在編譯的時候進行替換,可能會存在sql注入的風險,替換后的值不會自動加上單引號,
{}是占位符,是在預編譯的時候進行替換成?占位符,執行前才會把引數設定進去,相當于jdbc的PreparedStatement,替換后的變數會自動加上單引號,可以防止sql注入,
-- ${}
-- 替換前
select * from t_user where id = ${id}
-- 替換后
select * from t_user where id = 1
-- #{}
-- 替換前
select * from t_user where id = #{id}
-- 替換后
select * from t_user where id = ?
-- 執行時
select * from t_user where id = '1'
Mybatis常見的標簽
Mybatis常見的標簽有
<select>、<insert>、<update>、<delete>、<resultMap>、<sql>、<include>、<if>、<foreach>、<choose>、<when>、<otherwise>、<where>、<set>
Mybatis物體類屬性名稱和資料庫表中欄位名稱不一致,解決方式
- 在sql查詢陳述句中是
as將資料庫欄位名稱定義為物體類屬性名稱,保持兩者一直,as可以省略, - 定義
<resultMap>, sql查詢陳述句設定resultType為對應的<resultMap>,<resultMap>里面寫物體類欄位和資料庫表中欄位的映射關系,
Mybatis中分頁的幾種方式
-
直接傳入分頁引數,在sql中使用limit進行分頁,例如:
select * from t_users limit 0, 10 -
使用Mybatis中的RowBounds進行分頁
RowBounds需要傳入offset和limit,該方式會把資料全部查詢出來,然后進行處理,將offset之前的資料全部跳過,去除offset和limit之間的資料,屬于邏輯分頁,
-
使用Mybatis的分頁插件,例如PageHelper
PageHelper屬于是物理分頁,會在sql后面添加limit,
-
使用Mybatis提供的攔截器,在攔截器中攔截準備執行的sql,之后重新構造sql,
Mybatis獲取自動生成的主鍵
-
資料庫主鍵是自動生成的,可以使用useGeneratedKeys和keyProerty獲取主鍵值
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id"> </insert> -
使用selectKey標簽中的
select LAST_INSERT_ID()獲取主鍵keyProperty:是屬性名
order:BEFORE、AFTER,BEFORE是先獲取主鍵,再執行insert,AFTER是先執行insert,再獲取主鍵,
<insert id="insertUser"> <selectKey keyProperty="id" resultType="String" order="BEFORE"> select REPLACE(UUID(), '-', '') </selectKey> </insert>
關注微信公眾號「平哥技術站」, 每日更新,在手機上閱讀所有教程,隨時隨地都能學習,
原文鏈接:https://monkey.blog.xpyvip.top/archives/mybatis-chang-jian-zhi-shi-dian
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520584.html
標籤:Java
