最近重新温习了遍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的传参的更多相关文章

  1. 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 ...

  2. MyBatis中传参时为什么要用#{}

    MyBatis中传参时为什么要用#{},这个问题和MyBatis如何防止SQL注入类似.不过在解释这个问题之前,先解释一下什么是SQL注入,还有些称作注入攻击这个问题. SQL注入就是SQL 对传入参 ...

  3. MyBatis:传参

    MyBatis从入门到放弃二:传参 前言 我们在mapper.xml写sql,如果都是一个参数,则直接配置parameterType,那实际业务开发过程中多个参数如何处理呢? 从MyBatis API ...

  4. Mybatis获取传参

    取自  https://blog.csdn.net/weixin_38303684/article/details/78886375 mybatis中SQL接受的参数分为:(1)基本类型(2)对象(3 ...

  5. mybatis 复杂传参

    1基本传参数 Public User selectUserWithCon(@param(“userName”)String  name,@param(“userArea”)String area); ...

  6. MyBatis——特殊传参问题小结

    近期在写系统报表API的时候遇到MyBatis中的一些特殊写法: 1. 传入两个参数(一般情况下我们更多的是传入一个对象或者map) public List<MarketVehicleModel ...

  7. mybatis参数传参、取值处理等

    单个参数:mybatis不会做特殊处理 取值方式:#{参数名} 这里参数名不必与方法的形参名称一致,可以用任意参数名来接受实参 例子:方法:update(Integer id) sql映射文件取值#{ ...

  8. MyBatis dao层 方法传参

    MyBatis dao层 方法传参有三种方法. 1. 以下标的方法获取参数. <update id="insertSuccessKilled">       INSER ...

  9. Mybatis 中在传参时,${} 和#{} 的区别

    介绍 MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型int,String,HashMap和java自定义类型. 在SQL中引用这些参数 ...

随机推荐

  1. 这几天有django和python做了一个多用户博客系统(可选择模板)

    这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下 断断续续2周时间吧,用django做了一个多用户博客系统,现在还没有做完,做分享下,以后等完善了再慢慢说 做的 ...

  2. tastypie Django REST framework API [Hello JSON]

    tastypie is a good thing. Haven't test it thoroughly. Gonna need some provement. Now I will introduc ...

  3. 【Oracle】-【体系结构】-【DBWR】-DBWR进程相关理解

    对DBWR的一些理解 首先从名称上,DBWR全称是Database Writer Process,属于Oracle后台进程的一种,有的地方也叫DBWn,我想这里是出于DBWR进程个数的原因,DBWR进 ...

  4. 图的匹配问题与最大流问题(三)——最大流问题Ford-Fulkerson方法Java实现

    上篇文章主要介绍了Ford-Fulkerson方法的理论基础,本篇给出一种Java的实现. 先借助伪代码熟悉下流程 FORD-FULKERSON(G,t,s) 1 for each edge(u,v) ...

  5. java foreach实现原理

    在平时Java程序中,应用比较多的就是对Collection集合类的foreach遍历,foreach之所以能工作,是因为这些集合类都实现了Iterable接口,该接口中定义了Iterator迭代器的 ...

  6. 结构-行为-样式-Javascript笔记

    一.console.dir()可以显示一个对象所有的属性和方法. 二.递归遍历一个数据集合: A.数据: {  "menu": [    {      "menuId&q ...

  7. jboss服务启动失败报:Error occurred during initialization of VM

    今天下午突然间公司的GTV管理平台上不去了 访问确实,提示找不到页面 登录终端查看服务进程. ps -ef | grep jboss 发现没有这个进程.怎么办,启动被. 输入nohup /home/c ...

  8. Python第一天——入门Python(4)字典的常用操作

    # dic={[1,2,3]:'123'} #可变类型不能当做字典的key,value可以使用任意类型 # dic={(2,3,4):'123'} # print (dic[(2,3,4)]) #元组 ...

  9. CreateMutex 创建一个有名字的互斥量的时候hMutex=CreateMutex(NULL,TRUE,"tickets")报错

    编译器报错: 不能将参数 3 从“const char [8]”转换为“LPCWSTR”,怎么改成LPCWSTR类型 更改方法: hMutex=CreateMutex(NULL,TRUE,L" ...

  10. JavaEE XML DOM创建之DOM4J

    DOM4J创建xml文档 @author ixenos 1 写出内容到xml文档 XMLWriter writer = new XMLWriter(OutputStream, OutputForamt ...