spring-boot-starter-data-jpa 中的 Eaxmple 如何使用

本文只简单介绍精确匹配(sql中 ‘where ** = **‘)、字符串搜索(sql中‘where ** like %name%‘)。

如果需要更多高级应用,可以参考spring jpa官方示例,传送门

一.准备工作

1.创建一个标准的spring boot jpa程序,并配置数据库连接

pom.xml

...

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

...

2.实体类 User.java

...
@Entity
public class User {

    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    private Short type;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", type=" + type +
                ‘}‘;
    }
//... setter / getter..
}

3.Repository UserRepository.java

...
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Integer> {}

二.测试程序 UserService.java ,运行 Application 即可看到结果

@Component
@Transactional
public class UserService {

    private final UserRepository userRepository;

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;

        //初始化数据
        init();

        //测试查新
        printAll("通过 Example 精确查找数据", queryByExample());
        printAll("通过 Example 字符串匹配", queryByExampleMatcher());
    }

    Collection<User> queryByExample() {
        User user = new User();
        user.setType((short) 1);

        Example<User> userExample = Example.of(user);

        return userRepository.findAll(userExample);

    }

    Collection<User> queryByExampleMatcher() {

        User user = new User();
        user.setName("10010");

        Example<User> userExample = Example.of(user, ExampleMatcher.matching().withMatcher("name",
                /*startsWith -> 10010%
                * endsWith -> %10010
                * contains -> %10010%
                * */
                ExampleMatcher.GenericPropertyMatchers.startsWith()));

        return userRepository.findAll(userExample);
    }

    void printAll(String pre, Collection<User> userIterator) {
        logger.info("遍历 用户列表 {}", pre);

        for (User u : userIterator) {
            logger.info(u.toString());
        }
    }

    void init() {
        for (int i = 0; i < 443; i++) {
            userRepository.save(new User(("100" + i + "00111" + i), (short) (i % 3)));
        }
    }

}
时间: 2024-10-12 16:08:30

spring-boot-starter-data-jpa 中的 Eaxmple 如何使用的相关文章

Spring data JPA中使用Specifications动态构建查询

有时我们在查询某个实体的时候,给定的条件是不固定的,这是我们就需要动态 构建相应的查询语句,在JPA2.0中我们可以通过Criteria接口查询,JPA criteria查询.相比JPQL,其优势是类型安全,更加的面向对象.而在Spring data JPA中相应的接口是JpaSpecificationExecutor,这个接口基本是围绕着Specification接口来定义的. Specification接口中只定义了如下一个方法: Predicate toPredicate(Root<T>

Spring Boot(3)---自定义spring boot starter 问题

1. "Failed to process import candidates for configuration class [com.simple.....]": 主要原因: 是因为自己定制的starter在打包时(package)用了spring-boot-maven-plugin,即在你的定制starter工程的pom.xml中有如下配置: <build> <plugins> <plugin> <groupId>org.sprin

Spring Boot Starter列表

转自:http://blog.sina.com.cn/s/blog_798f713f0102wiy5.html Spring Boot Starter 基本的一共有43种,具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring-boot-starter-amqp 通过spring-rabbit来支持AMQP协议(Advanced Message Queuing Protocol). 3)spring-bo

手把手教你定制标准Spring Boot starter,真的很清晰

写在前面 我们每次构建一个 Spring 应用程序时,我们都不希望从头开始实现具有「横切关注点」的内容:相反,我们希望一次性实现这些功能,并根据需要将它们包含到任何我们要构建的应用程序中 横切关注点 横切关注点: 指的是一些具有横越多个模块的行为 (来自维基百科的介绍) 说白了就是多个项目或模块都可以用到的内容,比如一个 SDK 在Spring Boot中,用于表示提供这种横切关注点的模块的术语是 starter,通过依赖 starter 可以轻松使用其包含的一些功能特性,无论你的工作中是否会构

基于Spring Boot,使用JPA动态调用Sql查询数据

在<基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD>,<基于Spring Boot,使用JPA调用Sql Server数据库的存储过程并返回记录集合>完成了CRUD,调用存储过程查询数据. 很多复杂的情况下,会存在要直接执行SQL来获取数据. 通过“EntityManager”创建NativeQuery方法来执行动态SQL. 1.查询结果集映射 在包“com.kxh.example.demo.domain”下的“Contact”实体上编写命名的结果

自定义的Spring Boot starter如何设置自动配置注解

本文首发于个人网站:自定义的Spring Boot starter如何设置自动配置注解 在Spring Boot实战之定制自己的starter一文最后提到,触发Spring Boot的配置过程有两种方法: spring.factories:由Spring Boot触发探测classpath目录下的类,进行自动配置: @Enable:有时需要由starter的用户触发*查找自动配置文件的过程. 实战 接着上篇文章的例子,首先将spring.factories中的内容注释掉 #org.springf

Spring data jpa中Query和@Query分别返回map结果集

引用: http://blog.csdn.net/yingxiake/article/details/51016234 http://blog.csdn.net/yingxiake/article/details/51016234 http://www.cnblogs.com/zj0208/p/6008627.html Query的使用: 在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句. 但当我们查询结果没有对应实体类时,

Spring Data JPA中踩过的坑

说老实话,Spring Data JPA很好用,上次使用还是2013年,当时只是完成Java Bean和数据库中表的映射. 最近想起来用Spring Data JPA的起因是手头有一个项目,源代码是用原生SQL+JDBC实现的,在第一次部署时要初始化数据库,还hardcode了很多数据库配置参数.正好最近有空,就打算用Spring Boot Data JPA(spring-boot-starter-data-jpa)改造一下,仔细看了一下源代码发现和几年前已经天差地别,如果你的业务逻辑不是特别复

Spring Data JPA 中使用Update Query更新实体类问题

在jpa中使用@Modifying 虽然事务已经能够更新,但是在循环更新的时候,执行modify语句后的查询的实体仍然是没有更新的. 执行完modifying query, EntityManager可能会包含过时的数据,因为EntityManager不会自动清除实体.只有添加clearAutomatically属性,EntityManager才会自动清除实体对象. @Modifying(clearAutomatically = true)

基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD

完成一个RESTful服务,提供几个访问接口,用来操作较简单的联系人信息,数据保存在Sql Server数据库中. 1.使用STS创建工程. 使用STS创建RESTful工程,可以参考: <用Spring Tools Suite(STS)开始一个RESTful Web Service><SpringBoot构建RESTful service完成Get和Post> 新建项目时的Project Name,Group,Atifact,Package这些参数按照实际要求填. 项目引入依赖w