`

Mybatis中的#{} 和 ${}

阅读更多

昨天电话面试被问了这样一个问题,事实是我刚用,并不清楚,遗憾无缘(其实因为多线程被刷掉了)

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号

如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id"

2. $将传入的数据直接显示生成在sql中

如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id

3. #方式能够很大程度防止sql注入

4.$方式无法防止Sql注入

5.$方式一般用于传入数据库对象,例如传入表名

6.一般能用#的就别用$,MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

看个例子,这是个查询全部数据的方法

 

  @ResponseBody
	@RequestMapping("findByPage")
	public PageView findByPage( String pageNow,
			String pageSize,String column,String sort) throws Exception {
		UserFormMap userFormMap = getFormMap(UserFormMap.class);
		userFormMap=toFormMap(userFormMap, pageNow, pageSize,userFormMap.getStr("orderby"));
		userFormMap.put("column", column);
		userFormMap.put("sort", sort);
        pageView.setRecords(userMapper.findUserPage(userFormMap));
        return pageView;
	}

mapper.xml,我还是用$了

 

	<select id="findUserPage" resultType="com.dingshu.entity.UserFormMap">
		select
		<include refid="selectId" />
		from ds_user
		where 1 = 1
		<if test="accountName != null and accountName != ''">
		and accountName like '%${accountName}%'
		</if>
		<if test="column != null">
          order by ${column} ${sort}
        </if>
	</select>

 

分享到:
评论

相关推荐

    浅谈Mybatis #和$区别以及原理

    在Mybatis中,#和$都是占位符,但是它们的作用和处理机制不同。#号将所有传入的参数作为一个字符串来处理,而$号则将传入的参数拼接到SQL语句中执行。这两个占位符的使用场景和风险也不同,#号可以防止SQL注入,而$...

    mybatis面试题#和$的区别.pdf

    mybatis面试题#和$的区别.pdf

    Mybatis下动态sql中##和$$的区别讲解

    Mybatis下动态sql中##和$$的区别讲解 Mybatis是一款流行的ORM框架,能够帮助开发者快速构建数据库交互应用程序。在Mybatis中,动态SQL是一种强大特性,能够根据不同的输入参数生成不同的SQL语句。在Mybatis中,使用...

    Mybatis现学现用

    很全很全:并且有项目实例 例如:mybatis中的#和$的区别? 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111",...

    Mybatis中#{}和${}传参的区别及#和$的区别小结

    在MyBatis框架中,`#{}`和`${}`是两种不同的参数占位符,它们在处理传参时有着显著的差异,同时也关联到`#`和`$`的区别。理解这些差异对于编写安全且高效的SQL查询至关重要。 首先,`#{}`是MyBatis的预编译参数占位...

    关于MyBatis参数传入#{index}的问题的解决方案【源码】

    在MyBatis中,#{index}是参数占位符,它用于动态SQL的拼接,但具体如何使用,特别是当有多个参数时,可能会引发困惑。本文将深入探讨这个问题,提供解决方案,并通过源码分析来解释其工作原理。 首先,让我们明确...

    MyBatis中#{}和${}的区别详解

    在MyBatis框架中,`#{}`和`${}`是两种不同的占位符,它们各自有不同的用途和特性。了解它们的区别对于编写安全、高效的SQL语句至关重要。 首先,`#{}`是预编译参数的表示方式,它会被MyBatis转化为...

    MyBatis中#号与美元符号的区别

    在MyBatis框架中,#号和美元符号($)在动态SQL中的使用有着显著的区别,这些差异直接影响到SQL语句的预编译、类型匹配以及安全性。 首先,#{}是MyBatis的预编译占位符。当使用#{变量名}时,MyBatis会进行预编译处理...

    09参数处理、# 和 $ 的区别.md

    09参数处理、# 和 $ 的区别.md

    Mybatis中#{}与${}的区别详解

    #{} 和 ${} 都是 MyBatis 中的占位符号,但是它们有着不同的特性和应用场景。#{} 能够防止 SQL 注入,而 ${} 方式无法防止 SQL 注入。在开发中,需要根据实际情况选择合适的占位符号,以确保应用程序的安全性。

    浅谈mybatis中的#和$的区别 以及防止sql注入的方法

    在MyBatis中,`#`和`$`在动态SQL中的使用有着明显的区别,它们在处理传入数据的方式上有所不同,同时也与SQL注入的安全问题密切相关。了解这些区别对于编写安全且高效的MyBatis映射文件至关重要。 1. **# 的使用**...

    详解Mybatis中的 ${} 和 #{}区别与用法

    Mybatis中的 ${} 和 #{}区别与用法详解 Mybatis 是一个基于 Java 的持久层框架,它提供了一个简单的方式来进行数据库操作。在 Mybatis 中,使用 ${} 和 #{} 两种方式来传递参数,但它们之间有着很大的区别。 ${} ...

    详解mybatis #{}和${}的区别、传参、基本语法

    MyBatis中#{}和${}的区别、传参、基本语法 MyBatis是一个基于Java的持久层框架,它提供了一个强大的SQL映射机制,能够将Java对象与数据库表之间建立映射关系。在MyBatis中,#{}和${}是两个非常重要的符号,它们用于...

    mybatis中文离线文档

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 这个"mybatis中文离线文档"包含了MyBatis框架的详尽说明和指南,对于...

    MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

    在MyBatis框架中,${} 和 #{} 是两种不同的参数占位符,它们的使用方式和作用有明显的区别,对于SQL语句的安全性和效率有着重要影响。 1. #{} #{} 是预编译处理的方式,也被称为参数绑定或者预处理。在处理 #{ } ...

    mybatis如何防止SQL注入

    在MyBatis中,除了`#{}`之外还可以使用`${}`来指定动态SQL语句中的参数。这种方式虽然灵活,但容易导致SQL注入问题。例如: ```xml SELECT id, title, author, content FROM blog ORDER BY ${orderParam} ``` ...

    mybatis_3.5.9官方中文文档pdf

    MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 MyBatis 的主要特点包括: 1. 动态 SQL:MyBatis 提供了动态 SQL ...

    MyBatis3中文官方文档

    根据提供的文件信息,我们可以从"MyBatis3中文官方文档"中提炼出以下关键知识点: ### 一、MyBatis概述 #### 1.1 什么是MyBatis? - **定义**:MyBatis是一个优秀的持久层框架,它支持普通的SQL查询、存储过程以及...

    mybatis的中文api文档

    MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis的其他语言版本包括英语、西班牙语、日语和韩语,以及简体中文。 ...

    Java Mybatis中的 ${ } 和 #{ }的区别使用详解

    Java Mybatis中的 ${ } 和 #{ } 的区别使用详解 Java Mybatis 中的 ${ } 和 #{ } 是两个不同的占位符,都是用于在 Mybatis 中进行动态 SQL 语句的构建和参数传递。然而,这两个占位符在使用时有着极其重要的区别。 ...

Global site tag (gtag.js) - Google Analytics