SpringBoot JPA实践之Named查询
JPAadmin 发布于:2020-04-29 23:00:27
阅读:loading
本文不专业的称为以NamedQuery查询方式为Named查询或者叫命名查询,它的实现是将查询的JPQL及返回结果集类型等信息预定义在Entity类的注解处,通过预先定义的名称和sql语句的方式实现传递名称查询。其实Named查询我一直不太喜欢,有见过但是并未使用过,也不知道它与@Query查询相比哪个更好,本次耗费大量心血来牛刀小试一下(本文所涉及的命名查询均是以为原生SQL查询,对于JPQL的略过),详细参见下文。
Springboot jpa提供的Named查询可支持将SQL语句写至XML文件当中,这个特点使得我眼前一亮,其实我还是比较倾向将SQL与Java代码分离的,于是就深入的查阅各种资料,无奈资料还是比较少的,特此实践之,将整个过程详细整理分享,其实很多博客文章中都有涉及将Named查询时的SQL定义在xml中,但是都是蜻蜓点水,适可而止,没有深入实现,可以参考官网的资料 https://docs.jboss.org/hibernate/orm/6.0/userguide/html_single/Hibernate_User_Guide.html#sql-named-queries ,对于一般选手来说真的只是存粹的了解,因为它不是一个完整的入门了解示例,废话少说,完整示例实现如下。
有资料说默认orm.xml文件是在resources目录下,但笔者喜欢按自定义路径来存储,参考配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.0" xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/orm_2_2.xsd ">
<named-native-query name="XML_User.query_by_name_email" result-class="cn.chendd.example.jpa.user.entity.User">
<description>查询用户所有数据</description>
<query>select id , name , email , sex , createTime from {h-catalog}user</query>
</named-native-query>
</entity-mappings>
Entity见上文中的User类
(1)@NamedNativeQuery 查询的resultClass必须为Entity,并且查询的时候必须为全部的字段,不能为一部分字段;
(2)@NamedNativeQuery 查询语句支持内置的3个表达式,如{h-catalog};
(2)Named查询可支持从指定xml从配置文件中读取配置,支持named-query与named-native-query相关的接口;
(4)Name查询可支持返回自定义DTO对象查询;
(5)命名查询仅适合简单的单表查询;
点赞
发表评论
评论列表
留言区
- SpringBoot JPA实践之框架搭建
- SpringBoot JPA实践之BaseRepository
- SpringBoot JPA实践之自动生成Entity
- SpringBoot JPA实践之API介绍
- SpringBoot JPA实践之方法属性名查询
- SpringBoot JPA实践之Example对象查询
- SpringBoot JPA实践之@Query查询之参数传参方式
- SpringBoot JPA实践之@Query查询之动态查询条件
- SpringBoot JPA实践之@Query查询之接口结果集
- SpringBoot JPA实践之@Query查询之分页实现
- SpringBoot JPA实践之EntityManage查询返回自定义DTO
- SpringBoot JPA实践之EntityManage查询返回自定义DTO的代理实现
- SpringBoot JPA实践之Specification查询分页
- SpringBoot JPA实践之表达式自定义属性与方法
- SpringBoot JPA实践之小技巧汇总