MyBatis映射文件(一)
目錄
一.MyBatis映射文件
1.insert、update、delete元素
2.主鍵生成方式
3.參數(Parameters)傳遞
(1)單個參數
(2)多個參數
(3)命名參數
(4)POJO
(5)Map
(6)注意
4.參數(Parameters)處理
(1)#{}和${}的區別
(2)null值的處理
一.MyBatis映射文件
1.insert、update、delete元素
<mapper namespace="com.itheima.dao.EmployeeDao"> <!--插入 --><insert id="addEmp">INSERT INTO tb1_employee(name,email,gender) VALUES (#{name},#{email},#{gender})</insert><!--更新 --><update id="updateEmp">UPDATE tb1_employee set name= #{name},email=#{email},gender=#{gender} WHERE id=#{id}</update><!--刪除 --><delete id="deleteEmp">delete from tb1_employee where id=#{id}</delete> </mapper> public interface EmployeeDao {Employee getEmpById(Integer id); ?void addEmp(Employee employee); ?void deleteEmp(Integer id); ?void updateEmp(Employee employee); }2.主鍵生成方式
-
若數據庫支持自動生成主鍵的字段,則可以設置useGeneratedKeys="true",然后把keyProperty設置到目標屬性上
-
對于不支持自增性主鍵的數據庫(例如Oracle),可以使用selectKey子元素,selectKey元素將會首先運行,id會被設置,然后插入語句會被調用
3.參數(Parameters)傳遞
(1)單個參數
可以接受基本類型,對象類型,集合類型的值
<select id="selectUsers" resultType="User">select id, username, passwordfrom userswhere id = #{id} </select>一個非常簡單的命名參數映射。參數類型被設置為 int,這樣這個參數就可以被設置成任何內容。原生的類型或簡單數據類型(比如整型和字符串)因為沒有相關屬性,它會完全用參數值來替代。
(2)多個參數
任意多個參數,都會被MyBatis重新包裝成一個Map傳入,Map的key是param1,param2...
<select id="selectUsers" resultType="User">select id, username, passwordfrom userswhere id = #{param1}and username = #{param2} </select>?
(3)命名參數
為參數使用@Param起一個名字,MyBatis會將這些參數封裝到map中,key就是@Param的value值
User selectUsers(@Param("id") Integer id, @Param("name") String name); <select id="selectUsers" resultType="User">select id, username, passwordfrom userswhere id = #{id}and username = #{name} </select>(4)POJO
當這些參數屬于我們的業務POJO時,直接傳遞POJO
void addEmp(Employee employee); <insert id="addEmp">INSERT INTO tb1_employee(name,email,gender) VALUES (#{name},#{email},#{gender}) </insert>(5)Map
也可以封裝多個參數為map,直接傳遞,#{map中的key}取出map中對應的值
(6)注意
如果是Collection(List、Set)類型或者是數組,也會特殊處理。也是把傳入的list或者數組封裝在map中。
Collection(collection)
List(list)
數組(array)
public Employee getEmpById(List<Integer> ids); <!--取值:取出第一個id的值 -->#{list[0]}4.參數(Parameters)處理
(1)#{}和${}的區別
-
#{}:是以預編譯的形式,將參數設置到sql語句中,可以防止sql注入
-
${}:取出的值直接拼接在sql語句中,會有安全問題
-
大多情況下,我們取參數的值都應該去使用#{}
-
在原生jdbc不支持占位符的地方我們可以使用${}進行取值
比如分表、排序等
(2)null值的處理
-
參數位置支持的屬性:
javaType、jdbcType、mode、numericScale、
resultMap、typeHandler、jdbcTypeName、expression
-
jdbcType通常需要被設置
在我們數據為null的時候,有些數據庫(Oracle)可能不能識別mybatis對null的默認處理,會報錯。
JdbcType OTHER:無效的類型 。因為mybatis對所有的null都映射的是原生Jdbc的OTHER類型,oracle不能正確處理。
-
解決方法
①參數后面直接指定
#{email,jdbcType=OTHER}②全局配置中Setting配置
<setting><setting name="jdbcTypeForNull" value="NULL"/> </setting>?
總結
以上是生活随笔為你收集整理的MyBatis映射文件(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis入门和全局配置文件介绍
- 下一篇: MyBatis映射文件(二)