MyBatis_04(MyBatis获取“参数值”的两种方式)
MyBatis获取“参数值”的两种方式 (重点!!!)
MyBatis获取参数值的两种方式:${}和#{}
${}的本质就是字符串拼接 , #{}的本质就是占位符赋值
${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
1-单个字面量类型的参数
(第一种情况:单个字面量类型的参数)
若mapper接口中的方法参数为 "单个的字面量类型" ,此时可以使用${}和#{}以任意的名称(最好见名识意)获取参数的值,---注意${}需要手动加单引号
// #{}方式
<!--User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="User">
select * from t_user where username = #{username}
</select>
// ${}方式
//注意${}需要手动加单引号 ''
<!--User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="User">
select * from t_user where username = '${username}'
</select>
2-多个字面量类型的参数
(第二种情况:多个字面量类型的参数)
若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个 "map集合" "中
1-以arg0,arg1…为键,以参数为值;
2-以param1,param2…为键,以参数为值;
因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号。
使用arg或者param都行,要注意的是,arg是从arg0开始的,param是从param1开始的
// #{}方式
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
select * from t_user where username = #{arg0} and password = #{arg1}
</select>
// ${}方式
//注意${}需要手动加单引号 ''
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
select * from t_user where username = '${param1}' and password = '${param2}'
</select>
3-map集合类型的参数
原理;和 "多个字面量类型的参数" ,一样都是放在"Map中"
区别:一个是"java给我们的map"、"一个是我们自己写的map,自己定义Key,Value"
若mapper接口中的方法需要的参数为多个时,此时可以 "手动创建map集合",将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号
// #{}方式
<!--User checkLoginByMap(Map<String,Object> map);-->
<select id="checkLoginByMap" resultType="User">
select * from t_user where username = #{username} and password = #{password}
</select>
//自己写的Map测试
@Test
public void checkLoginByMap() {
SqlSession sqlSession = SqlSessionUtils.getSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("username","admin111");
map.put("password","123456");
User user = mapper.checkLoginByMap(map);
System.out.println(user);
}
4-实体类类型的参数 (最常用的方式!!!)
若mapper接口中的方法 "参数为实体类对象" 时此时可以使用${}和#{},通过访问实体类对象中的 "属性名" 获取属性值,注意${}需要手动加单引号
// #{}方式
<!--int insertUser(User user);-->
<insert id="insertUser">
insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
//因为需要传入一个 "实体类"
//在测试方法中 "new一个实体类"
@Test
public void insertUser() {
SqlSession sqlSession = SqlSessionUtils.getSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
User user = new User(null,"Tom","123456",12,"男","123@321.com");
Integer integer = mapper.insertUser(user);
System.err.println(integer);
}
5-使用@Param标识参数
可以通过@Param注解标识mapper接口中的方法参数,此时,会将这些参数放在map集合中
1-以 "@Param注解的value属性值" 为键,以参数为值;
//在mapper接口中写@Param
@Param注解的value属性值: @Param("username") String username, @Param("password") String password)
2-以param1,param2…为键,以参数为值;
只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号
// #{}方式
<!--User CheckLoginByParam(@Param("username") String username, @Param("password") String password);-->
<select id="CheckLoginByParam" resultType="User">
select * from t_user where username = #{username} and password = #{password}
</select>
@Test
public void checkLoginByParam() {
SqlSession sqlSession = SqlSessionUtils.getSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
User admin = mapper.CheckLoginByParam("admin111", "123456");
System.err.println(admin);
}
6- 总结
建议分成 "两种" 情况进行处理:
1-实体类类型的参数
2-使用@Param标识参数
MyBatis_04(MyBatis获取“参数值”的两种方式)的更多相关文章
- MyBatis获取参数值的两种方式
MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 ...
- java动态获取WebService的两种方式(复杂参数类型)
java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...
- MyBatis配置数据源的两种方式
---------------------siwuxie095 MyBatis 配置数据源的两种方式 1.配置方 ...
- mybatis批量保存的两种方式(高效插入)
知识点:mybatis中,批量保存的两种方式 1.使用mybatis foreach标签 2.mybatis ExecutorType.BATCH 参考博客:https://www.jb51.net/ ...
- js获取url参数值的两种方式
js获取url参数值的方法有很多,下面也为大家介绍两种. 方法一:正则分析法 function getQueryString(name) { var reg = new RegExp(" ...
- struts2的action从request获取参数值的几种方式
使用jquery框架的ajax能够方便的向后台传递参数,以$.post为例,参数有2种方式字符串和键值对:$.post(url, "name=aty&age=25")和$. ...
- RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析
以下转自:http://blog.csdn.net/yangbutao/article/details/10395599 rabbitMQ中consumer通过建立到queue的连接,创建channe ...
- (先导)Git Api对接:获取private_token的两种方式
" Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.在公司一般用于代码管理:开发用例管理平台时我们选择使用git来管理用例,期间使用了很多git ap ...
- HttpClient获取Cookie的两种方式
转载:http://blog.csdn.net/zhangbinu/article/details/72777620 一.旧版本的HttpClient获取Cookies p.s. 该方式官方已不推荐使 ...
- node 创建静态web服务器(下)(处理异步获取数据的两种方式)
接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...
随机推荐
- 01Python变量的使用
Python变量 变量的定义 变量:在程序运行过程中,值会发生变化的量 把程序运算的中间结果临时存到内存里,以备后面的代码继续调用,这几个名字的学名就叫做"变量". 变量的作用 我 ...
- shell:判断某个变量是否包含字符串/变量的方法
尝试了有3种方法: 1.使用"=~"符号,注意前后必须要有空格! ** 可以输出正确结果,被匹配的字符串必须要有引号括起来!** [clouder@ana53 bin]$ a1=' ...
- JZOJ 4319. 【NOIP2015模拟11.5】Lucas的数列
题目 思路 暴力很好打,我们显然可以先把关于 \(k\) 的式子拆开 先二项式展开,然后把外面的 \(m\) 乘进去,把 \(p\) 的分母 \(m\) 消去 \(K = (\sum_{i=1}^m ...
- 代码随想录算法训练营day17 | leetcode ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和
LeetCode 110.平衡二叉树 分析1.0 求左子树高度和右子树高度,若高度差>1,则返回false,所以我递归了两遍 class Solution { public boolean is ...
- new Date(time).getTime()在ios返回NaN
解决: IOS识别(年月日时分秒) new Date(2010,0,1,0,0,0).getTime() 1.问题出在: 日期转成时间戳getTime(): var time = "2017 ...
- Canvas:绘制曲线
前言 画曲线要用到二次贝塞尔曲线或三次贝塞尔曲线.贝塞尔曲线是计算机图形学中相当重要的参数曲线,在一些比较成熟的位图软件中也有贝塞尔曲线工具,如 PhotoShop. 二次贝塞尔曲线 二次贝塞尔曲线在 ...
- OpenLayers点聚合
1. 引言 当页面加载的数据量过大时,拖拽.缩放时往往会产生卡顿 然而,页面实现的内容是有限的,人眼可见范围也是有限的,过于微小的部分是可以不予显示的 聚合是解决这种问题的一个办法,当数据比较多,单个 ...
- 记录篇-浪潮服务器raid卡
在说raid卡之前,首先,我们要明确,不同的raid卡型号,会有不同的配置方式,但是总体来说是大同小异的 这里举例浪潮机架式服务器经常用到的raid卡型号: PM8204 (其实像3108 ...
- SQL Server迁移数据库文件(ldf&mdf文件)到其他盘
为什么 SQL Server安装时,默认都安装在C盘,包括数据库文件的默认位置也是C盘 一般路径是C:/Program Files/Microsoft SQL Server/MSSQL14.MSSQL ...
- I2C接口
I2C是一种多向控制总线,它是由PHILIPS公司在二十世纪八十年代初设计出来的,利用该总线可实现多主机系统所需的裁决和高低速设备同步等功能,是一种高性能的串行总线.I2C总线只用两根双向传输线就可以 ...