zoukankan      html  css  js  c++  java
  • 学习Spring-Data-Jpa(九)---注解式方法查询之@NamedQuery、@NamedNativeQuery

    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
  • 相关阅读:
    冲刺第二天4-25
    个人任务记录
    冲刺第一天
    每日站立会议4-20(张硕)
    每日站立会议4-19
    每日站立会议4-17(张硕)
    每日站立会议 4-16(蔡迎盈编写)
    每日站立会议 4-15(张硕编写)
    每日站立会议 4-12(张硕编写)
    继Spring 会议个人计划统计(补)
  • 原文地址:https://www.cnblogs.com/caofanqi/p/11863594.html
Copyright © 2011-2022 走看看