IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> MyBatis-详解映射文件#{}与${}的区别 -> 正文阅读

[Java知识库]MyBatis-详解映射文件#{}与${}的区别

目录

#{}介绍

${}介绍

1.#{}的使用

1.1传入的是一个简单类型参数(int,String等)

1.2.传入的是多个简单类型参数

(1)通过param1,param2获取

(2)使用@Param()进行指定

(3)使用方法传入参数Map

2.${}

2.1使用${}进行模糊查询

2.2与#{}相同的地方

(1)当接受简单类型时

(2)当接受JavaBean类型时

总结

结语


#{}介绍

“#{}” 在MyBatis中代表一种占位符,相当于之前我们使用JDBC操作时的PreparedStatement中的“?"。

功能:可以接受输入的参数,在大括号中编写参数名称来接受对应的参数。它接受的类型可以是:基本数据类型、包装数据类型、普通的JavaBean类型或者HashMap类型。

${}介绍

“$ { }” 符号,表示拼接SQL语句串,即把接收的参数内容不加任何修饰地拼接在SQL中,注意,这个是没有占位符的,而是简单粗暴的进行直接拼接。

简单了解过后,一心同学将带领你们来玩转这两个符号。

1.#{}的使用

1.1传入的是一个简单类型参数(int,String等)

映射文件中可以不指定传入类型,并且可以对#{}中的参数名任意命名,因为Java反射只能获取方法参数的类型,但是无法得知方法参数的名字。

接口方法:

public Blog selectBlogById(int id);

映射文件:

<select id="selectBlogById" resultType="Blog">
 select * from blog where id=#{yixin}
</select>

测试方法:

@Test
public void testId(){
 SqlSession sqlSession= MybatisUtils.getSession();
 BlogMapper mapper= sqlSession.getMapper(BlogMapper.class);

 Blog blog=mapper.selectBlogById(1);

 System.out.println(blog);
 sqlSession.close();
}

1.2.传入的是多个简单类型参数

同样不需要指定传入类型,MyBatis识别到是多个参数,默认传入类似是map

三种使用方式:

(1)通过param1,param2获取

(2)使用@Param()进行指定

(3)使用方法传入参数Map

(1)通过param1,param2获取

MyBatis会自动把传入的参数封装成一个map,默认通过“param1、param2···”的方式获取对象属性值,表示输入Map的第n个参数.

接口:

public Blog selectByTwo(int id,String name);

映射文件:

<select id="selectByTwo" resultType="Blog">
 select * from blog where id=#{param1} and name=#{param2}
</select>

测试方法:

@Test
public void testSearchByTwo(){
 SqlSession sqlSession= MybatisUtils.getSession();
 BlogMapper mapper= sqlSession.getMapper(BlogMapper.class);

 Blog blog=mapper.selectByTwo(1,"一心");
 System.out.println(blog);
 sqlSession.commit();
 sqlSession.close();
}

(2)使用@Param()进行指定

可以用@Param()进行指定某个特定的key值来引用value

接口:

public Blog selectByTwo(@Param("id") int id,@Param("name") String name);
映射文件:
<select id="selectByTwo" resultType="Blog">
 select * from blog where id=#{id} and name=#{name}
</select>
测试方法:
@Test
public void testSearchByTwo(){
 SqlSession sqlSession= MybatisUtils.getSession();
 BlogMapper mapper= sqlSession.getMapper(BlogMapper.class);

 Blog blog=mapper.selectByTwo(1,"一心");
 System.out.println(blog);
 sqlSession.commit();
 sqlSession.close();
}


(3)使用方法传入参数Map


把传入的参数包装成map,映射文件指定map的key值
接口:

public Blog selectByTwo(Map<String,Object> map);
映射文件:
<select id="selectByTwo" resultType="Blog">
 select * from blog where id=#{mapId} and name=#{mapName}
</select>
测试方法:

@Test
public void testSearchByTwo(){
 SqlSession sqlSession= MybatisUtils.getSession();
 BlogMapper mapper= sqlSession.getMapper(BlogMapper.class);

 Map<String,Object> map=new HashMap<String,Object>();
 map.put("mapId",1);
 map.put("mapName","一心");

 Blog blog=mapper.selectByTwo(map);
 System.out.println(blog);
 sqlSession.commit();
 sqlSession.close();
}
 

2.${}

注意:使用 “$ { }” 拼接符号拼接SQL语句,会引起SQL注入,所以一般不建议使用 “$ { }”。

使用场景:一般用来模糊查询

2.1使用${}进行模糊查询

接口方法:

public Blog selectLike(@Param("column") String column,@Param("value") String value);
映射文件:
<select id="selectLike" resultType="Blog">
 select * from blog where ${column} like concat('%',#{value},'%')
</select>
测试方法:
@Test
public void testSearchLike(){
 SqlSession sqlSession= MybatisUtils.getSession();
 BlogMapper mapper= sqlSession.getMapper(BlogMapper.class);

 Blog blog=mapper.selectLike("name","心");
 // Blog blog=mapper.selectLike("pwd","123");

 System.out.println(blog);
 sqlSession.commit();
 sqlSession.close();
}


?



2.2与#{}相同的地方

当然,${}在某种情况下也是可以实现与#{}同样的功能


(1)当接受简单类型时

"${}" 中只能写"value",而不能是其他的名称!!!


接口方法:

public Blog selectById2(int id);
映射文件:
<select id="selectById2" resultType="Blog">
 select * from blog where id=${value}
</select>
测试方法:
@Test
public void testSearchById2(){
 SqlSession sqlSession= MybatisUtils.getSession();
 BlogMapper mapper= sqlSession.getMapper(BlogMapper.class);

 Blog blog=mapper.selectById2(1);

 System.out.println(blog);
 sqlSession.commit();
 sqlSession.close();
}


(2)当接受JavaBean类型时



当接受JavaBean类型时,会跟#{}一样读取对象中的属性值


接口:

public Blog selectById3(Blog blog);
映射文件:
<select id="selectById3" parameterType="Blog" resultType="Blog">
 select * from blog where name="${name}" and pwd="${pwd}"
</select>

注意:由于${}是直接拼接,所以要加上双引号"".

测试方法:

@Test
public void testSearchById3(){
 SqlSession sqlSession= MybatisUtils.getSession();
 BlogMapper mapper= sqlSession.getMapper(BlogMapper.class);
 Blog b=new Blog();

 b.setName("一心");
 b.setPwd("123456");

 Blog blog=mapper.selectById3(b);
 System.out.println(blog);
 sqlSession.commit();
 sqlSession.close();
}



总结

1、关键字作为参数,使用${},两边不加"",如果想要作为参数值传递,则注意属性如果是字符串的,要加上""。

2、非关键字作为参数,使用"#{}"注入。


结语


以上就是一心同学用通俗易懂的文笔向大家详解MyBatis映射文件中#{}和${}的使用以及两者之间的区别,下一个博客将继续讲解映射文件中的其它属性。

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:28:34  更:2021-11-30 15:30:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:22:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码