Mybatis的传参
最近重新温习了遍Mybatis ,觉得还是汇总一下比较好,方便自己以后的快速开发
最终要的一点事,自己写的话,记忆更加深刻;
首先自己先写了个静态块,防止代码冗余:
private static SqlSession session;
static{
SqlSessionFactory factory = MybatisUtils.getFactory();
/**
* 映射sql的标识字符串
* com.yc.mybatis.onetoone.classMapper是classMapper.xml文件中mapper标签的namespace属性值
* getCalss是select标签的id属性值,通过select标签的id属性值就可以找到要执行的sql语句
*/
session = factory.openSession(true);
}
First:
常规类型 传单个参数:
//传单个参数 (数字类型)
@Test
public void test1(){
String statement = "com.yc.mybatis.test.classMapper.getClass1";
Classes c = session.selectOne(statement,2);
System.out.println( c);
session.close();
} //传单个参数(字符类型)
@Test
public void test10(){
String statement = "com.yc.mybatis.test.classMapper.getClass3";
Classes c = session.selectOne(statement,"ruanjian1");
System.out.println( c);
session.close();
}
xml
<select id="getClass" parameterType="int" resultMap="getClassMap">
select * from class c, teacher t where c.teacher_id = t.t_id and c.teacher_id=#{id}
</select> <select id="getClass3" parameterType="string" resultMap="getClassMap">
select * from class c, teacher t where c.teacher_id = t.t_id and c.c_name=#{name}
</select>
Map传参 适用于单个参数
@Test
public void test11(){
String statement="com.yc.mybatis.test.classMapper.getClass1";
Map<Object, Object> c=session.selectMap(statement, 1,"id");
System.out.println(c);
}
xml
<select id="getClass1" parameterType="int" resultMap="getClassMap">
select * from class where c_id=#{id}
</select>
Map传参 多个参数(也适用于单个参数)
@Test
public void test2(){
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
Map<String, Object> map=new HashMap<String, Object>();
map.put("id", 1);
map.put("name", "ruanjian1");
String statement="com.yc.mybatis.test.classMapper.getClass2";
list=session.selectList(statement,map);
System.out.println(list);
}
xml
<select id="getClass2" parameterType="hashmap" resultMap="getClassMap">
select * from class c, teacher t where c.teacher_id = t.t_id and c.teacher_id=#{id} and c.c_name=#{name}
</select>
以对象的形式传参
@Test
public void test3(){
Classes c=new Classes();
c.setName("ruanjian1");
String statement="com.yc.mybatis.test.classMapper.getClass44";
List<Object> list=session.selectList(statement,c);
System.out.println(list);
}
xml
<select id="getClass44" parameterType="com.yc.bean.Classes" resultMap="getClassMap">
select * from class c, teacher t where c.teacher_id = t.t_id and c.c_name=#{name}
</select>
Second
对于foreach 你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。
用list传单个参数变量
@Test
public void test5(){
String statement = "com.yc.mybatis.test.classMapper.getClass5";
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
List<Object> c = session.selectList(statement,list);
for(Object o:c){
System.out.println( o);
}
session.close();
}
xml
<!--
item: 表示集合中每一个元素进行迭代时的别名
index: 指定一个名字,用于表示在迭代过程中,每次迭代到的位置;
在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。
open: 表示该语句以什么开始,
separator: 表示在每次进行迭代之间以什么符号作为分隔符,
close: 表示以什么结束
-->
<select id="getClass5" parameterType="list" resultMap="getClassMap">
select * from class c,teacher t where c.teacher_id=t.t_id and t.t_id in
<foreach collection="list" item="item" index="index"
open="(" close=")" separator=",">
#{item}
</foreach>
</select>
用List传数组形式
@Test
public void test6(){
String statement = "com.yc.mybatis.test.classMapper.getClass6";
Integer[] ids={2,3,5};
List<Object> c = session.selectList(statement,ids);
for(Object o:c){
System.out.println( o);
}
session.close();
}
xml
<select id="getClass6" parameterType="list" resultMap="getClassMap">
select * from class c,teacher t where c.teacher_id=t.t_id and t.t_id in
<foreach collection="array" item="item" index="index"
open="(" close=")" separator=",">
#{item}
</foreach>
</select>
用List传map形式
@Test
public void test7(){
String statement = "com.yc.mybatis.test.classMapper.getClass7";
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Map<String,Object> map=new HashMap<String,Object>();
map.put("ids", list);
map.put("name", "ruanjian1");
List<Object> c = session.selectList(statement,map);
for(Object o:c){
System.out.println( o);
}
session.close();
}
xml
<select id="getClass7" parameterType="list" resultMap="getClassMap">
select * from class c,teacher t where c.teacher_id=t.t_id and c.c_name=#{name} and t.t_id in
<foreach collection="ids" item="item" index="index"
open="(" close=")" separator=",">
#{item}
</foreach>
</select>
代码分享链接:http://pan.baidu.com/s/1gfkLFCf
Mybatis的传参的更多相关文章
- Mybatis中传参包There is no getter for property named 'XXX' in 'class java.lang.String'
Mybatis中传参包There is no getter for property named 'XXX' in 'class java.lang.String' 一.发现问题 <select ...
- MyBatis中传参时为什么要用#{}
MyBatis中传参时为什么要用#{},这个问题和MyBatis如何防止SQL注入类似.不过在解释这个问题之前,先解释一下什么是SQL注入,还有些称作注入攻击这个问题. SQL注入就是SQL 对传入参 ...
- MyBatis:传参
MyBatis从入门到放弃二:传参 前言 我们在mapper.xml写sql,如果都是一个参数,则直接配置parameterType,那实际业务开发过程中多个参数如何处理呢? 从MyBatis API ...
- Mybatis获取传参
取自 https://blog.csdn.net/weixin_38303684/article/details/78886375 mybatis中SQL接受的参数分为:(1)基本类型(2)对象(3 ...
- mybatis 复杂传参
1基本传参数 Public User selectUserWithCon(@param(“userName”)String name,@param(“userArea”)String area); ...
- MyBatis——特殊传参问题小结
近期在写系统报表API的时候遇到MyBatis中的一些特殊写法: 1. 传入两个参数(一般情况下我们更多的是传入一个对象或者map) public List<MarketVehicleModel ...
- mybatis参数传参、取值处理等
单个参数:mybatis不会做特殊处理 取值方式:#{参数名} 这里参数名不必与方法的形参名称一致,可以用任意参数名来接受实参 例子:方法:update(Integer id) sql映射文件取值#{ ...
- MyBatis dao层 方法传参
MyBatis dao层 方法传参有三种方法. 1. 以下标的方法获取参数. <update id="insertSuccessKilled"> INSER ...
- Mybatis 中在传参时,${} 和#{} 的区别
介绍 MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型int,String,HashMap和java自定义类型. 在SQL中引用这些参数 ...
随机推荐
- dotfiles for linux/unix users automatically! (python Vim IDE)
Here is a brief introduction and package of dotfiles for linux/unix user. I think there are enough i ...
- java动态加载配置文件
最近项目中需要做定时任务,即定时数据库的备份.定时时间用户可以在界面中配置,要求配置修改好立即生效. 想不到什么好办法.下面是一种实现思路 把用户配置的时间存到properties配置文件中,定时任务 ...
- [Oracle] CPU/PSU补丁安装教程
什么是CPU/PSU Oracle CPU的全称是Critical Patch Update, Oracle对于其产品每个季度发行一次安全补丁包,通常是为了修复产品中的安全隐患. Oracle PSU ...
- express搭建简易web的服务器
express搭建简易web的服务器 说到express我们就会想到nodejs,应为它是一款基于nodejs平台的web应用开发框架.既然它是基于nodejs平台的框架那么就得先安装nodejs. ...
- 关于C/C++中的“auto”
C/C++ 98标准 C++03标准 意思完全一样:auto被解释为一个自动存储变量的关键字,也就是申明一块临时的变量内存.auto的出现意味着,当前变量的作用域为当前函数或代码段的局部变量,意味着当 ...
- DLoopDetector回环检测算法
词袋模型是一种文本表征方法,它应用到计算机视觉领域就称之为BoF(bag of features),通过BoF可以把一张图片表示成一个向量.DBoW2是一个视觉词袋库,它提供了生成和使用词典的接口,但 ...
- [ios2]Emoji表情符号兼容方案 【转】
Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. emoji ...
- 使用CATransformLayer制作3D图像和动画
之前我们讲过可以用CALayer搭配CATransform3D来实现将View做3D旋转, 今天我们再看一个3D的新东西 CATransformLayer, 看名字就知道这个layer跟旋转有关, 那 ...
- CodeForces 213B Numbers
$dp$,组合数. $dp[i][j]$表示只用数字$i$,$i+1$,$i+2$......,$9$,凑成长度为$j$的并且数字$i$到$9$符合要求的方案数.只要枚举数字$i$用几个就可以转移了. ...
- CodeForces 645C Enduring Exodus
枚举,三分. 首先,这$n+1$个人一定是连续的放在一起的.可以枚举每一个起点$L$,然后就是在$[L,R]$中找到一个位置$p$,使得$p4最优,因为越往两边靠,距离就越大,在中间某位置取到最优解, ...