【SpringBoot异常】org.springframework.jdbc.BadSqlGrammarException

【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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值