SpringBoot JPA实践之Named查询
本文不专业的称为以NamedQuery查询方式为Named查询或者叫命名查询,它的实现是将查询的JPQL及返回结果集类型等信息预定义在Entity类的注解处,通过预先定义的名称和sql语句的方式实现传递名称查询。其实Named查询我一直不太喜欢,有见过但是并未使用过,也不知道它与@Query查询相比哪个更好,本次耗费大量心血来牛刀小试一下(本文所涉及的命名查询均是以为原生SQL查询,对于JPQL的略过),详细参见下文。
定义Entity
测试查询调用
XML定义命名查询
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文件地址
有资料说默认orm.xml文件是在resources目录下,但笔者喜欢按自定义路径来存储,参考配置如下:
orm文件配置
<?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
Entity见上文中的User类
Test测试类
自定义DTO查询
定义SQL名称
自定义DTO
总结
(1)@NamedNativeQuery 查询的resultClass必须为Entity,并且查询的时候必须为全部的字段,不能为一部分字段;
(2)@NamedNativeQuery 查询语句支持内置的3个表达式,如{h-catalog};
(2)Named查询可支持从指定xml从配置文件中读取配置,支持named-query与named-native-query相关的接口;
(4)Name查询可支持返回自定义DTO对象查询;
(5)命名查询仅适合简单的单表查询;
你可能感兴趣的:
-
0 -
0 -
0 -
0 -
0