近期碰到一个问题,具体需求是:从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; &apos; &quot;例如:
sql
如下:create_date_time &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
语句时就可以换行了,...