解决mybatis #{}无法自动添加引号的错误

作者:Kevinten10 时间:2023-09-21 11:45:02 

mybatis #{}无法自动添加引号

传入string类型时,无法自动添加引号,导致SQL将值识别为列名,导致SQL失败

解决

使用map类型代替string的传值

Map<String, String> map = new HashMap<>(2);
map.put("userName", userName);
return userMapper.selectUserByName(map);

<select id="selectUserByName" parameterType="map" resultType="userDO">
    select
        user_id as userId,
        user_name as userName,
        user_password as userPassword,
        user_level as userLevel,
        user_gmt_create as userGmtCreate,
        user_gmt_modified as userGmtModified
    from user
    where user_name = #{userName}
</select>

mybatis #{}与${} 单引号

今天使用mybitas查询数据库时候报了错

解决mybatis #{}无法自动添加引号的错误

提示不知道的列,查看上方的sql语句,发现sql的语法错了,where查询的条件的值少了单引号

-- 错误提示
select `uid`, `username`, `password`, `time`        
from blogs_user    
where username = wu;
-- 正确的sql语句
select `uid`, `username`, `password`, `time`        
from blogs_user    
where username = 'wu';

这时问题就很明显了,就是字符串在sql中需要用单引号引起来,而报错的提示信息中是没有这个单引号的

解决办法

解决办法是将对应的映射文件中的${user.username} 改为 #{user.username},再次运行即可

<!--  ${user.username}  -->
 <select id="xxx" parameterType="wu.bean.User" resultMap="BaseResultMap">
   select
   <include refid="base_column_list"/>
   from blogs_user
   where username = ${user.username};
 </select>
 <!--  #{user.username} -->
 <select id="xxx" parameterType="wu.bean.User" resultMap="BaseResultMap">
   select
   <include refid="base_column_list"/>
   from blogs_user
   where username = ${user.username};
 </select>

验证

如果要验证是否正确,思路是将成的sql 语句打印出来,因此需要在mybatis-config.xml中加入<setting name="logImpl" value="STDOUT_LOGGING"/>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <settings>
   <!--  打印查询语句    -->
   <setting name="logImpl" value="STDOUT_LOGGING"/>
....
 </settings>
 <typeAliases>
   ....
 </typeAliases>

<mappers>
 .....
 </mappers>
</configuration>

重新运行程序

使用 ${user.username}

解决mybatis #{}无法自动添加引号的错误

使用 #{user.username} 

解决mybatis #{}无法自动添加引号的错误

验证正确!

来源:https://blog.csdn.net/wsh596823919/article/details/81113119

标签:mybatis,#{},引号
0
投稿

猜你喜欢

  • Java操作Mongodb数据库实现数据的增删查改功能示例

    2023-11-25 00:02:05
  • Android实现图片上传蒙层进度条

    2022-05-06 04:35:43
  • java8 如何实现分组计算数量和计算总数

    2022-05-05 01:17:32
  • Android基于ListView实现类似Market分页加载效果示例

    2021-10-01 10:44:32
  • java异常处理机制示例(java抛出异常、捕获、断言)

    2022-11-16 21:26:13
  • Java 判断一个时间是否在另一个时间段内

    2023-02-24 18:44:25
  • 浅谈c#.net中巧用ToString()将日期转成想要的格式

    2022-02-02 18:14:07
  • Java比较两个List的值是否相等的方法

    2022-12-31 15:41:37
  • Java代理模式的深入了解

    2021-06-06 10:24:38
  • SpringMVC基于配置的异常处理器

    2023-01-19 15:34:33
  • Android如何防止apk程序被反编译(尊重劳动成果)

    2022-02-08 02:18:04
  • tomcat部署java web项目遇到的问题及解决方法

    2023-08-04 23:44:27
  • Spring5源码解析之Spring中的异步和计划任务

    2022-09-06 02:14:04
  • Kotlin select使用方法介绍

    2022-05-28 19:34:27
  • Java利用读写的方式实现音频播放代码实例

    2022-08-21 15:38:52
  • Spring代理对象导致的获取不到原生对象注解的解决

    2021-12-05 11:44:19
  • Java8 CompletableFuture runAsync学习总结submit() execute()等

    2023-05-25 04:13:43
  • 浅谈Android中多线程切换的几种方法

    2022-03-12 06:03:17
  • ProtoBuf动态拆分Gradle Module解析

    2022-01-06 17:45:21
  • 解决Map集合使用get方法返回null抛出空指针异常问题

    2023-11-25 00:14:00
  • asp之家 软件编程 m.aspxhome.com