文章目录

  • 1、单个参数:mybatis不做任何处理
  • 2、多个参数:mybatis会做特殊处理
  • 3、命名参数:明确指定封装参数时map的key:@Param("id")
    • 3.1 EmployeeMapper接口
    • 3.2 EmployeeMapper.xml
    • 3.3 Test
  • 4、POJO,
  • 5、Map
    • 5.1 EmployeeMapper
    • 5.2 EmployeeMapper.xml
    • 5.3 Test
  • 6、TO
  • 7、jdbcType通常需要在某种特定的条件下被设置

1、单个参数:mybatis不做任何处理

#{参数名}:取出参数

2、多个参数:mybatis会做特殊处理

多个参数会被封装成一个mapkey:param1...paramN,或者参数的索引也可以value:传入的参数
#{}就是从map中获取指定的key的值;

3、命名参数:明确指定封装参数时map的key:@Param(“id”)

多个参数会被封装成一个mapkey:使用@Param注解指定的值value:参数值
#{指定的key}取出对应的参数值

3.1 EmployeeMapper接口

package com.mi.dao;import com.mi.pojo.Employee;
import org.apache.ibatis.annotations.Param;public interface EmployeeMapper {public Employee getEmployeeById(Integer id);public Integer addEmp(Employee employee);public Integer deleteEmp(Integer id);public Integer updateEmp(Employee employee);public Employee getEmployeeByParam(@Param("id") Integer id, @Param("lastName") String lastName);}

3.2 EmployeeMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定为接口的全类名-->
<mapper namespace="com.mi.dao.EmployeeMapper"><!--id 为接口的方法名--><select id="getEmployeeById" resultType="com.mi.pojo.Employee">select * from employee where id = #{id}</select><insert id="addEmp" parameterType="com.mi.pojo.Employee"useGeneratedKeys="true" keyProperty="id">insert into employee (last_name,gender) values (#{lastName},#{gender})</insert><delete id="deleteEmp">delete from employee where id = #{id}</delete><update id="updateEmp" >update employee set last_name = #{lastName},gender = #{gender} where id = #{id}</update><select id="getEmployeeByParam" resultType="com.mi.pojo.Employee">select * from employee where id = #{id} and last_name = #{lastName}</select>
</mapper>

3.3 Test

@Testpublic void testGetParam() throws IOException {//1、获取SqlSessionFactory对象SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();//2、获取Sqlsesion对象SqlSession sqlSession = sqlSessionFactory.openSession();try {//3、获取接口的实现类对象//会为接口自动创建一个代理对象,代理对象去执行增删改查方法EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee employee = mapper.getEmployeeByParam(3,"jerry");System.out.println(employee);}finally {sqlSession.close();}}

4、POJO,

如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo,
#{属性名}:取出传入的pojo的属性值

5、Map

如果多个参数不是业务模型中的数据,没有对应的pojo,为了方便,我们也可以传入map

#{key}:取出map中对应的值

5.1 EmployeeMapper

package com.mi.dao;import com.mi.pojo.Employee;
import org.apache.ibatis.annotations.Param;import java.util.Map;public interface EmployeeMapper {public Employee getEmployeeById(Integer id);public Integer addEmp(Employee employee);public Integer deleteEmp(Integer id);public Integer updateEmp(Employee employee);public Employee getEmployeeByParam(@Param("id") Integer id, @Param("lastName") String lastName);public Employee getEmployeeByMap(Map map);}

5.2 EmployeeMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定为接口的全类名-->
<mapper namespace="com.mi.dao.EmployeeMapper"><!--id 为接口的方法名--><select id="getEmployeeById" resultType="com.mi.pojo.Employee">select * from employee where id = #{id}</select><insert id="addEmp" parameterType="com.mi.pojo.Employee"useGeneratedKeys="true" keyProperty="id">insert into employee (last_name,gender) values (#{lastName},#{gender})</insert><delete id="deleteEmp">delete from employee where id = #{id}</delete><update id="updateEmp" >update employee set last_name = #{lastName},gender = #{gender} where id = #{id}</update><select id="getEmployeeByParam" resultType="com.mi.pojo.Employee">select * from employee where id = #{id} and last_name = #{lastName}</select><select id="getEmployeeByMap" resultType="com.mi.pojo.Employee">select * from employee where id = #{id} and last_name = #{lastName}</select>
</mapper>

5.3 Test

@Testpublic void testGetByMap() throws IOException {//1、获取SqlSessionFactory对象SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();//2、获取Sqlsesion对象SqlSession sqlSession = sqlSessionFactory.openSession();try {//3、获取接口的实现类对象//会为接口自动创建一个代理对象,代理对象去执行增删改查方法EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Map<String,Object> map = new HashMap<String, Object>();map.put("id",3);map.put("lastName","jerry");Employee employee = mapper.getEmployeeByMap(map);System.out.println(employee);}finally {sqlSession.close();}}

6、TO

如果多个参数不是业务模型中的数据,但是经常使用,推荐来编写一个TO(Transfer Object)

page{
int index;
int size;
}

7、jdbcType通常需要在某种特定的条件下被设置

在我们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理,比如Oracle(报错)
jdbcType OTHER 无效的类型:因为mybatis对所有的null都映射的是原生的Jdbc的 OTHER 类型,oracle不能正确处理。

由于全局配置中:jdbcTypeForNull=OTHER;oracle不支持,两种办法
1、#{email,jdbcType=OTHER};
2、jdbcTypeForNULL = NULL

10、mybatis参数处理相关推荐

  1. java回顾:MyBatis参数、sql片段、动态sql、高级查询

    目录 一.MyBatis参数 SqlSessiong工具类 1.映射文件配置-入参 1.1 parameterType入参 1.2 单个入参,变量名任意定义: 1.3 多个入参,解决方案: 1.4 p ...

  2. MyBatis -- 参数占位符 #{} 和 ${}

    MyBatis -- 参数占位符 #{} 和 ${} 一.准备工作 二.参数占位符 #{} 和 ${} 三.特殊场景 3.1 特殊场景 1 -- String 3.1.1 使用 #{} 3.1.2 使 ...

  3. FAIR发布两大更新:PyTorch1.8和一个10亿参数自监督模型,自监督也学GPT-3套路?

    2021-03-05 19:38:58 作者 | 青暮 今天,FAIR发布了两项重要更新,分别是PyTorch 1.8以及10亿参数自监督模型SEER. 根据官方推特,此次更新重点包括:编译器更新.代 ...

  4. AI大牛周明打造的轻量“孟子模型”开源!靠10亿参数冲上CLUE榜第三,可用于新闻分类、文案生成...

    明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 只用10亿参数就杀进中文自然语言理解CLUE榜单前三的孟子模型,现在开源了! 其打造团队澜舟科技-创新工场最新宣布,基于孟子通用模型,他们将 ...

  5. java基础篇(10) 可变参数列表介绍

    一.可变参数简介 在不确定参数的个数时,可以使用可变的参数列表. 1. 语法: 参数类型-(三个点) 例如: void printArray(Object-) 注意: 每个方法最多只有一个可变参数,因 ...

  6. 让预训练语言模型读懂数字:超对称技术发布 10 亿参数 BigBang Transformer [乾元]金融大规模预训练语言模型

    导读:超对称技术公司发布10亿参数金融预训练语言模型BigBang Transformer[乾元].BBT大模型基于时序-文本跨模态架构,融合训练文本和时序两种模态数据,下游任务准确率较T5同级别模型 ...

  7. 让预训练语言模型读懂数字:超对称技术联合复旦知识工场等发布10亿参数BigBang Transformer[乾元]金融大规模预训练语言模型

    目录 1.通用大模型的缺陷 2.专注于融合训练时序-文本跨模态的预训练模型算法架构 3.学术和工业界覆盖最完整,规模最大的金融投资类数据集 4.创新的预训练方法可大幅提高语言模型准确度:Similar ...

  8. nphp 连接mysql_E-RI-TEB-N-NP-05HP 10放大器参数调节

    [详细说明] E-RI-TEB-N-NP-05HP 10放大器参数调节 维修伺服阀,比例伺服阀有:Parker比例阀维修 ATOS比例阀维修  Rexroth比例阀维修 Moog伺服阀 伺服阀放大器维 ...

  9. Mybatis参数问题解释

    mybatis参数问题 int insert(Girl girl); /*int返回的是被影响的数据行*/ 单个基本数据类型 ​ 如果仅仅是简单的一个单值传入,那么#{}表达式里面可以随便 写,只有一 ...

最新文章

  1. crontab 总结
  2. Installing Oracle Database 18c Using RPM Packages
  3. 2018新秀杯a城轨司机调度_城市轨道交通行车调度问题与优化方式研究
  4. CTO下午茶: 没有安全,一切创新都是套路
  5. Linux入门基础分享[一]
  6. 应用程序利用ADO对象访问数据库
  7. Ajax_Apache访问资源文件的权限配置、资源存放路径配置、配置虚拟主机、动态网站静态网站区别...
  8. Tomcat绑定jre
  9. [转载]jquery ajax/post/get 传参数给 mvc的action
  10. DNF私服搭建的利弊关系
  11. 软件开发生命周期及文档
  12. 【机器学习】支持向量机原理与序列最小最优化算法SMO
  13. Codeforces Round #554 (Div. 2) 1152B. Neko Performs Cat Furrier Transform
  14. 计算机工程与应用退休被拒,如果您退休了,还能坚持独立做科学研究,那么和大家分享一下您的经验吧...
  15. 只会Java 基础好找工作吗?
  16. 官网webp转换工具cwebp简介
  17. c++重写卷积网络的前向计算过程,完美复现theano的测试结果
  18. 计算机定时开机关机设置,电脑定时开关机,小编教你怎么设置电脑定时开关机...
  19. 平面直角坐标系中的旋转公式_定比分点公式及定理
  20. linux 服务器 输出,Linux中通过script命令那个记录屏幕的输出

热门文章

  1. python函数使用易错点_Python易错例题
  2. numpy归一化_使用numpy 高效实现K-Means聚类
  3. python类与继承person类_关于python中类的继承及self
  4. VS2017 报错该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
  5. html中怎样引入外部字体文件路径,CSS引入外部字体
  6. mysql命令导入存储过程报错_mysql导入存储过程时declare报错的有关问题解决
  7. python utf8_肿么在Python里使用UTF-8编码
  8. Linux磁盘格式化和挂载
  9. python 类方法装饰器_python类装饰器即__call__方法
  10. jca oracle官方文档,Oracle 官方文档说明