文档章节

spring-data-jpa

p2ng
 p2ng
发布于 2015/11/09 08:57
字数 592
阅读 232
收藏 5

####官网API

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/

####spring data jpa接口结构图

Repository:顶级接口,提供组建扫描
    -|CrudRepository:提供增删改查功能
        -|PagingAndSortingRepository:分页排序功能
            -|JpaRepository:增加批量操作功能
JpaSpecificationExecutor:复杂查询接口

Pageable:分页接口
    -|PageRequest:分页实现类

####基于Repository接口的条件查询,分页,排序

// 两个方式一致
@RepositoryDefinition(domainClass = Staff.class, idClass = Long.class) 
public interface StaffDao implements JpaRepository<Staff, Long>

// 基于方法名解析
findByName
select * from table t where t.name = ?

// 方法名构造方法
find + 全局修饰 + By + 实体属性名称 + 限定词 + 连接词 + ...(其他属性) + OrderBy + 排序属性 + 排序方向
全局修饰:Distinct(唯一)、Top(头多少条)、First(头多少条)
限定词:IsNull、IsNotNull、Like、NotLike、Containing(%?%)、in、NotIn、IgnoreCase、Between、Equals、LessThan、GreaterThan、After、Befor...
连接词:And、Or
排序方向:ASC、DESC

全局修饰:
// Enables the distinct flag for the query
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
User findFirstByOrderByLastnameAsc();
User findTopByOrderByAgeDesc();
Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);
Slice<User> findTop3ByLastname(String lastname, Pageable pageable);
List<User> findFirst10ByLastname(String lastname, Sort sort);
List<User> findTop10ByLastname(String lastname, Pageable pageable);

// 嵌套实体方法命名规则
构词法:主实体中子实体的名称 + _ + 子实体的属性名称
Ex:List<Person> findByAddress_ZipCode(ZipCode zipCode);
表示查询所有Address的zipCode为指定值的所有Person

// 分页
jpa中,repository方法传入new PageRequest(page, pageSize);

// 排序
List<Order> orders = new ArrayList<Order>();
Order order = new Order(Direction.ASC, "id");

jpa中,repository方法传入new Sort(Direction.ASC, "id");
new Sort(new Order());
new Sort(order);
new Sort(orders);

// JpaRepository直接使接口(计算字段isAudit为固定值的条数)
Long countByIsAudit(Integer isAudit);

####JpaSpecificationExecutor高级查询

findAll(new Specification<T>(){
    // Predicate查询条件,组合查询条件
    @Override
    public Predicate toPredicate(Root<T> root, CriteriaQuery<T> cq, CriteriaBuilder cb){
        // 查询名称中有"王"字的用户
        // 从root中获取字段,并进行数据类型转换
        Predicate nameLike = cb.like(root.get("name").as(String.class), "%王%");
        return nameLike;

        // 集合方式
        List<Predicate> predicateList = new ArrayList<Predicate>();
        PredicateList.add(cb.like(root.get("name").as(String.class), "%王%"));
        return cq.where(predicateList.toArray(new Predicate[predicateList.size()])).getRestriction();
    }
});

####基于Repository接口的方法注解查询@Query与@基于实体类上NamedQuery

// value可填JPQL或者nativeSQL
// nativeQuery = true 代表用原生态sql进行编译查询
@Query(value = "SELECT u FROM User t WHERE t.name = :name", nativeQuery = true)
List<User> findUserByName(@Param("name") String name);

// 实体类添加注解
@NamedQuery(name="findUserByName", query="SELECT u FROM User u WHERE u.name=:name")
@NamedQueries({
    // 这里可以多个@NamedQuery
})

// Dao实现类,注入EntityManager;
Query query = entityManager.createNameQuery("findUserByName");
query.setParameter("name", "隔壁老王");
List<User> list = query.getResulLlist();

####查询限定词

输入图片说明

输入图片说明

输入图片说明

© 著作权归作者所有

p2ng

p2ng

粉丝 49
博文 29
码字总数 13653
作品 0
广州
程序员
私信 提问
解决spring jpa中配置文件报'jpa:repositories'的问题

一、问题描述 使用spring jpa,报no declaration can be found for element 'jpa:repositories'错误的解决方案 Multiple annotations found at this line: - cvc-complex-type.2.4.c: The mat......

cloud-coder
2014/04/17
5K
1
下载最新springside jpa schema问题

xsi:schemaLocation="http://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsd“ 出现Description Resource Path Location Type Referenced file contains errors (http://www.s......

kennylixi
2012/08/09
600
3
Spring mvc 创建完项目测试的时候前台404,后台没有错误信息这是咋了

前天遇到一个问题,springmvc创建的项目测试的时候前台404,后台没有错误输出,奇了怪了...... 这是WEB-INF下的xml文件 SpringMVC05 index.html index.htm index.jsp default.html default....

好吧我输了
2018/06/19
244
3
(入门帖)使用 Spring Data JPA 简化 JPA 开发

本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例;接着重构该示例,并引入 Spring 框架,这两部分...

阿莱倪士
2014/01/09
668
0
No mapping found for HTTP request with URI [/demo/WEB-INF/view/index.html] in DispatcherServlet with name 'SpringMVC'

错误:[org.springframework.web.servlet.PageNotFound] - No mapping found for HTTP request with URI [/demo/WEB-INF/view/index.html] in DispatcherServlet with name 'SpringMVC' web.......

mhi
03/06
809
2

没有更多内容

加载失败,请刷新页面

加载更多

一、docker 入坑(win10和Ubuntu 安装)

前言 终究还是绕不过去了,要学的知识真的是太多了,好在我们还有时间,docker 之前只闻其声,不曾真正的接触过,现在docker 越来越火,很多公司也都开始使用了。所以对于我们程序员而言,又...

quellanan2
11分钟前
4
0
AutoCompleteTextView

小技巧按菜单键 当菜单打开之前会调用onMenuOpened(int featereId,Menu menu),可以重写这个方法,弹出对话框或者Popmenu 再布局中添加控件AutoCompleteTextView. <AutoCompleteTextVie...

逆天游云
14分钟前
4
0
谷歌软件商店:推出5美元会员 可用数百个软件

腾讯科技讯,谷歌和苹果是全球两大智能手机操作系统的运营者,两家公司旗下分别拥有占据行业垄断地位的谷歌软件商店和苹果软件商店。据外媒最新消息,手机软件商店的商业模式正在发生一些变化...

linuxCool
37分钟前
3
0
RocketMQ 多副本前置篇:初探raft协议

Raft协议是分布式领域解决一致性的又一著名协议,主要包含Leader选举、日志复制两个部分。 温馨提示: 本文根据raft官方给出的raft动画进行学习,其动画展示地址:http://thesecretlivesofda...

中间件兴趣圈
37分钟前
2
0
elasticsearch 6.8.0 添加认证

1. 修改elasticsearch-6.8.0/config/elasticsearch.yml 最后添加一行:xpack.security.enabled: true 2. 初始化用户和密码 ./bin/elasticsearch-setup-passwords interactive 我这里初始化为......

coord
39分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部