首页 > 数据库 >SpringDataJpa使用原生sql的小坑

SpringDataJpa使用原生sql的小坑

时间:2022-09-22 09:25:15浏览次数:73  
标签:原生 SpringDataJpa 分页 jpa 查询 拼接 sql 小坑

 

1. jpa中的count小坑

在SpringDataJpa中repository层的@Query注解内写原生sql,如果有传入Pageable分页查询,即分页数据的pageSize大于原生sql查询出的数据,程序会正常运行,因为此时一页就可以包含所有的数据,不需要使用分页。但是一旦pageSize小于等于数据库内的数据,此时一页就装不小所有的数据,jpa就会执行一条count数据,但此时使用的是原生sql,jpa就无法识别,因为其底层使用的是对象的方式。

错误信息回显:

 

 

 

原生sql分页查询出现的问题信息

这个问题可能是jpa底层未进行很好的封装,添加了nativeQuery =true应该就应该在分页查询的时候也依旧使用原生sql,而不应该采用jpa封装好的分页查询数据。

所以此时就需要告诉jpa,分页查询数据的时候,依旧使用原生sql,有两种方式注解内添加countProjection和countQuery,推荐使用countProjection,因为countQuery会重新使用一条sql,这样会导致整个注解内的sql语句太多了。

我贴两张解决方案图:

 

 

countProjection解决方案

 

 

countQuery解决方案

2. jpa中的like模糊查询

在jpa中使用原生sql,进行模糊查询的时候,需要拼接"%",否则jpa无法识别,无法进行like模糊查询。

错误做法:

 

like模糊查询错误做法

正确做法:有两种方法sql内使用concat拼接、业务层拼接,concat拼接会导致代码的移植性低,业务层拼接字符串会使代码不美观。

 

 

使用mysql的concat区

 

 

 

业务层拼接

标签:原生,SpringDataJpa,分页,jpa,查询,拼接,sql,小坑
From: https://www.cnblogs.com/yfno/p/16717967.html

相关文章

  • openEuler离线安装mysql5.7.24
    1.官网下载程序包https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz2.上传至/usr/local/src目录下,解压3.将解压包移动到/us......
  • Node.js 的学习(四)分别连接MongoDB与MySQL数据库,实现增删查改功能
    一、Node.js访问MongoDB数据库MongoDB对许多平台都提供驱动可以访问数据库,如C#、Java、Node.js等。1.1、安装MongoDB访问驱动命令如下:全局安装驱动:npminstallmon......
  • mysql根据时间戳统计最近七天的数据
    SELECTDATE_FORMAT(FROM_UNIXTIME(时间戳字段名),'%Y-%m-%d')asdate,id,xxx,count(xxx)astotalFROM表名whereDATE_SUB(CURDATE(),INTERVAL6DAY)<=FR......
  • MySQL在线实现主从配置
    前提是主库的MySQL开启了Binlog,不然需要修改配置,然后重启MySQL1.主库配置[mysqld]max_allowed_packet=1024Mserver-id=1log-bin=mysql-binbinlog_format=row#必......
  • Gorm 操作mysql
    gorm操作mysql安装:goget-ugorm.io/gorm//gorm要连接数据库首先要导入驱动程序:import_"github.com/go-sql-driver/mysql"为了方便,grom包装一些驱动:"gorm.......
  • python-mysql 批量造数据
    importpymysqldb=pymysql.connect(host="124.70.xxx.xxx",user="root",password="3xxxx",database="novel")mycursor=db.cursor()phone=......
  • MYSQL8.0 忘记密码
    1、关闭MySQL服务,以管理员身份运行cmd,输入netstopMySQL(服务名) 2、跳过权限验证,mysqld--console--skip-grant-tables--shared-memory3、以管理员身份运行cmd,新开一......
  • CTFShow sql注入
    参考文章:https://www.jianshu.com/p/2a374b81d5e7web171payload语句1'orusername='flag'--+题目已经提供了我们select查询语句,我们只需要根据该语句进行拼接即可......
  • MySQL知识点
    VARCHAR、CHARVARCHAR使用额外1或2个字节存储字符串长度。列长度小于255字节时,使用1字节表示,否则使用2字节表示。VARCHAR存储的内容超出设置的长度时,内容会被截断。CHA......
  • KeeWiDB:兼容Redis协议,领跑NoSQL
    如果现在的我们离开了互联网,生活会是什么样子?互联网++++,已经深刻渗透到人们的生活中。不知道大家有没有想过?每一个互联网+结合的背后都是海量的存储需求。你查看的每一个......