mybatis模糊查询搜索不到数据问题

  昨天,在使用muybatis做模糊查询时,遇到了一个特别坑的问题:使用mybatis做模糊查询搜索不到数据,但是用sql语句在navicate里面查是可以查出结果的。

问题具体描述:
在这里插入图片描述
在这里插入图片描述
sql语句在navicate中可以查出结果:
在这里插入图片描述
我的ProjectMapper.xml
在这里插入图片描述
  到底是什么问题?该怎么解决呢?在此,我将网上我看到的方法做一个总结:

1、字符编码导致的错误
原因:jdbc的url没有添加utf-8的编码设置。
解决:

url=jdbc:mysql:///company?characterEncoding=utf-8&&useUnicode=true&serverTimezone=UTC&zeroDateTimeBehavior=CONVERT_TO_NULL

2、实体类对象与sql语句没有映射

原因:实体类对象与sql语句的字段不一致。
解决:

  • 若只是_与大写字母的差别,如user_nameuserName,那么,在配置文件中开启驼峰命名自动映射即可。
  • 若是字段的不一致,可以在mapper.xml语句里通过as别名的方式将它们之间映射起来。例如:select project_id as id from project,其中project_id为数据库里面表的字段,idproject类中的属性。

3、$与#的用法问题

原因:#$的区别最大在于:#{} 传入值时,sql解析后,参数是自带引号的;而${}穿传入值,sql解析后,参数是不带引号的。

解决:将上图中mapper.xml的#改成$

  我项目中url上编码是正确的,sql语句与实体类之间是一致的,采用了第3种方式解决了问题。但是,我看网上说可以可以这样写:

<select id="getProjectBy" parameterType="map" resultType="com.lenovocloud.package_manager.vo.ProjectVO">
   select id,`name`,version,`type`,user_id as userId,user_name as userName,ctime,mtime from project
   <where>
       <if test="condition.name!=null">
           and `name` like concat("%",#{condition.name},"%")
       </if>
       <if test="condition.type!=null">
           and `type` like concat("%",#{condition.type},"%")
       </if>
   </where>
   order by ctime desc
</select>

但我的不行,这样还是会失效,也不知道为什么。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值