添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

近期碰到一个问题,具体需求是:从Excel导入数据,然后查询出对应系统中已经存在ID;

但这批数据是有换行的字符串,当没有做任何处理,直接作为一个字符串那去查询时,最后的SQL会是这样的

SELECT
    table1
WHERE
    txt = '第一行
第三行';

数据库中保存的需要被匹配的字符串也是这样一个形式的

转义前其实是这种形式

第一行\r\n第二行\r\n第三行

但在postresql查询时却不会匹配SQL中的换行,导致最后无法正常匹配到;

面对这个问题,我想到了两个解决方案,这里提供给大家:

一、使用chr(10)和chr(13)代替换行符

既然postresql没有匹配换行,所以我们这直接自己使用换行符去匹配;

首先在代码中,把字符串根据换行符(java中是\n) 拆分成多个字符串;

以集合的形式构造mybatis的SQL语句,在每个拆分的字符串后面都加上postresql的chr(13)和chr(10)

chr(13) => \r   chr(10) => \n

注:最后一个拆分的字符串后面是不需要加chr(13)和chr(10) 的;

SELECT
    table1
WHERE
    txt = '第一行' || chr(13) || chr(10) || '第二行' || chr(13) || chr(10) || '第三行';

二、使用postresql的E转义匹配

这是我最后选择的解决方案,对现有的字符串进行改造一下,然后再使用postresql的E进行转义匹配;

首先在代码中,把字符串的中的换行符(java中是\n)都替换成普通的字符;(str.replaceAll("\n","\\\\r\\\\n"))

在mybatis构造SQL时,原本的 txt = #{str} 改成使用postresql的E转义查询 txt = E'${str}'

使用E时,E一定要在字符引号的前面,中间也不可以有空格 E''

注:若要匹配的字符串中含有转义字符,则不适合使用这个方案,因为所有的转义字符都会被E转义掉;

SELECT
    table1
WHERE
    txt = E'第一行\r\n第二行\r\n第三行';

这就是我目前对于这个问题研究出来的解决方案,有不对的地方很欢迎有同学提出来,共同学习、共同进步;

然后我用接口调的时候发现了异常,这个数据的前面有个 换行符 ,但是用navicat之类的工具是看不出来的,因此对于备注这种东西最好用like来进行 sql 匹配 。但是我 使用 navicat查看列表的时候并没有发现什么异常。我运行一句 sql 的时候,发现对应的字段查询不出结果。 文章目录 Mybatis 注解之@Results、@Result、@ResultMap问题方法一方法二 Mybatis 注解之@Results、@Result、@ResultMap 在 使用 mybatis 时发现, mybatis 能自动 匹配 实体名和数据库字段名相同的字段。当有实体名与数据库的字段名不同时该如何解决?? 数据库的表对应的列名: springboot项目 建的实体类为: public class MapModel { private Long key; private String 最近做一个站内信的功能,站内信的内容字段包含 换行符 号\n ,功能上又包含like,用户输入又不会输入 换行符 。 站内信内容如下: 您成功参与了【{userNick}】发起的拼团成为了团长 \n 邀请用户参团可赚【{money}】元 文章目录问题解决方式ASCII表 包含 换行符 、空格、一些特殊字符,怎么like搜索 代码过滤用户输入的空格字符 使用 My SQL 的REPLACE关键字 结合 MyBatis Plus实战 // 过滤搜索内容 的空格 String content = StringU import java .lang.reflect.Field; import java .lang.reflect.Method; import java .lang.reflect.ParameterizedType; import java .lang.reflect.Type; import java . sql . SQL Exception; import java .util.ArrayList; import java .util.Properties; import java .u 第一种写法(1):原符号 &lt; &lt;= &gt; &gt;= &amp; ' " 替换 符号 &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= &amp;amp; &amp;apos; &amp;quot;例如: sql 如下:create_date_time &amp;gt; 每一个接口对应一个映射配置文件,映射配置文件存储路径在resources目录下,并且要和接口的包路径保持一致,映射配置文件名需要和接口名保持一致。直接alt+回车,自动生成映射文件 的标签。idea创建映射配置文件模板,可以快速创建 mybatis 映射配置文件。快速从代码跳转到mapper及从mapper返回代码。根据数据库注解,生成swaggermodel注解。1,存放路径必须是resources的根路径。 MyBatis 是一款持久层框架。配置好,并且写好其他代码后执行。2,配置文件的名字,随便写。..... 在自已的项目,通过获取多个商品Id,来获取这个商品详细信息。但数据库返回的商品信息与原来List 的id顺序并不 匹配 ,导致了页面商品信息显示错误。 通过网上查询发现oder by可以有效解决这个问题,返回与当时产品id顺序一致。 这里附带上这个 sql 语句 select prod_id, prod_name, price, `describe`, prod_date, prod_pic, ... @Select({"<script>SELECT " + "IFNULL( sum( CASE WHEN dispose_type = 1 THEN 1 ELSE 0 END ), 0 ) AS misinformation, " + "IFNULL( sum( CASE WHEN dispose_type = 2 THEN 1 ELSE 0 END ), 0 ) AS fault, " + "IFNULL( sum( CASE WHE db.collection_name.find().forEach(function(item) { // 得到指定字段的值 var con = item.field_name_a; // 使用 正则 匹配 替换 内容 替换 /g 表示全局 匹配 , 匹配 到所有符合要求的 不会 匹配 到就终止 con = con.replace( /<p.*?&g... @Select(…)等注解报红报错, 使用 了网上的删除 mybatis 文件重新导入项目也解决不了,自定义@Select也因为一个Rentention 无法 导入依赖不能成功 解决方法: 在pom.xml 添加如下依赖: <dependency> <groupId>org.apache.ibatis</groupId> <artifactId>ibatis-core</artifactId> <versio 最近项目用到 mybatis 3.1和db28.1版本的数据库,出现一个问题,我研究半天把 mybatis 源码给改了,竟然成功解决。 直接入正题:在 mybatis 映射文件 sql 语句时如果有折行情况就报错,db2说有非法字符。原因是db2数据库默认回车符就是去执行 sql 语句,db2控制台提供了 'db2 -td;' 这个命令,意思是 sql 语句以分号结束,这样在控制台执行 sql 语句时就可以换行了,...