mybatis的一些用法
1.XXXMapper.xml中:
namespace標識mapper介面的完整路徑。
resultMap標籤表示手動對映資料庫欄位和實體類屬性,resultMap中的id唯一標識該resultMap,type表示實體類的完整路徑。
insert標籤:id表示介面中的方法名,parameterType表示sql語句中的引數型別,對應實體類的完整路徑。
foreach標籤:collection表示介面方法傳入的引數,如果使用了@param去重新表示引數名,那就用註解後的名字。
if標籤:它中的test屬性的值是判斷,true就執行它的條件語句。
order by預設增序排列。
Group by的select的欄位要滿足出現在聚合函式中或者group by後。
在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與聚合函式一起使用。
HAVING 子句可以讓我們篩選分組後的各組資料
引數parameterType:代表傳入sql語句中的引數的型別
返回型別用resultType或resultMap表示.
resultType:自動對映。前提:實體類中的屬性名要與資料庫表中的欄位名對應。
resultMap:手動對映-當實體類中的屬性名與資料庫表中的欄位名不一致時使用。
<!-- type:為實體類的類名
id的值要與寫的sql語句中resultMap的值一致(標識這個唯一的resultMap).
colume:資料庫中表的欄位名稱
property:實體類中屬性的名稱
--> <resultMap type="Orders" id="orders"> <result column="user_id" property="userId"/> </resultMap>
2.#{引數}:引數名稱可以任意取
注意以下區別:
#{}: select * from user where id = ?; 佔位符時用#,此時?=='引數'
${}: select * form user where username like '%${引數}%'; 字串拼接時用$
使用 select * from user where username like "%"#{value}"%"防止sql注入
${}中的引數名稱必須是value.
#{}中的引數可以是型別可以是value,如#{item.name,jdbcType = String}
3.<!-- 新增使用者 -->
<insert id="insertUser" parameterType="com.zrxjuly.mybatis.pojo.User">
<!-- 要想返回給操作層主鍵值,則加selectKey.
selectKey表示返回的主鍵,
keyProperty:主鍵的屬性名稱,
resultType:返回的型別,
order:若主鍵型別為Integer型別,自增長,此時order用AFTER;
若主鍵為char/varchar型別,order用BEFORE -->
<selectKey keyProperty="id" resultType="Integer" order="AFTER">
select LAST_INSERT_ID() </selectKey>
insert into user (username,birthday,address,sex) values (#{username},#{birthday},#{address},#{sex})
</insert>
4.Mapper介面開發需要遵循以下規範:
1)、Mapper.xml檔案中的namespace與mapper介面的類路徑相同。
2)、Mapper介面方法名和Mapper.xml中定義的每個statement的id相同
3)、Mapper介面方法的輸入引數型別和mapper.xml中定義的每個sql 的parameterType的型別相同
4)、Mapper介面方法的輸出引數型別和mapper.xml中定義的每個sql的resultType的型別相同
5.標籤:
1).<where>標籤可以去掉where語句後的第一個and。
2).提取公共sql部分,可重用
<!-- 提取出來的sql片段,公共部分, -->
<sql id="selectA">
select * from user
</sql>
<select id="selectUser" parameterType="User" resultType="User">
<include refid="selectA" /><!-- 此處引用了select * from user -->
</select>
6.foreach標籤
如果介面傳過來的引數為Integer[]型別的,則collection="array",此時parameterType屬性去掉 如果介面傳過來的引數為List<Integer>型別的,則collection="list",此時parameterType屬性去掉
collection:maper介面傳遞過來的引數,如果介面引數列表有@param ,那麼collection就是@param註解的引數名。
item:迴圈遍歷的值
open:遍歷開始
close:遍歷結束
separator:分隔符
批量刪除使用者,當傳入的引數型別為List<類名>這樣的集合時,parameterType的值為類名。