`

mybatis3中mapper文件中 #{...} 和 ${...}有什么不同

 
阅读更多

 

from :   http://blog.csdn.net/doctor_who2004/article/details/43027181

 

 

What is the difference between #{...} and ${...}?

mybatis3中mapper文件中 #{...} 和 ${...}有什么不同.

MyBatis interprets #{...} as a parameter marker in a JDBC prepared statement. MyBatis interprets ${...} as 

mybatis3对于#{...}是JDBC prepared statement参数的占位符标志,其值会有对应typehandler针对不同类型设值.

string substitution. It is important to know the difference because parameter markers cannot be used in certain places 

${...}在mybatis3中仅仅是字符串替换,这也是以前web编程sql注入发生的地发.

in SQL statements.
For example, you cannot use a parameter marker to specify a table name.
Given the following code:

 

[java] view plain copy
 
  1. Map<String, Object> parms = new HashMap<String, Object>();  
  2. parms.put("table""foo");  
  3. parms.put("criteria"37);  
  4. List<Object> rows = mapper.generalSelect(parms);  
  5. <select id="generalSelect" parameterType="map">  
  6.   select * from ${table} where col1 = #{criteria}  
  7. </select>  


MyBatis will generate the following prepared statement:

 

 

[java] view plain copy
 
  1. select * from foo where col1 = ?  


Important: note that use of ${...} (string substitution) presents a risk for SQL injection attacks. Also, string substitution can be problematical for complex types like dates. For these reasons, we recommend using the #{...} form whenever possible.

分享到:
评论

相关推荐

    mybatis自动生成mapper文件

    下面将详细阐述MyBatis Generator的使用方法、功能以及它如何帮助我们自动化生成实体类和Mapper文件。 1. **MyBatis Generator概述** MyBatis Generator基于Java,它可以解析数据库表结构,并根据这些信息生成相应...

    mybatis-3-mapper.rar

    首先,`mybatis-3-mapper.dtd`是MyBatis中用于验证XML映射文件的文档类型定义(Document Type Definition)。在XML文件中,DTD是用来定义元素和属性的规则,它确保了XML文件的结构正确性。当Eclipse等IDE在解析XML...

    mybatis-3-mapper.dtd文件下载

    总结来说,`mybatis-3-mapper.dtd` 文件是 Mybatis 中用于验证映射文件语法的 DTD 文件,而 `mybatis-3-config.dtd` 文件则服务于 Mybatis 配置文件。这两个文件确保了 Mybatis 配置和映射文件的正确性,从而保证了...

    mybatis-3-config/mapper.dtd 解决mybatis头文件报错

    然后打开eclipse -&gt;Window-&gt;prefenrence-&gt;XML-&gt;XML Catalog-&gt;User Specifiled Entreis-&gt;Add-&gt;Location(此处是你放dtd文件的位置例如:‪D:\mybatis\mybatis-3-config.dtd)-&gt;Key(如果更改config,此处应该是:-//...

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    在MyBatis中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 是两个至关重要的DTD(Document Type Definition)文件,它们定义了MyBatis配置文件和映射文件的结构和规则。 首先,让我们深入了解一下`mybatis-3...

    MyBatis的helloworld(不使用Mapper接口实现MyBatis查询数据库).zip

    在本示例中,我们将不使用Mapper接口来演示如何通过MyBatis进行基本的数据库查询,这对于理解MyBatis的核心工作原理是非常有帮助的。 首先,MyBatis的核心组件包括XML配置文件、SqlSessionFactory和SqlSession。XML...

    mybatis热部署mapper增量更新.

    3. **工具使用**:除了IDE插件,还有一些专门的热部署工具,如`maven-plugin-dev`,这个插件可以帮助我们监控mapper文件的变化,并自动重新加载。在Maven的pom.xml文件中添加相关配置即可。 4. **Spring Boot集成**...

    spring-boot+tk.mybatis通用mapper

    在`pom.xml`文件中,我们需要添加Spring Boot和tk.mybatis的相关依赖。包括`spring-boot-starter-web`、`mybatis-spring-boot-starter`以及`tk.mybatis.mapper-spring-boot-starter`。确保版本与项目其他依赖兼容。...

    用java程序生成mybatis的mapper.xml和mapper.java文件

    2. **使用逆向工具**:有许多第三方库可以帮助我们自动生成mapper文件,例如Mybatis Generator或者Apache的DbUtils。这些工具可以通过JDBC连接到数据库,读取表结构,并自动创建对应的mapper.xml和mapper.java文件。...

    Mybatis中配置Mapper的方法

    在传统的MyBatis配置中,我们通常会在`mybatis-config.xml`文件中声明SqlSessionFactory,并在资源目录下的`mappers`子目录创建XML映射文件。例如,一个名为`UserMapper.xml`的文件,内容可能包含如下结构: ```...

    mybatis自动生成mapper.xml文件

    2. 配置MyBatis:在application.properties或application.yml文件中,配置MyBatis的相关属性,如数据源、Mapper文件的位置等。 3. 创建MyBatis配置类:创建一个@Configuration注解的类,用于配置MyBatis的相关组件...

    mybatis-3-mapper.dtd.zip

    在MyBatis中,`mybatis-3-mapper.dtd`文件扮演着至关重要的角色,它是MyBatis XML映射文件的文档类型定义(DTD,Document Type Definition)。DTD主要用于描述XML文档的结构,确保XML文件的正确性。 首先,我们来...

    Java的MyBatis框架中Mapper映射配置的使用及原理解析

    Mapper映射配置文件是MyBatis的核心组成部分,用于定义SQL查询和结果映射。 首先,我们来看一下Mapper的XML配置文件。Mapper的XML文件通常放在项目的`resources`目录下,以`.xml`为扩展名,与对应的Java接口处于...

    springboot mybatis mapper.xml 配置

    在Spring Boot集成MyBatis的过程中,`mapper.xml`配置文件起着至关重要的作用。它用于定义SQL语句,实现数据库的CRUD操作。本示例将深入探讨如何配置`mapper.xml`,并提供新增、修改、删除、查询及分页查询的实践...

Global site tag (gtag.js) - Google Analytics