日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis_映射文件配置

發(fā)布時間:2024/10/12 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis_映射文件配置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

獲取自增主鍵的值

若數(shù)據(jù)庫支持自動生成主鍵的字段(比如 MySQL 和 SQL Server),則可以設(shè)置 useGeneratedKeys=”true”,然后再把 keyProperty 設(shè)置到目標(biāo)屬性上。

<insert id="addEmp" useGeneratedKeys="true" keyProperty="id">insert into tbl_employee (last_name,email,gender)VALUES (#{lastName},#{email},#{gender})</insert>

sql語句執(zhí)行完成后,Mybatis會把插入生成的主鍵封裝到該bean對象中。

      //測試添加Employee employee = new Employee("tom@nchu.com", "0", null, "tom");mapper.addEmp(employee);System.out.print(employee.getId());

參數(shù)處理

①.單個參數(shù):mybatis不會做特殊處理,#{參數(shù)名/任意名}:取出參數(shù)值。

②.多個參數(shù):mybatis會做特殊處理。多個參數(shù)會被封裝成 一個map

key:param1...paramN,或者參數(shù)的索引也可以 value:傳入的參數(shù)值

#{}就是從map中獲取指定的key的值;

操作:

方法:public Employee getEmpByIdAndLastName(Integer id,String lastName);
取值:#{id},#{lastName}

異常:

org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [1, 0, param1, param2]

正確的取值方式:

<select id="getEmpByIdAndLastName" resultType="com.nuch.edu.domain.Employee">SELECT * FROM tbl_employeeWHERE id=#{param1} and last_name=#{param2}</select>

③.【命名參數(shù)】:明確指定封裝參數(shù)時map的key

import org.apache.ibatis.annotations.Param; public Employee getEmpByIdAndLastName(@Param("id")Integer id,@Param("lastName")String lastName);

多個參數(shù)會被封裝成 一個map

key:使用@Param注解指定的值 value:參數(shù)值

#{指定的key}取出對應(yīng)的參數(shù)值

<select id="getEmpByIdAndLastName" resultType="com.nuch.edu.domain.Employee">SELECT * FROM tbl_employeeWHERE id=#{id} and last_name=#{lastName} </select>

④.POJO:如果多個參數(shù)正好是我們業(yè)務(wù)邏輯的數(shù)據(jù)模型,我們就可以直接傳入pojo;#{屬性名}:取出傳入的pojo的屬性值

⑤.Map:如果多個參數(shù)不是業(yè)務(wù)模型中的數(shù)據(jù),沒有對應(yīng)的pojo,不經(jīng)常使用,為了方便,我們也可以傳入map;#{key}:取出map中對應(yīng)的值

public Employee getEmpByMap(Map<String,Object> map); <select id="getEmpByMap" resultType="com.nuch.edu.domain.Employee">SELECT * FROM tbl_employeeWHERE id=#{id} and last_name=#{lastName} </select> Map<String,Object> map = new HashMap<>();map.put("id",3);map.put("lastName","jerry");Employee jerry = mapper.getEmpByMap(map);

⑥.TO:如果多個參數(shù)不是業(yè)務(wù)模型中的數(shù)據(jù),但是經(jīng)常要使用,推薦來編寫一個TO(Transfer Object)數(shù)據(jù)傳輸對象

Page{ int index; int size; }

#{}和${}

?#{key}:獲取參數(shù)的值,預(yù)編譯到SQL中。安全。

?${key}:獲取參數(shù)的值,拼接到SQL中。有SQL注入問 題。原生jdbc不支持占位符的地方我們就可以使用${}進(jìn)行取值。

有時我們只是想直接在 SQL 語句中插入一個不改變的字符串

ORDER BY ${columnName}

#{}更豐富的用法:

規(guī)定參數(shù)的一些規(guī)則:

javaType、 jdbcType、 mode(存儲過程)、 numericScale、 resultMap、 typeHandler、 jdbcTypeName;

jdbcType通常需要在某種特定的條件下被設(shè)置:在我們數(shù)據(jù)為null的時候,有些數(shù)據(jù)庫可能不能識別mybatis對null的默認(rèn)處理。比如Oracle(報錯);因?yàn)閙ybatis對所有的null都映射的是原生Jdbc的OTHER類型,oracle不能正確處理。
全局配置中默認(rèn):jdbcTypeForNull=OTHER;

1、#{email,jdbcType=NULL}; 2、jdbcTypeForNull=NULL <setting name="jdbcTypeForNull" value="NULL"/>

轉(zhuǎn)載于:https://www.cnblogs.com/realshijing/p/8057547.html

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Mybatis_映射文件配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。