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 ...
随机推荐
- 2021级《JAVA语言程序设计》上机考试试题6
首先管理员页面 代码: <%@ page language="java" contentType="text/html; charset=UTF-8" p ...
- Spring(Spring的静态工厂方法-动态工厂方法)
Spring的工厂方法: IoC通过工厂模式创建bean对线有两种方式: 静态工厂模式 实例工厂模式 区别在与:静态工厂不需要实例化,实例工厂需要实例化 1.静态工厂 实体类Car package c ...
- 基于SpringBoot实现操作GaussDB(DWS)的项目实战
摘要:本文就使用springboot结合mybatis plus在项目中实现对GaussDB(DWS)的增删改查操作. 本文分享自华为云社区<基于SpringBoot实现操作GaussDB(DW ...
- leaflet动态加载/手动绘制(圆、多边形)demo
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3 ...
- 带你认识3个J.U.C组件扩展
摘要:本文主要为大家讲解3种J.U.C组件扩展. 本文分享自华为云社区<[高并发]J.U.C组件扩展>,作者: 冰 河. 1.FutureTask FutureTask是J.U.C(jav ...
- .gitattributes 作用详细讲解
https://blog.csdn.net/qq_35425070/article/details/106883833 *.fbx filter=lfs diff=lfs merge=lfs -tex ...
- WPF使用WindowChrome自定义标题栏
第一步:基本实现 添加Window的Style定义,并设置WindowChrome.WindowChrome属性: 设置WindowChrome标题栏: CaptionHeight--主要用于拖动有效 ...
- ASP.NET Core 部署在Docker容器当中(1)
一.前言 在公司新项目中,果断选择使用asp.net core,通过实践学习一系列技术栈:docker.docker-nginx.docker-compose.Jenkins,本文主要是介绍如何将项目 ...
- C# DevExpress GridControl下动态创建列的方法
这里是把在表格中创建控件的方法封装成一个类,然后在创建列的时候实例化"创建控件"的方法 1.在列中使用一些按钮 1 using Common; 2 using DevExpress ...
- charles证书安装-客户端证书
1.iOS设置教程: 1)wifi中配置代理 2)浏览器中输入chls.pro/ssl,进行证书下载 3)证书下载成功后,设置--通用--描述文件–安装刚下载的证书 4)设置--通用--关于本机--证 ...