SpringData JPA 使用原生 SQL
在实现个人博客系统的归档功能的时候,遇上这样的需求:
- 先把数据库中所有条目的时间按照年月分组,并查询出年月(String)的列表
- 根据年月字符串查询符合条件的博客,并返回博客列表
由于数据访问层使用的SpringData JPA
,所以一般是根据方法命名规则或者编写JPQL
来查询数据库。
但是上面两个需求光凭方法命名应该是很难实现,写简单的查询用 JPQL 还行,复杂的查询终究是感觉不如 SQL 顺畅,因此查了查在 JPA 中使用原生 SQL 的方法,总结在这里。
先上代码:
/* @Query("select function('date_format', b.updateTime, '%Y/%m') as ym
from Blog b group by function('date_format', b.updateTime, '%Y/%m') order by ym") */
@Query(value = "SELECT date_format(b.update_time, '%Y/%m') AS ym FROM t_blog b GROUP BY ym ORDER BY ym DESC",
nativeQuery = true)
List<String> findGroupYearMonth();
@Query(value = "SELECT * FROM t_blog b WHERE date_format(b.update_time, '%Y/%m') = :yearmonth ORDER BY B.update_time DESC",
nativeQuery = true)
List<Blog> findBlogsByYearAndMonth(@Param("yearmonth") String yearMonth);
主要有两点:
- 想使用原生 SQL 需要在
@Query
里加上nativeQuery = true
; - 给原生 SQL 传递参数需要在方法参数里使用
@Param("name")
,然后在SQL中以:name
形式填充。
顺便在测试的时候还发现了一个小 tip:
new
出来的对象中如果有需要@Autowire
的成员,是不会注入成功的。要么全部使用@Autowire
。
SpringData JPA 使用原生 SQL的更多相关文章
- spring data jpa使用原生sql查询
spring data jpa使用原生sql查询 @Repository public interface AjDao extends JpaRepository<Aj,String> { ...
- jpa使用原生SQL查询数据库like的用法
jpa使用like查询,需要拼接字符串,如下 oracle用法: //dao层代码 @Query(value = "SELECT * FROM TABLENAME WHERE USER_NA ...
- idea下spring boot jpa写原生sql的时候,报Cannot resolve table错误
错误如图 打开View→Tool Windows→Persistence选项 在弹出的Persistence窗口的项目上右键,选择Generate Persistence Mapping→By Dat ...
- JPA、SpringData JPA 、Hibernate和Mybatis 的区别和联系
一.JPA 概述 1. Java Persistence API(Java 持久层 API):用于对象持久化的 API 2. 作用:使得应用程序以统一的方式访问持久层 3. 前言中提到了 Hibern ...
- SpringData JPA进阶查询—JPQL/原生SQL查询、分页处理、部分字段映射查询
上一篇介绍了入门基础篇SpringDataJPA访问数据库.本篇介绍SpringDataJPA进一步的定制化查询,使用JPQL或者SQL进行查询.部分字段映射.分页等.本文尽量以简单的建模与代码进行展 ...
- springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany
springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...
- jpa 联表查询 返回自定义对象 hql语法 原生sql 语法 1.11.9版本
-----业务场景中经常涉及到联查,jpa的hql语法提供了内连接的查询方式(不支持复杂hql,比如left join ,right join). 上代码了 1.我们要联查房屋和房屋用户中间表,通过 ...
- JPA框架下使用纯粹的原生SQL
最近遇到一个需求,查询数据库中对应表的字段是动态的,项目使用的框架使用JPA+Spring Boot,JPA自带原生SQL支持的传入参数是强类型的,无法用于查询语句的字段更改,因为插入字符串的话带有单 ...
- JPA或Hibernate中使用原生SQL实现分页查询、排序
发生背景:前端展示的数据需要来自A表和D表拼接,A表和D表根据A表的主键进行关联,D表的非主键字段关联C表的主键,根据条件筛选出符合的数据,并且根据A表的主键关联B表的主键(多主键)的条件,过滤A表中 ...
随机推荐
- noip模拟7[匹配·回家·寿司]
这次考试状态好像还是没有回来,只拿了55pts,还全是第一题的功劳,就是一个小KMP,然后还让我给打错了 就很难受,while打成了if,然后wa掉45分考完立马拿回来了,悔死了,害 第二题爆零了,为 ...
- JDK并发包二
JDK并发包二 线程复用--线程池 在线程池中,总有那么几个活跃的线程,当程序需要线程时可以从池子中随便拿一个控线程,当程序执行完毕,线程不关闭,而是将这个线程退会到池子,等待使用. JDK提供了一套 ...
- WEB安全漏洞扫描与处理(上)——安全漏洞扫描工具AppScan的安装使用
很多公司对软件会有安全的要求,一般测试公司会使用安全漏洞扫描工具对软件进行漏扫,然后给出安全报告,然后软件开发人员会根据提供的安全报告进行漏洞的处理.我们接触到的测评公司,使用的是漏洞扫描工具AppS ...
- Spring Cloud专题之三:Hystrix
在微服务架构中,我们将系统拆分成很多个服务单元,各单位的应用间通过服务注册与订阅的方式相互依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问 ...
- 通过浏览器运行cmd命令、启动steam
我们先来看看实现起来的效果,我们在浏览器中输入ping so.com 试试打开计算器.启动steam 要实现这个效果其实用到了浏览器自定义协议,我们可以通过自定义协议打开wechat.扣扣.emali ...
- github push pull error port 443: Timed out
最近github只有开代理才能打开,但是即使能打开,进行push或者pull会经常报类似error port 443: Timed out的错误,网上搜了很久才找到解决办法. 首先要查询当前本机使用的 ...
- 关于asp.net中Repeater控件的一些应用
在Asp.net中,我是比较喜欢用Repeater这个控件,刚刚遇到的一个问题,怎么实现单击 <asp:LinkButton>,通过后台的单击事件获取同一行数据中的其他数据(对象). 1, ...
- 利用C语言输出一个二元一次函数
#include<stdio.h> #include<math.h> int main(void)//其实void我认为在这可有可无 { double a,b,c,x1,x2 ...
- 资源:jenkins下载路径
Jenkins版本下载路径 所有版本:http://mirrors.jenkins.io/war/
- linux 开机自启动的两种方式
方法 1 – 使用 rc.local sudo vi /etc/rc.local 在文件最后加上: sh /root/script.sh & 如果是 CentOS,我们修改的是文件 /etc/ ...