【SpringBoot异常】org.springframework.jdbc.BadSqlGrammarException
【SpringBoot异常】org.springframework.jdbc.BadSqlGrammarExceptionSpringBoot在启动后调用SQL语句查询用户时出现BadSqlGrammarException异常,描述内容为Unknown column ‘admin’ in ‘where clause’,没有在表中找到admin用户名报错异常:org.springframework.
【SpringBoot异常】org.springframework.jdbc.BadSqlGrammarException
SpringBoot在启动后调用SQL语句查询用户时出现BadSqlGrammarException异常,描述内容为Unknown column ‘admin’ in ‘where clause’,没有在表中找到admin用户名
报错异常:
org.springframework.jdbc.BadSqlGrammarException: Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘admin’ in ‘where clause’
原因:
在mapper.xml配置文件中的select sql语句中,占位符用了${userName},没有将userName的值转化为字符串传入sql语句,导致没有在数据库表中找到用户名
<select id="queryUserByName" parameterType="String" resultType="com.zeta.crm.vo.User">
select
<include refid="Base_Column_List"/>
from
t_user
where
user_name = ${userName}
</select>
MyBatis的#{}和${}的区别
1.#{}相当于用的JDBC中的PrepareStatement模式,预编译SQL语句,然后传入参数
${}相当于JDBC中的Statement模式,采用“SQL语句” + “参数”的形式连接
2.#{}在进行输入映射时,会对参数进行类型解析。如果是String类型,sql语句中会自动加上“”引号
${}在进行输入映射的时候参数是什么就原样输出到sql语句中
3.#{}如果是进行简单类型的(八大基本类型+String和date类型)输入映射时,#{}中的参数名称可以任意
${}如果进行简单类型的输入映射时 ${}里面的参数必须是value
总结
在MyBatis的sql映射配置文件中,使用正则表达式时,尽量用#{},可以避免sql注入等一些问题
解决方法
mapper.xml中的正则表达式改为#{userName}
<select id="queryUserByName" parameterType="String" resultType="com.zeta.crm.vo.User">
select
<include refid="Base_Column_List"/>
from
t_user
where
user_name = #{userName}
</select>
参考文章
https://blog.csdn.net/chengwei9975/article/details/100786607
更多推荐
所有评论(0)