基于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提供了大量非常好用的缺省实现,对于开发者而言直接使用即可,从而可以提升开发效率,充分体现瑞士军刀的锋利与效率。

相关文章推荐

spring data jpa 利用@Query进行查询

介绍@Query注释之前,先看看怎么利用@NamedQuery进行命名查询1.现在实体类上定义方法已经具体查询语句@Entity @NamedQuery(name = "Task.findByTask...

spring data jpa 查询部分属性

两个方法:1、使用自定义的sql查询;2、封装一个类用于输出。Dao:@Service public class OperatorServiceImpl implements OperatorServ...
  • wyljz
  • wyljz
  • 2016年09月26日 15:07
  • 5045

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

1.JpaRepository支持接口规范方法名查询。意思是如果在接口中定义的查询方法符合它的命名规则,就可以不用写实现,目前支持的关键字如下。 Keyword Sample J...

jpa查询所有的记录

public interface JpaSpecificationExecutor { /** * Returns a single entity matching the giv...

spring-data-jpa 多条件查询 学习记录

spring-data-jpa 是对数据库访问的简化的封装,可以帮助我们更加方便的实现对数据库的各种操作。Spring Data JPA 规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻...

SpringDataJPA学习记录(二)--增删改查

SpringDataJPA学习记录(二)–增删改查标签(空格分隔): springJPA环境配置后,开始增删改查,查是用的最多的,放在最后.1.增加增加可以使用JpaRepository接口里面的sa...

spring data jpa 创建方法名进行简单查询

spring data jpa 可以通过在接口中按照规定语法创建一个方法进行查询,spring data jpa 基础接口中,如CrudRepository中findOne,save,delete等,...

JFinal 开发实践记录

1.通过@ActionKey配置的请求所有的Controller类需要在JFinalConfig继承类的configRoute中进行配置,否则访问不到,但也不报404错误。...

spring-data-jpa只查询实体部分字段的情况

不论是nativequery还是hql的query,都可以指定需要查询的字段,只是必须定义这些字段所对应的实体,而且需要一个构造函数,构造函数的参数就是查询的字段列表。 举个栗子 @Entity @T...

单条记录查询接口

  • 2014年08月20日 18:45
  • 533KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于JPA获取查询中的单条记录
举报原因:
原因补充:

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