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