Mybatis_映射文件配置
獲取自增主鍵的值
若數(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
#{}就是從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;
轉(zhuǎn)載于:https://www.cnblogs.com/realshijing/p/8057547.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Mybatis_映射文件配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 朝鲜战争期间,中国志愿军的十大国产武器
- 下一篇: Numpy.random中shuffle