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中引用这些参数 ...
随机推荐
- OpenXml操作Word的一些操作总结.
OpenXml操作Word的一些操作总结. OpenXml相对于用MS提供的COM组件来生成WORD,有如下优势: 1.相对于MS 的COM组件,因为版本带来的不兼容问题,及各种会生成WORD半途会崩 ...
- Docker ( Is docker really better than VM ?)
Docker is so popular. Arha? Let's try! Docker needs the linux kernel shoud be upper than 3.10.x Let' ...
- Jenkins+PMD构建自动化静态代码检测
前言:软件缺陷是不可避免的,要尽量减少错误并提高软件质量,主要有两在类技术,即缺陷预防和缺陷检测 缺陷预防包括编写更好的设计规范.实施代码审核制度.运行代码静态分析工具.运行单元测试等 PMD是一种开 ...
- j2ee面试宝典翻译(1)
q1:给出一些使用Java的理由? a1:java是一个有趣的编程语言,让我找出一些理由来: 内建的多线程机制.套接字.内存管理(自动垃圾回收) 面向对象 跨平台 通过对标准API的扩展来支持基于we ...
- avalon1.5+中组件的定义方式
avalon在1.5之后引入新的组件定义和使用方式,其总的宗旨是为了使定义和使用组件更加简单 组件库的概念 首先,需要注意的是,引入了组件库的概念(也可以理解为namespace),之后定义的组件必须 ...
- 自定义session扫描器
为何要自定义session扫描器 由于服务器来管理session的销毁不怎么靠谱,因此很多网站都会自己定义一个session扫描器来管理session的创建和销毁. 实现思路 首先,创建一个sessi ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析)介绍
NSGA(非支配排序遗传算法).NSGA-II(带精英策略的快速非支配排序遗传算法),都是基于遗传算法的多目标优化算法,是基于pareto最优解讨论的多目标优化. 在官网: http://www.ii ...
- Meterpreter
监听 AutoRunScrip:自动执行脚本 如:自动执行post/windows/manage/migrate set AutoRunScript post/windows/manage/migra ...
- C# 动态对象(dynamic)的用法
说到正确用法,那么首先应该指出一个错误用法: 常有人会拿var这个关键字来和dynamic做比较.实际上,var和dynamic完全是两个概念,根本不应该放在一起做比较.var实际上是编译期抛给我们的 ...
- noip 2016 提高组总结(不是题解)
小弱鸡杨树辰是第一次参加像noip这样的高大上的比赛,于是他非常,非常,非常激动. 当他第二天考完试后,他正在yy自己的分数:day1T1应该是a掉了,T2写了个30分的暴力,T3也是个40分的暴力, ...