开发者社区> 问答> 正文

java mybatis查询一个很长很长的字符串,放进对应的实体里,报错?报错

mybatis查询一个很长很长的字符串,放进对应的实体,比如数据库有一个字段存了很长的一段中文,查询的时候用实体里用String接。但是很久都查询不出来,然后爆超时的错。如果把这个字段里面的字数减少到比较少,就能很快的查询出来,请问各位大佬,不动数据库的情况下怎么解决这个问题

展开
收起
爱吃鱼的程序员 2020-06-06 10:46:10 1348 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>在不动数据库的基础上,分批次查询再拼接吧</p> 
    

    select SUBSTRING(content,1,100) from table

    select SUBSTRING(content,100,100) from table

    这样多查几次 最后拼起来

                        <p>用mysql管理工具敲sql代码查询一下呢?</p>
                    
    
                        <div class="ref">
    

    引用来自“银杏果果”的评论

    用mysql管理工具敲sql代码查询一下呢?

                            回复 <a class="referer" target="_blank">@银杏果果</a>  : 谢谢
                        
    
                            最好的报的错误发上来
                        
    
                        <p>这么长的字符串就不适合做查询条件了,好比一片文章一样,查询它的意义何在呢。</p> 
    

    缩短的办法:用消息摘要的方法,很长的一段中文存储到数据库时,同时计算好它的哈希然后把哈希也存储到表。查询的时候计算哈希,然后直接对哈希做查询,查出来之后的结果再在Java里面做 equals 比对字符串(哈希也是不绝对唯一)。

    DEMO表

    ID长内容内容特征码
    自增几百字几千字...MD5 / SHA

    这种肯定可以提高查询效率、降低数据库压力。

                            谢谢
                        
    
                            回复 <a class="referer" target="_blank">@蓝水晶飞机</a>  : 我觉得题主的问题不是把长字符串作为条件查询,不然sql中赋值这个条件也是不现实的,他应该就是以其它条件查询出结果中包含这个长字符串。
                        
    
                            SELECT * FROM x_table WHERE content_hash=#{hash},如果返回的结果 >1条(说明哈希重复),则在业务里面 equals 查询结果字符串与查询条件字符串,找出匹配的结果行。
                        
    
                        <p>应该修改jdbc的默认连接时间吧,把连接时间放长一点试试</p>
                    
    
                            谢 谢 
    
    2020-06-06 10:46:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
Java Spring Boot开发实战系列课程【第6讲】:Spring Boot 2.0实战MyBatis与优化(Java面试题) 立即下载