mybatis第二篇—参数绑定
不管我们在做数据库作业或者任务还是当时的仅靠jdbc来写一个管理系统的时候,sql语句需要一些参数,从而来实现模糊查询,精确查询,插入数据,更新数据和删除数据。这些参数,在mybatis里面,又该如何使用呢?我总结了一下五点:
- 单个参数的绑定:
这个和上一篇的用法是一样的,我们直接在mapper文件里面用#{}代替参数,就可以完成单个参数绑定,例如代码:
mapper.xml文件:
-
<select id="findById" resultType="Teacher">
-
select * from teacher where tid=#{tid}
-
</select>
在dao层的接口里面,只需要写上对应的方法:
public Teacher findById(int tid);
这样,直接用sqlsession去读取这个dao的接口,然后调用这个方法,就可以实现单个参数的传递了。
- 多个参数绑定:
如果一个sql语句的查询条件有多个的话,就需要多个参数的绑定了。
- 多个参数绑定:索引传递
在mapper文件中:
-
<select id="findByNameAndCourseWithIndex" resultType="Teacher">
-
select * from teacher where tname=#{0} and tcourse=#{1}
-
</select>
在dao层的接口里面:
public Teacher findByNameAndCourseWithIndex(String tname,String tcourse);
这样就实现了根据索引值来传递参数的问题。
- 多个参数绑定:注解绑定
除了索引,我们mybatis还提供了注解的方式来传递参数
mapper文件中:
-
<select id='findByNameAndCourseWithBind' resultType="Teacher">
-
select * from teacher where tname=#{tname} and tcourse=#{tcourse}
-
</select>
dao层的接口:
public Teacher findByNameAndCourseWithBind(@Param("tname")String tname,@Param("tcourse")String tcourse);
可以看到,mapper文件中的#{}里面的参数,用@Param()绑定给了dao层的方法,而#{}和@Param()需要一致。这样就实现了参数通过注解的方式绑定。
- 多个参数绑定:map绑定
利用map,来传递参数,我们知道map是一个键值对形式存储信息的集合,所以利用map也可以实现参数的绑定
mapper文件代码:
-
<select id="findByNameAndCourseWithMap" resultType="Teacher">
-
select * from teacher where tname=#{tname} and tcourse=#{tcourse}
-
</select>
dao层接口文件代码:
public Teacher findByNameAndCourseWithMap(Map paramMap);
在调用接口去使用这个方法的时候,我们需要用到put()方法,来将参数传递过去,例如这里就是paramMap.put("tname","张三")这样一来,就好理解了,键值对的存在,也就形成了一个实参和形参的绑定。
- 多个参数绑定:直接传递
和单个参数传递一样,我们可以使用直接传递的方法去传递多个参数
mapper文件:
-
<select id="findByNameAndCourseWithObject" resultType="Teacher" >
-
select * from teacher where tname=#{tname} and tcourse=#{tcourse}
-
</select>
dao层接口:
这样一来,我们就也能实现一种参数的传递。
不过要注意的是,mybatis中的SQL接受的参数有基本的数据类型,对象,List,数组和Map,无论传递那种参数给mybatis,都会将参数放在一个Map中,如果传入基本类型:变量名作为key,变量值作为value 此时生成的map只有一个元素。如果传入对象: 对象的属性名作为key,属性值作为value,如果传入List: "list"作为key,这个List是value (这类参数可以迭代,利用标签实现循环)如果传入数组: "array"作为key,数组作为value(同上)如果传入Map: 键值不变。
git源码地址:https://github.com/yueyue123123/mybatisDemo.git
原文地址:https://blog.csdn.net/u010159380/article/details/82255461
mybatis第二篇—参数绑定的更多相关文章
- C#语法糖之第二篇: 参数默认值和命名参数 对象初始化器与集合初始化器
今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完 ...
- Mybatis第二篇【CRUD、分页】
完成CRUD操作 我们在上一篇中已经简单知道了Mybatis是怎么使用的以及工作流程了,这次我们使用Mybatis来完成CRUD的操作,再次巩固Mybatis的开发步骤以及一些细节 包与类之间的结构 ...
- 深入理解this机制系列第二篇——this绑定优先级
前面的话 上一篇介绍过this的绑定规则,那如果在函数的调用位置上同时存在两种以上的绑定规则应该怎么办呢?本文将介绍this绑定的优先级 显式绑定 pk 隐式绑定 显式绑定胜出 function fo ...
- 持久层之 MyBatis: 第二篇 :动态SQL And多表查询
MyBatis入门到精通 完整CRUD UserDaoImpl 编写UserDao对应的UserDaoMapper.xml 添加UserDao的测试用例 编写UserDao的测试用例 解决数据库字段名 ...
- Vue.js学习笔记 第二篇 样式绑定
Class绑定的对象语法 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- JAVAEE——SpringMVC第一天:介绍、入门程序、架构讲解、SpringMVC整合MyBatis、参数绑定、SpringMVC和Struts2的区别
1. 学习计划 第一天 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a) 框架结构 b) 组件说明 4.SpringMVC整合MyBatis 5.参数绑定 a) Sp ...
- 泛型2(lambda表达式/参数绑定)
lambda 表达式: Lambda表达式完整的声明格式如下: [capture list] (params list) mutable exception-> return type { fu ...
- 深入理解javascript函数系列第二篇——函数参数
× 目录 [1]arguments [2]内部属性 [3]函数重载[4]参数传递 前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...
- SpringMVC第四篇【参数绑定详讲、默认支持参数类型、自定义参数绑定、RequestParam注解】
参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Controller中处理,这个过程就叫做参数绑定- 默认支持的参数类型 从上面的用法我们可以发现,我们可以使用req ...
随机推荐
- Flutter 打包报错 : Unknown FLUTTER_BUILD_MODE: xxx
概要 在集成flutter 工程之后,我们的工程在debug 和release 模式下都没什么问题,一切都很顺利.但是我们在打企业包的时候却出现了错误: Showing Recent Errors O ...
- 2018-8-10-win10-uwp-在-Canvas-放一个超过大小的元素会不会被裁剪
title author date CreateTime categories win10 uwp 在 Canvas 放一个超过大小的元素会不会被裁剪 lindexi 2018-08-10 19:16 ...
- ionic js 加载动画 ionSpinner 提供了许多种旋转加载的动画图标。当你的界面加载时,你就可以呈现给用户相应的加载图标。 该图标采用的是SVG
ionic 加载动画 ion-spinner ionSpinner 提供了许多种旋转加载的动画图标.当你的界面加载时,你就可以呈现给用户相应的加载图标. 该图标采用的是SVG. 用法 <ion- ...
- ES5给object扩展的一些静态方法
1. Object.create(prototype[, descriptors]) : 创建一个新的对象 1). 以指定对象为原型创建新的对象 2). 指定新的属性, 并对属性进行描述 value ...
- 关于IDEA中maven项目中在pom.xml导入依赖报错的解决方法
报错详情 今天使用springcloud中的hystrix做服务降级的时候,导入下面的依赖,出现红色波浪线的报错信息 <dependency> <groupId>org.spr ...
- 洛谷P1792——[国家集训队]种树
传送门:QAQQAQ 题意:$n$个点中选$m$个不相邻的点,使得这些点不相邻(1和n算相邻),求这些点的最大值 思路:这不是神仙题不是神仙题…… 刚看到这题觉得不难,好像只要贪心就可以了但贪心不知从 ...
- Pycharm VS VS Code(个人使用感受)
Pycharm IDE (community enough!) 简单介绍:Pycharn的确是我刚开始学习python时,除了Visual Studio之外,上手的第二个IDE,最初是因其好看的界面, ...
- NEERC 1999 Divisibility /// 同余DP oj22640
题目大意: 输入n,m: ( 1 ≤ N ≤ 10000, 2 ≤ M ≤ 100 ) 接下来n个数:Each integer is not greater than 10000 by it's ab ...
- East Central North America 2006 Hie with the Pie /// 状压dp oj22470
题目大意: 输入n,有n个地方(1~n)需要送pizza pizza点为0点 接下来n+1行每行n+1个值 表示 i 到 j 的路径长度 输出从0点到各点送pizza最后回到0点的最短路(点可重复走) ...
- 记录:使用springboot的cors和vue的axios进行跨域
一.编写一个配置类,并且注册CorsFilter: 注意允许跨域的域名不要写错 @Configuration public class ZysuyuanCorsConfiguration { @Bea ...