昨天电话面试被问了这样一个问题,事实是我刚用,并不清楚,遗憾无缘(其实因为多线程被刷掉了)
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中,#和$都是占位符,但是它们的作用和处理机制不同。#号将所有传入的参数作为一个字符串来处理,而$号则将传入的参数拼接到SQL语句中执行。这两个占位符的使用场景和风险也不同,#号可以防止SQL注入,而$...
mybatis面试题#和$的区别.pdf
Mybatis下动态sql中##和$$的区别讲解 Mybatis是一款流行的ORM框架,能够帮助开发者快速构建数据库交互应用程序。在Mybatis中,动态SQL是一种强大特性,能够根据不同的输入参数生成不同的SQL语句。在Mybatis中,使用...
很全很全:并且有项目实例 例如:mybatis中的#和$的区别? 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111",...
在MyBatis框架中,`#{}`和`${}`是两种不同的参数占位符,它们在处理传参时有着显著的差异,同时也关联到`#`和`$`的区别。理解这些差异对于编写安全且高效的SQL查询至关重要。 首先,`#{}`是MyBatis的预编译参数占位...
在MyBatis中,#{index}是参数占位符,它用于动态SQL的拼接,但具体如何使用,特别是当有多个参数时,可能会引发困惑。本文将深入探讨这个问题,提供解决方案,并通过源码分析来解释其工作原理。 首先,让我们明确...
在MyBatis框架中,`#{}`和`${}`是两种不同的占位符,它们各自有不同的用途和特性。了解它们的区别对于编写安全、高效的SQL语句至关重要。 首先,`#{}`是预编译参数的表示方式,它会被MyBatis转化为...
在MyBatis框架中,#号和美元符号($)在动态SQL中的使用有着显著的区别,这些差异直接影响到SQL语句的预编译、类型匹配以及安全性。 首先,#{}是MyBatis的预编译占位符。当使用#{变量名}时,MyBatis会进行预编译处理...
09参数处理、# 和 $ 的区别.md
#{} 和 ${} 都是 MyBatis 中的占位符号,但是它们有着不同的特性和应用场景。#{} 能够防止 SQL 注入,而 ${} 方式无法防止 SQL 注入。在开发中,需要根据实际情况选择合适的占位符号,以确保应用程序的安全性。
在MyBatis中,`#`和`$`在动态SQL中的使用有着明显的区别,它们在处理传入数据的方式上有所不同,同时也与SQL注入的安全问题密切相关。了解这些区别对于编写安全且高效的MyBatis映射文件至关重要。 1. **# 的使用**...
Mybatis中的 ${} 和 #{}区别与用法详解 Mybatis 是一个基于 Java 的持久层框架,它提供了一个简单的方式来进行数据库操作。在 Mybatis 中,使用 ${} 和 #{} 两种方式来传递参数,但它们之间有着很大的区别。 ${} ...
MyBatis中#{}和${}的区别、传参、基本语法 MyBatis是一个基于Java的持久层框架,它提供了一个强大的SQL映射机制,能够将Java对象与数据库表之间建立映射关系。在MyBatis中,#{}和${}是两个非常重要的符号,它们用于...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 这个"mybatis中文离线文档"包含了MyBatis框架的详尽说明和指南,对于...
在MyBatis框架中,${} 和 #{} 是两种不同的参数占位符,它们的使用方式和作用有明显的区别,对于SQL语句的安全性和效率有着重要影响。 1. #{} #{} 是预编译处理的方式,也被称为参数绑定或者预处理。在处理 #{ } ...
在MyBatis中,除了`#{}`之外还可以使用`${}`来指定动态SQL语句中的参数。这种方式虽然灵活,但容易导致SQL注入问题。例如: ```xml SELECT id, title, author, content FROM blog ORDER BY ${orderParam} ``` ...
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 MyBatis 的主要特点包括: 1. 动态 SQL:MyBatis 提供了动态 SQL ...
根据提供的文件信息,我们可以从"MyBatis3中文官方文档"中提炼出以下关键知识点: ### 一、MyBatis概述 #### 1.1 什么是MyBatis? - **定义**:MyBatis是一个优秀的持久层框架,它支持普通的SQL查询、存储过程以及...
MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis的其他语言版本包括英语、西班牙语、日语和韩语,以及简体中文。 ...
Java Mybatis中的 ${ } 和 #{ } 的区别使用详解 Java Mybatis 中的 ${ } 和 #{ } 是两个不同的占位符,都是用于在 Mybatis 中进行动态 SQL 语句的构建和参数传递。然而,这两个占位符在使用时有着极其重要的区别。 ...