关于Mybatis的mapper文件中${}和#{}的区别和注意事项

#{}占位符 可以有效防止sql注入,使用时不需要关注参数的类型,mybatis会自动进行java类型和jdbc类型的转换;#{}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,#{}括号中可以是value或者其他名称。

${}和#{}不同,通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接收简单类型值或者pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value,如果使用别的名称则会出现 org.apache.ibatis.reflection.ReflectionException:There is no getter for…… 的错误,这时有两种解决方式,1、将mapper文件中${}括号的值改为value,2、在dao文件的参数前增加注解 @Param("名称"),如  public int getPageCount(@Param("condition") String condition);使用${}不能防止sql注入,但经常用于模糊查询中如like‘%${value}%‘

原文地址:https://www.cnblogs.com/h-wt/p/10481640.html

时间: 2024-10-01 04:50:18

关于Mybatis的mapper文件中${}和#{}的区别和注意事项的相关文章

Mybatis的mapper文件中#和$的区别 以及 resultType和resultMap的区别

一般#{}用于传递查询的参数,一般用于从dao层传递一个string或者其他的参数过来,mybatis对这个参数会进行加引号的操作,将参数转变为一个字符串. SELECT * FROM employee WHERE name="jack" 而$则不同,我们一般用于ORDER BY的后面. SELECT * FROM employee ORDER BY salary MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,

自动生成Mybatis的Mapper文件

自动生成Mybatis的Mapper文件 工作中使用mybatis时我们需要根据数据表字段创建pojo类.mapper文件以及dao类,并且需要配置它们之间的依赖关系,这样的工作很琐碎和重复,mybatis官方也发现了这个问题,因此给我们提供了mybatis generator工具来帮我们自动创建pojo类.mapper文件以及dao类并且会帮我们配置好它们的依赖关系. 实际上,最非常流行MyBatis-Plus中内置了代码生成器:采用代码或者 Maven 插件可快速生成 Mapper . Mo

MyBatis的Mapper文件的foreach标签详解

MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis Mapper文件的foreach标签时我们先看看DTD是如何定义的?DTD代码如下: 1 2 3 4 5 6 7 8 9 10 <!-- 定义foreach元素 --> <!ELEMENT foreach (#PCDATA | include | trim | where | set | fo

关于mybatis写mapper文件注意事项

xml中某些特殊符号作为内容信息时需要做转义,否则会对文件的合法性和使用造成影响 Html代码   < < > > & & &apos; ' " " 在mapper文件中写sql语句时,为避免不必要的麻烦(如<等),建议使用<![CDATA[ ]]>来标记不应由xml解析器进行解析的文本数据,由<![CDATA[  ]]>包裹的所有的内容都会被解析器忽略 <![CDATA[ sql语句 ]]> X

spring配置扫描mybatis的mapper文件注意:

一般会将不业务的mapper文件放到不同的包中: spring配置扫描就需要配置下面的方式(两个*): <!-- mybatis文件配置,扫描所有mapper文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:dataSource-ref="dataSource" p:configLocation="

关于mybatis中mapper文件resultMap中collection的使用

collection的使用有两种resultMap和select,必须手动指定一种 1. 实体类: 1 package com.mrlu.mybatis.domain; 2 3 import java.util.List; 4 5 /** 6 * Created by stefan on 15-12-31. 7 */ 8 public class User { 9 private Integer id; 10 private String name; 11 private List<Accoun

mybatis的mapper文件内容回顾

当这个对象有关联到其他对象时,用resultType是查不出来的 此时就得用resultMap  

mybatis实现mapper配置文件热部署

工作用到mybatis,同事说每次修改sql后,都要重启,因为mybatis的mapper文件默认只在启动时加载到缓存,改动后不会自动加载,于是研究了下mybatis文件的加载,分享如下: 实现思路:使用定时器定时扫描mapper文件的改动,如果有改动则调用mapper文件的加载方法XMLMapperBuilder.parse(). 一.写一个重新加载mapper文件的java类  首先需要构建一个sqlSessionFactory对象,并指定mybatis的Configuration.xml配

MyBatis Mapper.xml文件中 $和#的区别

MyBatis Mapper.xml文件中 $和#的区别 网上有很多,总之,简略的写一下,作为备忘.例子中假设参数名为 paramName,类型为 VARCHAR . 1.优先使用#{paramName,jdbcType=VARCHAR} 写法,除了可以防止sql注入以外,它还能在参数里含有单引号的时候自动转义, 而${paramName}由于是类似于拼接sql的写法,不具备此功能. 2.注意,使用 #{paramName,jdbcType=VARCHAR} 写法的时候,模糊查询的写法为:'%'