mybaits六:参数处理
单个参数和多个参数
单个参数
mybatis不多做特殊处理,通过 #{参数名},取出参数值
<selectid="getEmployeeById" resultType="emp" >select * from DEPTTEST where deptno = #{deptno}</select>
多个参数
mybatis会做特殊处理,多个参数会被封装成一个map.
1.map中的key没有被命名
map中的key: param1, param2......paramN
map中的value: 传入的参数值
#{}就是从map中获取指定key的值
<selectid="getEmployeeByIdAnd" resultType="emp" >select * from DEPTTEST where deptno = #{param1} and dname=#{param2}</select>
2. map中的key被命名(使用@Param("参数名"))
明确指定封装参数时map的key的
import com.atChina.bean.Employee;public interface EmployeeMapper {public Employee getEmployeeByIdAnd(@Param("depno")Integer depno, @Param("dname")String dname);public Employee getEmployeeById(Integer depno);}
#{指定的key}取出对应值
<selectid="getEmployeeByIdAnd" resultType="emp" >select * from DEPTTEST where deptno = #{depno} and dname=#{dname}</select>
3. 传递pojo
如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo
package com.atChina.dao;import org.apache.ibatis.annotations.Param;import com.atChina.bean.Employee;public interface EmployeeMapper {public Integer updateEmp(Employee employee);
}
#{pojo的属性名}取出参数值
<update id="updateEmp">update DEPTTEST a set dname=#{dname}, loc=#{loc}where deptno = #{deptno}</update>
4.直接传入map
如果多个参数不是业务逻辑的数据模型,如果该方法不经常使用, 为了方便,我们就可以直接传入map
package com.atChina.dao;import java.util.Map;import org.apache.ibatis.annotations.Param;import com.atChina.bean.Employee;public interface EmployeeMapper {public Employee getEmployeeByMap(Map<String, Object> map);
}
sql映射文件
<selectid="getEmployeeByMap" resultType="emp" >select * from DEPTTEST where deptno = #{depno} and dname=#{dname}</select>
测试方法
public SqlSessionFactory getSqlSessionFactory() throws IOException{String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);return sqlSessionFactory;}@Testpublic void test05() throws IOException{SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession sqlSession = sqlSessionFactory.openSession();try{EmployeeMapper em = sqlSession.getMapper(EmployeeMapper.class);Map<String, Object> map = new HashMap<String, Object>();map.put("depno", 10);map.put("dname", "ACCOUNTING");em.getEmployeeByMap(map);}finally{sqlSession.close();}}
5. 传入TO(transfer object)
如果多个参数不是业务逻辑的数据模型,如果该方法经常使用, 为了方便,我们就可以直接传入TO(transfer object)
注意场景:
#{}与${} 区别
都可以获取map中的值或者pojo对象属性的值
#{}:是以预编译的形式,将参数设置到sql语句中。类似于 原生jdbc中的PreparedStatement 防止sql注入.
${}:取出的值直接拼装在sql语句中,会有安全问题。
#{} 更丰富的用法:
规定参数的一些规则: javaType,jdbcType,mode,numericScale,resultMap,typeHandler,jdbcTypeName,expression
在Oracle中有些字段不是必填时在用户使用的时候会出现数据null的情况。这个时候在Oracle中是无法进行插入的。因为mybatis默认对所有null都映射的是原生的Jdbc的Other类型。
可以通过 jdbcType=NULL
<insert id="addEmploy" parameterType="com.atChina.bean.Employee">insert into DEPTTEST(id, deptno, dname, loc) values(SEQU_DEPTTEST.nextval, #{deptno}, #{dname, jdbcType=NULL}, #{loc})</insert>
或者 在全局配置文件中设置setting
<settings><setting name="jdbcTypeForNull" value="NULL"/></settings>
mybaits六:参数处理相关推荐
- 七参数/六参数坐标转换(小角度)-- 公共点间接平差
C++七参数/六参数坐标转换(小角度)-- 公共点间接平差 三维空间坐标转换,基本数学模型如下: [XBYBZB]=[XAYAZA]+[1000−ZAYAXA010ZA0−XAYA001−YAXA0Z ...
- 轨道六根数(开普勒六参数)
名称 描述 半长轴 椭圆轨道长轴的一半,有时可视作平均轨道半径. 离心率 椭圆轨道两焦点距离与长轴长度的比值,是椭圆轨道扁平程度的一种量度. 轨道倾角 行星轨道面与黄道面的倾角. 升交点赤经 / 黄经 ...
- endpointimpl怎么填参数_这是一篇VLOOKUP函数家族主要用法的合集,XLOOKUP来了!真香!但是,没有office365吃不着怎么办?...
最近这几个月,XLOOKUP震惊了Excel界,传言三头六臂无所不能,一个人把LOOKUP全家兄弟姐妹的活都给抢了.最开始我是不以为意的,但是相关的信息越来越多,我终于忍不住,今天去买了一套offic ...
- 卫星导航定位技术二:由星历参数求解卫星时空位置
卫星星历是描述卫星运动轨道的信息.也可以说卫星星历就是一组对应某一时刻的轨道参数及其变率.有了卫星星历就可以计算出任意时刻的卫星位置及其速度.GPS卫星星历分为预报星历和后处理星历.预报星历又称广播星 ...
- android 摄像头调参,摄像头参数调整方法和装置、电子设备和存储介质与流程
技术特征: 1.一种摄像头参数调整数调整方法,包括: 对参考摄像头采集的第一图像进行检测,获取第一检测结果: 对待调参摄像头采集的第二图像进行检测,获取第二检测结果,其中,所述第一图像与所述第二图像是 ...
- thinkphp5.0学习(六): 获取请求类和URL基本信息
一.系统类(thinkphp\library\think) Config Controller Env Route Url View Request 二.系统方法(thinkphp\helper.ph ...
- 【十六】 H.266/VVC | VVC中帧间预测技术详细总结 | 所有帧间预测技术代码汇总
前言 帧间预测是影响视频编码性能的关键环节之一,H.266/VVC帧间预测在传统只能应对简单的平移运动的基础上,采用了仿射运动模型,可以描述更加复杂的缩放.旋转等运动.为了更好的发挥合并模式(Me ...
- PIE SDK打开静止卫星数据
1. 功能简介 静止卫星是位于地球赤道上空约3.58万km处,与地面始终保持相对静止的卫星,静止卫星的特点是覆盖区域广,具有很强的机动灵活性,能够对特定区域进行分钟级高重复观测,可快速监测灾害目标的动 ...
- java导出excel(easypoi)
介绍 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 ...
最新文章
- python 中遍历表时候,当指定的表的长度超过实际长度时候,实际遍历的长度以表实际长度为准,不会发生越界,如下
- Weex快速上手教程(Weex Tutorial)
- MVP使用中不好的味道
- MongoDB与Mysql常用命令解释
- ndows live id怎么登陆,手机如何注册和使用Windows Live ID帐号
- 忍“乳”负重,身材好的女孩子究竟有多不容易?我从科学的角度算出来了……...
- Github Star过万的阿里学长独家干货分享
- php实现分页mssql,PHP操作mssql数据库类,含分页类[分页类原创]
- TreeView控件 1202
- 《概率论与数理统计》(浙大第四版)第三章总结笔记(纯手写)
- 4G 网络跟 5G 的区别
- Android出现Could not initialize class com.android.sdklib.repository.AndroidSdkHandler的解决方法
- 手机不能打电话没有信号无服务器,手机没信号也能拨打电话?不知道了吧!
- 服务器如何接收GPS定位器发送过来的数据
- 我爱无人机网 FH-0A编程编队无人机怎么样?使用什么语言?
- 解决Xcode Simulator 黑屏问题
- 让IE6/IE7/IE8浏览器支持CSS3属性
- Android获取歌曲详细信息
- java英语单词测试_Java 英语单词自测
- jsp物流信息发布管理平台