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获取“参数值”的两种方式)的更多相关文章

  1. MyBatis获取参数值的两种方式

    MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 ...

  2. java动态获取WebService的两种方式(复杂参数类型)

    java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...

  3. MyBatis配置数据源的两种方式

    ---------------------siwuxie095                                     MyBatis 配置数据源的两种方式         1.配置方 ...

  4. mybatis批量保存的两种方式(高效插入)

    知识点:mybatis中,批量保存的两种方式 1.使用mybatis foreach标签 2.mybatis ExecutorType.BATCH 参考博客:https://www.jb51.net/ ...

  5. js获取url参数值的两种方式

    js获取url参数值的方法有很多,下面也为大家介绍两种.  方法一:正则分析法  function getQueryString(name) {  var reg = new RegExp(" ...

  6. struts2的action从request获取参数值的几种方式

    使用jquery框架的ajax能够方便的向后台传递参数,以$.post为例,参数有2种方式字符串和键值对:$.post(url, "name=aty&age=25")和$. ...

  7. RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析

    以下转自:http://blog.csdn.net/yangbutao/article/details/10395599 rabbitMQ中consumer通过建立到queue的连接,创建channe ...

  8. (先导)Git Api对接:获取private_token的两种方式

    " Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.在公司一般用于代码管理:开发用例管理平台时我们选择使用git来管理用例,期间使用了很多git ap ...

  9. HttpClient获取Cookie的两种方式

    转载:http://blog.csdn.net/zhangbinu/article/details/72777620 一.旧版本的HttpClient获取Cookies p.s. 该方式官方已不推荐使 ...

  10. node 创建静态web服务器(下)(处理异步获取数据的两种方式)

    接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...

随机推荐

  1. javaweb画图

    最近都在忙期中考试,写博客的频率有点低了,以下是一些基本代码,是王建民老师说的要建立自己的资料库,我直接建的资料库. 画图html <!--定义表格宽度 行距 宽度<tr>行< ...

  2. MVC3三层架构

    以上部分来自黑马

  3. Git常用指令集合🔥

    关联文章:Git入门图文教程(1.5W字40图)--深入浅出.图文并茂 指令-查看状态信息 指令 描述 git --version 查看git版本 git status 查看本地仓库状态,比较常用的指 ...

  4. centos7 ssh服务

    转载博客园: Centos7开启SSH服务 - KinwingHU - 博客园 (cnblogs.com)

  5. C#泛型接口请求封装类

    using HttpUtil; using Newtonsoft.Json; using System; using System.Collections.Generic; using System. ...

  6. layui级联操作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link re ...

  7. 公司有两台电脑,却分给一个上网ip

    解决办法,只限于本公司: 电脑a和电脑b 电脑a先用ip 6.21上网,之后将ip改为其它: 电脑b改为6.21 此时两台电脑都能上网了

  8. MySQL的Temporary Files存放路径

    在Linux环境中MySQL用TMPDIR环境变量来设置temporary files的路径,如果没有设置,MySQL会用系统默认 /tmp, /var/tmp或/usr/tmp. 1.当排序时(OR ...

  9. [Unity]关于Unity中的触摸类Input.Touch以及简单的虚拟摇杆实现

    InputTouch 使用Unity开发的游戏大多是移动端游戏,而一些移动端游戏完全使用触摸操作而不是点击Button Unity使用Input.Touch来管理触摸操作 Input.TouchCou ...

  10. 数值分析之数值积分 4.X

    求积公式 \[\int_{a}^{b} f(x) \mathrm{d} x \approx \sum_{k=0}^{n} A_{k} f\left(x_{k}\right) \] \(A_k\) 为求 ...