获取自增主键的值

若数据库支持自动生成主键的字段(比如 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_映射文件配置相关推荐

  1. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  2. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap good

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  3. 深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete

    2019独角兽企业重金招聘Python工程师标准>>> 上篇文章<深入浅出Mybatis系列(六)---objectFactory.plugins.mappers简介与配置&g ...

  4. MyBatis3 xml映射文件配置

    MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好.与具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码. MyBatis3官方文档 http://www. ...

  5. ngnix 映射路径配置_MyBatis Config(三)映射文件mappers标签

    上篇文章我们介绍了标签,这篇文章主要讲标签 在配置文件中,元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件,具体如下所示. 1.使用类路径引入2.使用本地文件路径引入3 ...

  6. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  7. mybatis多种方式注册映射文件

    <!-- 注册映射文件 --><!-- 将映射文件配置到mybatis的配置文件中 --><mappers><!-- 1.文件在配置文件中-->< ...

  8. SSM_Mybatis_Day01(快速入门、映射文件概述、核心配置文件概述、相应API、代理开发方式、映射文件深入、数据类型的映射、列名和属性名不一致的时候的处理)

    SSM_Mybatis_Day01(快速入门.映射文件概述.核心配置文件概述.相应API.代理开发方式.映射文件深入.数据类型的映射.列名和属性名不一致的时候的处理) 1. Mybatis mybat ...

  9. mysql如何配置hbm.xml_配置数据库映射文件hbm.xml

    在数据库映射方面,guzz支持类似hibernate的领域对象class-table映射.也支持ibatis类似的在guzz.xml中映射. hibernate的hbm.xml映射 guzz兼容hib ...

最新文章

  1. 浅浅认识之VBS脚本访问接口与COMODO拦截COM接口
  2. EASYPHP安装完Apache工作正常后,配置MYSQL的问题
  3. android数据库三个方法有哪些,一个三年Android开发的总结 - 常见数据库问题总结...
  4. 信息树和XML文件的遍历及XML文件的应用
  5. dtrace-stap-book
  6. mysql不兼容_mysql5.7 不兼容问题
  7. Web API-随机性案例步骤
  8. 4.21-4.26旅行记之山城重庆(二)
  9. 第一次作业:对于Linux2.6.0源码中进程模型的分析
  10. 2019.02.19 bzoj2655: calc(生成函数+拉格朗日插值)
  11. GTASA圣安地列斯 DirectX 2.0 ENB 下窗口化运行的解决办法
  12. java 进度条插件_java进度条控件如何使用?
  13. html中怎么设置一个籍贯选择,行政区、籍贯选择标签
  14. flex水平排列左对齐
  15. 九章算术 九:《勾股》
  16. 2014.10.10 ——Jim Foley第二场讲座User Interface Design——An Overview
  17. ag-grid 学习笔记一:使用ag-grid显示简单数据
  18. ansible 高级自动化变量及变量过滤器
  19. 3D视觉摄像机标定(张氏标定法)
  20. 基于交易模块创建多个 EA 交易

热门文章

  1. Django 3.2.5博客开发教程:基础配置
  2. Go变量地址值和指针的关系
  3. win10修改gradle用户目录(缓存目录)
  4. scala reduceLeft和reduceRight执行分析
  5. Hadoop SSH免密登录公钥生成并实现不同主机间的免密登录
  6. redis持久化实现原理
  7. MySQL的timestamp类型存储时间范围为什么是2038年之内
  8. markword用于标记锁的位数
  9. 【软考-软件设计师】CPU的功能与组成
  10. hadoop大数据——mapreduce程序提交运行模式及debug方法