Mybatis映射文件Mapper.xml中#和$的区别

1、"#"

简单来说"#"在编译时使用"?"占位符标记,可以有效防止参数注入,相当于我们使用JDBC操作时的PreparedStatement。

2、"$"

直接把参数拼接到SQL中执行相当于JDBC操作时的Statement

3、参数作为非SQL关键字传递

<insert id="addUser" parameterType="User">
        insert into users values(default, "${username}", "${password}", "${photo}");
</insert>

或者把"$"改成"#"

<insert id="addUser" parameterType="User">
        insert into users values(default, #{username}, #{password}, #{photo});
 </insert>

4、参数作为关键字传递,比如查询条件全是由参数拼接的,只是用一条SQL,有时要按name列查,有时要按age列查

<select id="selectUser" parameterType="User" resultType="User">

select * from users where ${columnName}  ${condition}  #{columnValue}

</select>

SQL1:select * from users where username = "test";

SQL2:select * from users where userage like "%2";

因为列名和关系条件是关键字,是用"$",列值是非关键字,使用"#"。

三、总结

1、关键字作为参数,使用"$",两边不加""。

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

其他情况优先使用"#"

原文地址:https://www.cnblogs.com/u013533289/p/11622937.html

时间: 2024-10-29 14:24:29

Mybatis映射文件Mapper.xml中#和$的区别的相关文章

Mybatis映射文件中数据库表列名称和POJO成员域的联系

下面是Mybatis的SQL映射文件. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <select id="findbyname"

Mybatis中mapper.xml中的模糊查询

Mybatis中mapper.xml中的模糊查询 <!-- 方法一: 直接使用 % 拼接字符串 注意:此处不能写成 "%#{name}%" ,#{name}就成了字符串的一部分, 会发生这样一个异常: The error occurred while setting parameters, 应该写成: "%"#{name}"%",即#{name}是一个整体,前后加上% --> <if test="name != nul

6.Mybatis 映射文件标签详解

编写的测试代码在下面,没有jar包(上传的大小限制啦) 1.1     Mybatis映射文件(核心) 1.1.1 输入映射 1.1.1.1  ParameterType 指定输入参数的java类型,可以使用别名或者类的全限定名.它可以接收简单类型.POJO.HashMap. 1.1.1.1.1      传递简单类型 参考需求:根据用户ID查询用户信息. 1.1.1.1.2      传递POJO对象 1.1.1.1.2.1     需求 根据用户性别和用户名称来查询用户信息 1.1.1.1.

mapper.xml中动态sql

mabatis重点是通过标签对sql灵活的组织,通过配置的方式完成输入 输出映射. 1.对mapper.xml中重复的sql抽取统一维护,以及foreach使用 UserMapperCustom.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://

20180601_Eclipse自动生成mybatis映射文件

Eclipse自动生成mybatis映射文件 1.安装MyBatis Generator插件 打开Eclipse,找到Help--Eclipse Marketplace. 搜索MyBatis Generator,Install安装即可. 2.新建generatorConfig.xml文件,填写配置信息 generatorConfig.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE g

使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同

如果是使用oracle数据库,那么hibernate的映射文件.hbm.xml如下: <id name="xuehao" column="xuehao"> </id> 这个id不是数据库自动生成的,这需要注意:而且这些字段必须和实体类中相对应,实体类中还需要对应的get()方法和set()方法. 因为oracle数据库中的id都是自动生成的,所以这里不需要写数据库的id,这和MySQL数据库有很大区别:另外,MySQL数据库建表时必须指明id

[原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

如何在mybatis映射文件里面使用java方法

在mybatis的映射xml文件调用java类的方法: 1. SELECT * FROM EC_CORE_USER WHERE (user_name=#{userName} or mail =#{userName} or mobile_phone = '${@[email protected](userName)}') and  user_password=#{userPassword} 入上面代码所示.此处应注意,方法必须为静态方法. 2.获取类里面的常量: r.czmc='${@[email

Mapper.xml中对象的关联

对象的关联,特别是manytoone的关联,有两种方式:发送一条额外sql去查询和内联的方式 发送一条额外sql:当我在使用到这个关联对象的时候,我发送一条额外的sql去把这个关联的对象查询出来,然后设置到对象里面,这样容易造成n+1的问题 内联方式:在这条sql直接把关联的对象的表连接进来,把需要查询的信息全部查出来,然后直接在resultMap中拼装出关联的对象,这样就可以避免n+1的问题,但是会造成连接的性能损耗 选用原则 : 如果关联的对象要在列表中显示,那么直接使用内联的方式,会造成表