ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

学习Spring-Data-Jpa(九)---注解式方法查询之@NamedQuery、@NamedNativeQuery

2019-11-14 23:57:22  阅读:685  来源: 互联网

标签:Category category name Jpa Spring NamedNativeQuery NamedQuery Data categoryName


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

标签:Category,category,name,Jpa,Spring,NamedNativeQuery,NamedQuery,Data,categoryName
来源: https://www.cnblogs.com/caofanqi/p/11863594.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有