基于JPA获取查询中的单条记录

原创 2017年10月13日 16:23:40

引言:JPA与SpringData中提供了诸多非常便利的方法,这里以如何以不书写SQL的方式来实现单条记录的查询。

repositories.limit-query-result

这个标题为Spring Data提供了内置功能,这些查询方法需要使用first/top等关键词,这两个关键词是彼此可以替代的。
可选的数字值用以表示最大可以返回的记录条数,一般都是放在first/top的右边。

Example 15. Limiting the result size of a query with Top and First

User findFirstByOrderByLastnameAsc();
User findTopByOrderByAgeDesc();
Page queryFirst10ByLastname(String lastname, Pageable pageable);
Slice findTop3ByLastname(String lastname, Pageable pageable);
List findFirst10ByLastname(String lastname, Sort sort);
List findTop10ByLastname(String lastname, Pageable pageable);

其中也是支持Distinct关键词的,限定词也可以支持Optional之类的关键词。
参考资料: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.limit-query-result

程序示例

实体类:

@Entity
@Table(name="t_user")
@Data
@EqualsAndHashCode(callSuper=true)
public class UserEntity extends BaseEntity {
    @Column(name="pin_key")
    private String userKey;
    @Column(name="device_type")
    private String deviceType;

        @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "created_time")
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdTime;

    @Column(name = "updated_time")
    @Temporal(TemporalType.TIMESTAMP)

    @Version
    private long version;
}

Repository的代码:

@Repository
public interface UserRepository extends JpaRepository<UserEntity, Long> {
    public UserEntity findFirstByOrderByCreatedTimeDesc();
}

Service的示例代码:

@Slf4j
@Service
public class DemoService {
    @Autowired
    private UserRepository userRepo;

    .....
    public UserEntity getLatestUser() {
        return this.userRepo.findFirstByOrderByCreatedTimeDesc();
    }
}

Controller的代码示例:

@Slf4j
@RestController
public class TestController {
    @Autowired
    private DemoService demoService;

    @GetMapping("/test/user")
    public String getUser() {
        UserEntity user = this.userRepo.findFirstByOrderByCreatedTimeDesc();

       log.info("userInfo:" + ReflectionToStringBuilder.toString(user));
       return user.toString();
    }
}

然后直接在浏览器打开连接就可以直接访问。
其余相关的配置项由于篇幅所限,就不在一一的黏贴拷贝了。

总结

Spring Data提供了大量非常好用的缺省实现,对于开发者而言直接使用即可,从而可以提升开发效率,充分体现瑞士军刀的锋利与效率。

jpa一些查询方法

1.普通查询,根据字段查询结果集 /** * 根据订单序列号查询订单 * * @param serialNumber 序列号 * @return 订单 */ Orders findBySer...
  • shog808
  • shog808
  • 2017年02月03日 09:45
  • 2275

【JPA】JPQL查询 -- 小结

之前对JPA做过宏观性质的总结,也搭建成功了JSF +
  • u013047584
  • u013047584
  • 2017年06月10日 16:22
  • 778

关于JPA方法名创建自动查询

JPA 的根据解析方法名称自动对接口进行实现的方法能节省大量的资源,以下对于解析规则进行列举哈 商品实体类 package com.dionren.zhaoxie.entity.trade...
  • u011077231
  • u011077231
  • 2016年03月04日 16:39
  • 11280

JPA Query

4、       Query 查询是JPA中重要的内容,JPA中可以执行两种方式的查询,一种是使用JPQL,一种是使用NativeSQL。其中JPQL是基于Entity对象的查询,可以消除不同数据库...
  • sunshuolei
  • sunshuolei
  • 2015年08月27日 20:53
  • 8643

spring data jpa 利用@Query进行查询

介绍@Query注释之前,先看看怎么利用@NamedQuery进行命名查询1.现在实体类上定义方法已经具体查询语句@Entity @NamedQuery(name = "Task.findByTask...
  • yingxiake
  • yingxiake
  • 2016年03月30日 17:01
  • 43621

JPA中的集合查询示例

1、VisitInfo模型@Entity@Table(name = "System_VisitInfo")@Cache(usage=CacheConcurrencyStrategy.NONSTRICT...
  • easyjf
  • easyjf
  • 2008年06月22日 19:22
  • 6062

JPA的查询语言—使用原生SQL

ntityManager API 提供了创建 Query 实例以执行原生 SQL 语句的createNativeQuery方法。   实体User: [java] view plain...
  • maguanghui_2012
  • maguanghui_2012
  • 2017年03月18日 20:12
  • 1211

JPA 查询

1.查询所有信息 Query q = em.createQuery("select u from Userinfo u"); List list =q.getResultList(); 如果查询结果是...
  • DL88250
  • DL88250
  • 2008年12月31日 16:36
  • 1982

JPA查询

 1.查询所有信息Query q = em.createQuery("select u from Userinfo u");List list =q.getResultList();如果查询结果是多个...
  • dream8062
  • dream8062
  • 2009年11月17日 14:36
  • 441

一步一步学SpringDataJpa——JpaRepository查询功能

1.JpaRepository支持接口规范方法名查询。意思是如果在接口中定义的查询方法符合它的命名规则,就可以不用写实现,目前支持的关键字如下。 Keyword Sample J...
  • ming070423
  • ming070423
  • 2014年03月25日 18:47
  • 35964
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于JPA获取查询中的单条记录
举报原因:
原因补充:

(最多只允许输入30个字)