单个参数和多个参数

单个参数

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六:参数处理相关推荐

  1. 七参数/六参数坐标转换(小角度)-- 公共点间接平差

    C++七参数/六参数坐标转换(小角度)-- 公共点间接平差 三维空间坐标转换,基本数学模型如下: [XBYBZB]=[XAYAZA]+[1000−ZAYAXA010ZA0−XAYA001−YAXA0Z ...

  2. 轨道六根数(开普勒六参数)

    名称 描述 半长轴 椭圆轨道长轴的一半,有时可视作平均轨道半径. 离心率 椭圆轨道两焦点距离与长轴长度的比值,是椭圆轨道扁平程度的一种量度. 轨道倾角 行星轨道面与黄道面的倾角. 升交点赤经 / 黄经 ...

  3. endpointimpl怎么填参数_这是一篇VLOOKUP函数家族主要用法的合集,XLOOKUP来了!真香!但是,没有office365吃不着怎么办?...

    最近这几个月,XLOOKUP震惊了Excel界,传言三头六臂无所不能,一个人把LOOKUP全家兄弟姐妹的活都给抢了.最开始我是不以为意的,但是相关的信息越来越多,我终于忍不住,今天去买了一套offic ...

  4. 卫星导航定位技术二:由星历参数求解卫星时空位置

    卫星星历是描述卫星运动轨道的信息.也可以说卫星星历就是一组对应某一时刻的轨道参数及其变率.有了卫星星历就可以计算出任意时刻的卫星位置及其速度.GPS卫星星历分为预报星历和后处理星历.预报星历又称广播星 ...

  5. android 摄像头调参,摄像头参数调整方法和装置、电子设备和存储介质与流程

    技术特征: 1.一种摄像头参数调整数调整方法,包括: 对参考摄像头采集的第一图像进行检测,获取第一检测结果: 对待调参摄像头采集的第二图像进行检测,获取第二检测结果,其中,所述第一图像与所述第二图像是 ...

  6. thinkphp5.0学习(六): 获取请求类和URL基本信息

    一.系统类(thinkphp\library\think) Config Controller Env Route Url View Request 二.系统方法(thinkphp\helper.ph ...

  7. 【十六】 H.266/VVC | VVC中帧间预测技术详细总结 | 所有帧间预测技术代码汇总

    前言 ​ 帧间预测是影响视频编码性能的关键环节之一,H.266/VVC帧间预测在传统只能应对简单的平移运动的基础上,采用了仿射运动模型,可以描述更加复杂的缩放.旋转等运动.为了更好的发挥合并模式(Me ...

  8. PIE SDK打开静止卫星数据

    1. 功能简介 静止卫星是位于地球赤道上空约3.58万km处,与地面始终保持相对静止的卫星,静止卫星的特点是覆盖区域广,具有很强的机动灵活性,能够对特定区域进行分钟级高重复观测,可快速监测灾害目标的动 ...

  9. java导出excel(easypoi)

    介绍 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 ...

最新文章

  1. python 中遍历表时候,当指定的表的长度超过实际长度时候,实际遍历的长度以表实际长度为准,不会发生越界,如下
  2. Weex快速上手教程(Weex Tutorial)
  3. MVP使用中不好的味道
  4. MongoDB与Mysql常用命令解释
  5. ndows live id怎么登陆,手机如何注册和使用Windows Live ID帐号
  6. 忍“乳”负重,身材好的女孩子究竟有多不容易?我从科学的角度算出来了……...
  7. Github Star过万的阿里学长独家干货分享
  8. php实现分页mssql,PHP操作mssql数据库类,含分页类[分页类原创]
  9. TreeView控件 1202
  10. 《概率论与数理统计》(浙大第四版)第三章总结笔记(纯手写)
  11. 4G 网络跟 5G 的区别
  12. Android出现Could not initialize class com.android.sdklib.repository.AndroidSdkHandler的解决方法
  13. 手机不能打电话没有信号无服务器,手机没信号也能拨打电话?不知道了吧!
  14. 服务器如何接收GPS定位器发送过来的数据
  15. 我爱无人机网 FH-0A编程编队无人机怎么样?使用什么语言?
  16. 解决Xcode Simulator 黑屏问题
  17. 让IE6/IE7/IE8浏览器支持CSS3属性
  18. Android获取歌曲详细信息
  19. java英语单词测试_Java 英语单词自测
  20. jsp物流信息发布管理平台

热门文章

  1. [Python 多线程] Semaphore、BounedeSemaphore (十二)
  2. iOS 开发音视频流[1]---FFmpeg
  3. 图论 用广搜搜邻接矩阵
  4. java 基础 --静态
  5. 我对NHibernate的感受(2):何必到处都virtual
  6. 把权限控制做成用户控件--简易型
  7. Delphi 调用外部程序并等待其运行结束
  8. 《JavaScript凌厉开发 Ext详解与实践》3月5日开始上架销售
  9. 评审不给钱,看论文还要涨价?UCLA:我们决定抵制柳叶刀、细胞
  10. 分布式工具的一次小升级⏫