Mybatis_映射文件配置
获取自增主键的值
若数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置到目标属性上。
<insert id="addEmp" useGeneratedKeys="true" keyProperty="id">insert into tbl_employee (last_name,email,gender)VALUES (#{lastName},#{email},#{gender})</insert>
sql语句执行完成后,Mybatis会把插入生成的主键封装到该bean对象中。
//测试添加Employee employee = new Employee("tom@nchu.com", "0", null, "tom");mapper.addEmp(employee);System.out.print(employee.getId());
参数处理
①.单个参数:mybatis不会做特殊处理,#{参数名/任意名}:取出参数值。
②.多个参数:mybatis会做特殊处理。多个参数会被封装成 一个map
key:param1...paramN,或者参数的索引也可以 value:传入的参数值
#{}就是从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>
③.【命名参数】:明确指定封装参数时map的key
import org.apache.ibatis.annotations.Param;
public Employee getEmpByIdAndLastName(@Param("id")Integer id,@Param("lastName")String lastName);
多个参数会被封装成 一个map
key:使用@Param注解指定的值 value:参数值
#{指定的key}取出对应的参数值
<select id="getEmpByIdAndLastName" resultType="com.nuch.edu.domain.Employee">SELECT * FROM tbl_employeeWHERE id=#{id} and last_name=#{lastName} </select>
④.POJO:如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo;#{属性名}:取出传入的pojo的属性值
⑤.Map:如果多个参数不是业务模型中的数据,没有对应的pojo,不经常使用,为了方便,我们也可以传入map;#{key}:取出map中对应的值
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:如果多个参数不是业务模型中的数据,但是经常要使用,推荐来编写一个TO(Transfer Object)数据传输对象
Page{ int index; int size; }
#{}和${}
#{key}:获取参数的值,预编译到SQL中。安全。
${key}:获取参数的值,拼接到SQL中。有SQL注入问 题。原生jdbc不支持占位符的地方我们就可以使用${}进行取值。
有时我们只是想直接在 SQL 语句中插入一个不改变的字符串
ORDER BY ${columnName}
#{}更丰富的用法:
规定参数的一些规则:
javaType、 jdbcType、 mode(存储过程)、 numericScale、 resultMap、 typeHandler、 jdbcTypeName;
jdbcType通常需要在某种特定的条件下被设置:在我们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理。比如Oracle(报错);因为mybatis对所有的null都映射的是原生Jdbc的OTHER类型,oracle不能正确处理。
全局配置中默认:jdbcTypeForNull=OTHER;
1、#{email,jdbcType=NULL}; 2、jdbcTypeForNull=NULL <setting name="jdbcTypeForNull" value="NULL"/>
转载于:https://www.cnblogs.com/realshijing/p/8057547.html
Mybatis_映射文件配置相关推荐
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap good
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
- 深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete
2019独角兽企业重金招聘Python工程师标准>>> 上篇文章<深入浅出Mybatis系列(六)---objectFactory.plugins.mappers简介与配置&g ...
- MyBatis3 xml映射文件配置
MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好.与具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码. MyBatis3官方文档 http://www. ...
- ngnix 映射路径配置_MyBatis Config(三)映射文件mappers标签
上篇文章我们介绍了标签,这篇文章主要讲标签 在配置文件中,元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件,具体如下所示. 1.使用类路径引入2.使用本地文件路径引入3 ...
- MyBatis 源码分析 - 映射文件解析过程
1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...
- mybatis多种方式注册映射文件
<!-- 注册映射文件 --><!-- 将映射文件配置到mybatis的配置文件中 --><mappers><!-- 1.文件在配置文件中-->< ...
- SSM_Mybatis_Day01(快速入门、映射文件概述、核心配置文件概述、相应API、代理开发方式、映射文件深入、数据类型的映射、列名和属性名不一致的时候的处理)
SSM_Mybatis_Day01(快速入门.映射文件概述.核心配置文件概述.相应API.代理开发方式.映射文件深入.数据类型的映射.列名和属性名不一致的时候的处理) 1. Mybatis mybat ...
- mysql如何配置hbm.xml_配置数据库映射文件hbm.xml
在数据库映射方面,guzz支持类似hibernate的领域对象class-table映射.也支持ibatis类似的在guzz.xml中映射. hibernate的hbm.xml映射 guzz兼容hib ...
最新文章
- 浅浅认识之VBS脚本访问接口与COMODO拦截COM接口
- EASYPHP安装完Apache工作正常后,配置MYSQL的问题
- android数据库三个方法有哪些,一个三年Android开发的总结 - 常见数据库问题总结...
- 信息树和XML文件的遍历及XML文件的应用
- dtrace-stap-book
- mysql不兼容_mysql5.7 不兼容问题
- Web API-随机性案例步骤
- 4.21-4.26旅行记之山城重庆(二)
- 第一次作业:对于Linux2.6.0源码中进程模型的分析
- 2019.02.19 bzoj2655: calc(生成函数+拉格朗日插值)
- GTASA圣安地列斯 DirectX 2.0 ENB 下窗口化运行的解决办法
- java 进度条插件_java进度条控件如何使用?
- html中怎么设置一个籍贯选择,行政区、籍贯选择标签
- flex水平排列左对齐
- 九章算术 九:《勾股》
- 2014.10.10 ——Jim Foley第二场讲座User Interface Design——An Overview
- ag-grid 学习笔记一:使用ag-grid显示简单数据
- ansible 高级自动化变量及变量过滤器
- 3D视觉摄像机标定(张氏标定法)
- 基于交易模块创建多个 EA 交易