1、@NamedQuery、@NamedNativeQuery

  @NamedQuery与@NamedNativeQuery都是定义查询的一种形式,@NamedQuery使用的是JPQL,而@NamedNativeQuery使用的是原生SQL。这两种不常用,所以简单介绍一下。

  使用方法:
    1.1、在实体@Entity下添加@NamedQuery或@NamedNativeQuery定义。

/**
* 类别
* @author caofanqi
*/
@Data
@Entity
@Builder
@Table(name = "jpa_category")
@NoArgsConstructor
@AllArgsConstructor
@NamedQuery(name = "Category.selectByName",query = "SELECT c FROM Category c WHERE c.categoryName = ?1 ")
@NamedNativeQuery(name = "Category.selectByNameLike",query = "SELECT * FROM cfq_jpa_category WHERE category_name LIKE ?1 ",resultClass = Category.class)
public class Category { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private String categoryName; /**
* 门类和书是一对多的关系
* 由多的一方来维护关联关系
*/
@OneToMany(mappedBy = "category")
@OrderBy("bookName DESC")
private List<Book> books; }

    1.2、在Repository接口中声明方法

/**
* 门类持久层
* @author caofanqi
*/
public interface CategoryRepository extends JpaRepository<Category,Long> { /**
* 使用@NamedQuery进行方法查询
* @param name 分类名称
* @return category
*/
Category selectByName(String name); /**
* 使用@NamedNativeQuery进行方法查询
* @param name 分类名称
* @return category
*/
List<Category> selectByNameLike(String name); }

    单元测试:

@Transactional
@SpringBootTest
class CategoryRepositoryTest { @Resource
private CategoryRepository categoryRepository; @BeforeEach
void setup(){
Category category1 = Category.builder().categoryName("Java").build();
Category category2 = Category.builder().categoryName("数据库").build();
Category category3 = Category.builder().categoryName("数据结构").build(); ArrayList<Category> categories = Lists.newArrayList(category1, category2, category3); categoryRepository.saveAll(categories); } @Test
void selectByName() { Category category = categoryRepository.selectByName("Java");
assertEquals("Java",category.getCategoryName()); } @Test
void selectByNameLike(){
List<Category> categoryList = categoryRepository.selectByNameLike("%据%");
assertEquals(2,categoryList.size());
}
}

注意:
    1.3、@NamedQuery、@NamedNativeQuery注解也可以使用<named-query>、<named-native-query />标签来替代写在orm.xml中。
    1.4、@NamedNativeQuery还可以与@SqlResultSetMapping(@EntityResult、@ConstructorResult、@ColumnResult、@FieldResult)注解配置使用,指定映射。
    1.5、@NamedQueries、@NamedNativeQueries、@SqlResultSetMappings用于装多个@NamedQuery、@NamedNativeQuery、@SqlResultSetMapping。
    1.6、我们一般不推荐使用@NamedQuery、@NamedNativeQuery,而使用下面的@Query注解。

源码地址:https://github.com/caofanqi/study-spring-data-jpa

学习Spring-Data-Jpa(九)---注解式方法查询之@NamedQuery、@NamedNativeQuery的更多相关文章

  1. Spring Data Jpa (四)注解式查询方法

    详细讲解声明式的查询方法 1 @Query详解 使用命名查询为实体声明查询是一种有效的方法,对于少量查询很有效.一般只需要关心@Query里面的value和nativeQuery的值.使用声明式JPQ ...

  2. SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法

    软件152 尹以操 首先谢谢大佬的简书文章:http://www.jianshu.com/p/45ad65690e33# 这篇文章中讲的是spring中使用spring data jpa,使用了xml ...

  3. 【Spring Data 系列学习】Spring Data JPA @Query 注解查询

    [Spring Data 系列学习]Spring Data JPA @Query 注解查询 前面的章节讲述了 Spring Data Jpa 通过声明式对数据库进行操作,上手速度快简单易操作.但同时 ...

  4. 【hql】spring data jpa中 @Query使用hql查询 问题

    spring data jpa中 @Query使用hql查询 问题 使用hql查询, 1.from后面跟的是实体类 不是数据表名 2.字段应该用实体类中的字段 而不是数据表中的属性 实体如下 hql使 ...

  5. 学习Spring Data JPA

    简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特​​殊 ...

  6. 学习-spring data jpa

    spring data jpa对照表 Keyword Sample JPQL snippet And findByLastnameAndFirstname - where x.lastname = ? ...

  7. 使用Spring Data JPA的Specification构建数据库查询

    Spring Data JPA最为优秀的特性就是可以通过自定义方法名称生成查询来轻松创建查询SQL.Spring Data JPA提供了一个Repository编程模型,最简单的方式就是通过扩展Jpa ...

  8. spring data jpa 使用JPQL的方式查询

    用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件,这时就可以使用@Query注解,结合JPQL的语句方式完成查询 @Que ...

  9. Spring Data JPA 复杂/多条件组合查询

    1: 编写DAO类或接口  dao类/接口 需继承 public interface JpaSpecificationExecutor<T> 接口: 如果需要分页,还可继承 public ...

随机推荐

  1. 转 A 、B两张表,找出ID字段中,存在A表,但是不存在B表的数据

    A.B两张表,找出ID字段中,存在A表,但是不存在B表的数据,A表总共13W数据,去重后大约3万条数据,B表有2W条数据,且B表的ID有索引. 方法一 使用not in,容易理解,效率低. selec ...

  2. 在 QML 中使用 C++ 类和对象

    Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ...

  3. gojs常用API-画布操作

    画布 获取当前画布的json myDiagram.model.toJson(); 加载json刷新画布 myDiagram.model = go.Model.fromJson(model); 删除选中 ...

  4. 怎么写自己的CMakeLists.txt--二

    之前写过一篇及其简单的关于CMakeLists.txt的写法,现在重点剖析find_package的用法. 如果程序中使用了外部库,事先并不知道它的头文件和链接库的位置,就要给出头文件和链接库的查找方 ...

  5. python利用ThreadPoolExecutor实现有任务异常,就终止线程池中的所有剩余任务

    先描述一下场景: 我有一批任务需要放入线程池中去处理,但是一旦线程池中有1个任务出现了异常(抛了Exception)就将线程中尚未开始的任务全部取消不执行. 需要说明的是正在执行的任务因为无法撤销,所 ...

  6. 【问题记录】ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    一.问题描述 环境:MySQL 8.0 + Windows 由于密码错误或者其他原因导致无法连上MySQL服务,如下图: 二.解决方案 解决该问题的具体步骤如下: 1.关闭MySQL服务 以管理员权限 ...

  7. iTextSharp生成pdf含模板(一)---制作pdf模板

    参考地址:https://www.cnblogs.com/ibeisha/p/itextsharp-pdf.html 一.使用场景:在线填写一些信息,根据对应的信息生成奖状. 二.解决方案 1.新建w ...

  8. 性能监控工具的配置及使用 - Spotlight On Oracle(oracle)

    一.    Spotlight On Oracle(oracle)1.1.   工具简介Spotlight是一个强有力的Oracle数据库实时性能诊断工具,提供了一个直观的.可视化的数据库活动展现.S ...

  9. 微服务架构 ------ 插曲 Mybatis逆向工程

    1.首先是pom.xml, 我们需要引入需要的mvn插件 <?xml version="1.0" encoding="UTF-8"?> <pr ...

  10. js中的原型,原型链和继承

    在传统的基于Class的语言如Java.C++中,继承的本质是扩展一个已有的Class,并生成新的Subclass. 由于这类语言严格区分类和实例,继承实际上是类型的扩展.但是,JavaScript最 ...