Mybatis_映射文件配置
獲取自增主鍵的值
若數(shù)據(jù)庫(kù)支持自動(dòng)生成主鍵的字段(比如 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語(yǔ)句執(zhí)行完成后,Mybatis會(huì)把插入生成的主鍵封裝到該bean對(duì)象中。
//測(cè)試添加Employee employee = new Employee("tom@nchu.com", "0", null, "tom");mapper.addEmp(employee);System.out.print(employee.getId());參數(shù)處理
①.單個(gè)參數(shù):mybatis不會(huì)做特殊處理,#{參數(shù)名/任意名}:取出參數(shù)值。
②.多個(gè)參數(shù):mybatis會(huì)做特殊處理。多個(gè)參數(shù)會(huì)被封裝成 一個(gè)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ù)時(shí)map的key
import org.apache.ibatis.annotations.Param; public Employee getEmpByIdAndLastName(@Param("id")Integer id,@Param("lastName")String lastName);多個(gè)參數(shù)會(huì)被封裝成 一個(gè)map
key:使用@Param注解指定的值 value:參數(shù)值#{指定的key}取出對(duì)應(yīng)的參數(shù)值
<select id="getEmpByIdAndLastName" resultType="com.nuch.edu.domain.Employee">SELECT * FROM tbl_employeeWHERE id=#{id} and last_name=#{lastName} </select>④.POJO:如果多個(gè)參數(shù)正好是我們業(yè)務(wù)邏輯的數(shù)據(jù)模型,我們就可以直接傳入pojo;#{屬性名}:取出傳入的pojo的屬性值
⑤.Map:如果多個(gè)參數(shù)不是業(yè)務(wù)模型中的數(shù)據(jù),沒(méi)有對(duì)應(yīng)的pojo,不經(jīng)常使用,為了方便,我們也可以傳入map;#{key}:取出map中對(duì)應(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:如果多個(gè)參數(shù)不是業(yè)務(wù)模型中的數(shù)據(jù),但是經(jīng)常要使用,推薦來(lái)編寫(xiě)一個(gè)TO(Transfer Object)數(shù)據(jù)傳輸對(duì)象
Page{ int index; int size; }#{}和${}
?#{key}:獲取參數(shù)的值,預(yù)編譯到SQL中。安全。
?${key}:獲取參數(shù)的值,拼接到SQL中。有SQL注入問(wèn) 題。原生jdbc不支持占位符的地方我們就可以使用${}進(jìn)行取值。
有時(shí)我們只是想直接在 SQL 語(yǔ)句中插入一個(gè)不改變的字符串
ORDER BY ${columnName}#{}更豐富的用法:
規(guī)定參數(shù)的一些規(guī)則:
javaType、 jdbcType、 mode(存儲(chǔ)過(guò)程)、 numericScale、 resultMap、 typeHandler、 jdbcTypeName; jdbcType通常需要在某種特定的條件下被設(shè)置:在我們數(shù)據(jù)為null的時(shí)候,有些數(shù)據(jù)庫(kù)可能不能識(shí)別mybatis對(duì)null的默認(rèn)處理。比如Oracle(報(bào)錯(cuò));因?yàn)閙ybatis對(duì)所有的null都映射的是原生Jdbc的OTHER類(lèi)型,oracle不能正確處理。
全局配置中默認(rèn):jdbcTypeForNull=OTHER;
轉(zhuǎn)載于:https://www.cnblogs.com/realshijing/p/8057547.html
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Mybatis_映射文件配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 朝鲜战争期间,中国志愿军的十大国产武器
- 下一篇: Numpy.random中shuffle