10、mybatis参数处理
文章目录
- 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参数处理相关推荐
- java回顾:MyBatis参数、sql片段、动态sql、高级查询
目录 一.MyBatis参数 SqlSessiong工具类 1.映射文件配置-入参 1.1 parameterType入参 1.2 单个入参,变量名任意定义: 1.3 多个入参,解决方案: 1.4 p ...
- MyBatis -- 参数占位符 #{} 和 ${}
MyBatis -- 参数占位符 #{} 和 ${} 一.准备工作 二.参数占位符 #{} 和 ${} 三.特殊场景 3.1 特殊场景 1 -- String 3.1.1 使用 #{} 3.1.2 使 ...
- FAIR发布两大更新:PyTorch1.8和一个10亿参数自监督模型,自监督也学GPT-3套路?
2021-03-05 19:38:58 作者 | 青暮 今天,FAIR发布了两项重要更新,分别是PyTorch 1.8以及10亿参数自监督模型SEER. 根据官方推特,此次更新重点包括:编译器更新.代 ...
- AI大牛周明打造的轻量“孟子模型”开源!靠10亿参数冲上CLUE榜第三,可用于新闻分类、文案生成...
明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 只用10亿参数就杀进中文自然语言理解CLUE榜单前三的孟子模型,现在开源了! 其打造团队澜舟科技-创新工场最新宣布,基于孟子通用模型,他们将 ...
- java基础篇(10) 可变参数列表介绍
一.可变参数简介 在不确定参数的个数时,可以使用可变的参数列表. 1. 语法: 参数类型-(三个点) 例如: void printArray(Object-) 注意: 每个方法最多只有一个可变参数,因 ...
- 让预训练语言模型读懂数字:超对称技术发布 10 亿参数 BigBang Transformer [乾元]金融大规模预训练语言模型
导读:超对称技术公司发布10亿参数金融预训练语言模型BigBang Transformer[乾元].BBT大模型基于时序-文本跨模态架构,融合训练文本和时序两种模态数据,下游任务准确率较T5同级别模型 ...
- 让预训练语言模型读懂数字:超对称技术联合复旦知识工场等发布10亿参数BigBang Transformer[乾元]金融大规模预训练语言模型
目录 1.通用大模型的缺陷 2.专注于融合训练时序-文本跨模态的预训练模型算法架构 3.学术和工业界覆盖最完整,规模最大的金融投资类数据集 4.创新的预训练方法可大幅提高语言模型准确度:Similar ...
- nphp 连接mysql_E-RI-TEB-N-NP-05HP 10放大器参数调节
[详细说明] E-RI-TEB-N-NP-05HP 10放大器参数调节 维修伺服阀,比例伺服阀有:Parker比例阀维修 ATOS比例阀维修 Rexroth比例阀维修 Moog伺服阀 伺服阀放大器维 ...
- Mybatis参数问题解释
mybatis参数问题 int insert(Girl girl); /*int返回的是被影响的数据行*/ 单个基本数据类型 如果仅仅是简单的一个单值传入,那么#{}表达式里面可以随便 写,只有一 ...
最新文章
- crontab 总结
- Installing Oracle Database 18c Using RPM Packages
- 2018新秀杯a城轨司机调度_城市轨道交通行车调度问题与优化方式研究
- CTO下午茶: 没有安全,一切创新都是套路
- Linux入门基础分享[一]
- 应用程序利用ADO对象访问数据库
- Ajax_Apache访问资源文件的权限配置、资源存放路径配置、配置虚拟主机、动态网站静态网站区别...
- Tomcat绑定jre
- [转载]jquery ajax/post/get 传参数给 mvc的action
- DNF私服搭建的利弊关系
- 软件开发生命周期及文档
- 【机器学习】支持向量机原理与序列最小最优化算法SMO
- Codeforces Round #554 (Div. 2) 1152B. Neko Performs Cat Furrier Transform
- 计算机工程与应用退休被拒,如果您退休了,还能坚持独立做科学研究,那么和大家分享一下您的经验吧...
- 只会Java 基础好找工作吗?
- 官网webp转换工具cwebp简介
- c++重写卷积网络的前向计算过程,完美复现theano的测试结果
- 计算机定时开机关机设置,电脑定时开关机,小编教你怎么设置电脑定时开关机...
- 平面直角坐标系中的旋转公式_定比分点公式及定理
- linux 服务器 输出,Linux中通过script命令那个记录屏幕的输出
热门文章
- python函数使用易错点_Python易错例题
- numpy归一化_使用numpy 高效实现K-Means聚类
- python类与继承person类_关于python中类的继承及self
- VS2017 报错该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- html中怎样引入外部字体文件路径,CSS引入外部字体
- mysql命令导入存储过程报错_mysql导入存储过程时declare报错的有关问题解决
- python utf8_肿么在Python里使用UTF-8编码
- Linux磁盘格式化和挂载
- python 类方法装饰器_python类装饰器即__call__方法
- jca oracle官方文档,Oracle 官方文档说明