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中引用这些参数 ...
随机推荐
- C# 编写简易 ASP.NET Web 服务器
C# 编写简易 ASP.NET Web 服务器 你是否有过这样的需求——想运行 ASP.NET 程序,又不想安装 IIS 或者 Visual Studio?我想如果你经常编写 ASP.NET 程序的话 ...
- COFF/PE文件结构
COFF/PE文件结构 原创 C++应用程序在Windows下的编译.链接(二)COFF/PE文件结构 2.1概述 在windows操作系统下,可执行文件的存储格式是PE格式:在Linux操作系统下, ...
- 使用Varnish+ESI实现静态页面的局部缓存(思路篇)
使用Varnish+ESI实现静态页面的局部缓存(思路篇) 页面静态化是搭建高性能网站必用的招式之一,页面静态化可以有效提升系统响应速度,同时也有利于搜索引擎优化.但在页面静态化后,静态页面之间包含( ...
- 一种基于自定义代码的asp.net网站首页根据IP自动跳转指定页面的方法!
一种基于自定义代码的asp.net网站首页根据IP自动跳转指定页面的方法! 对于大中型网站,为了增强用户体验,往往需要根据不同城市站点的用户推送或展现相应个性化的内容,如对于一些大型门户网站的新闻会有 ...
- mongDB主从
MongoDB[第二篇]MongodDB主从 官方网站:http://www.mongodb.org/ MongoDB的一些参数 --logpath 日志文件路径 --master 指定为主机器 -- ...
- Quagga添加自己的命令
参考了王斌的文档:http://down.51cto.com/data/621454 TIP:笔者使用的版本是0.99.20 需求:在接口模式下添加一条"ip ospf enable&quo ...
- RocketMQ源码 — 二、 NameServer
NameServer 作用:Producer和Consumer获取Broker的地址 目的:解耦Broker和Producer.Consumer 原理:使用netty作为通信工具,监听指定端口,如果是 ...
- Mac 安装 Grunt
第一步:安装brew 打开http://brew.sh/登陆brewhome官网,上面有安装命令. 第二步:安装node 第一步安装成功后,命令行输入 brew install node 第三步:安装 ...
- 办理西蒙弗雷泽大学(本科)学历认证『微信171922772』SFU学位证成绩单使馆认证Simon Fraser University
办理西蒙弗雷泽大学(本科)学历认证『微信171922772』SFU学位证成绩单使馆认证Simon Fraser University Q.微信:171922772办理教育部国外学历学位认证海外大学毕业 ...
- hdu1045
#include<iostream> using namespace std; int count = 0, n = 0; //判断该ch[x][y]是否可以放置 bool isOk(ch ...