- 在线文档
- 项目结构
1.源码克隆:git clone https://github.com/spring-guides/gs-accessing-data-jpa.git 2.包含两个项目initial和complete,initial可以根据文档练习完善,complete是完整项目 3.功能描述:构建应用程序,使用 Spring Data JPA 在关系数据库中存储和检索数据
-
源码分析
1.POM依赖 <dependencies> <!--https://blog.csdn.net/tongxin_tongmeng/article/details/128586690--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
2.POJO类 @Entity public class Customer { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String firstName; private String lastName; protected Customer() {} public Customer(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } @Override public String toString() { return String.format( "Customer[id=%d, firstName='%s', lastName='%s']", id, firstName, lastName); } public Long getId() { return id; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } }
3.接口类 public interface CustomerRepository extends CrudRepository<Customer, Long> { List<Customer> findByLastName(String lastName); Customer findById(long id); }
4.测试类 /** *这是一个 Java 程序的主类。它使用 Spring Boot 应用程序注解(@SpringBootApplication)标记,表示这是一个 Spring Boot 应用程序。 * * 主方法是程序的入口点,在这里调用了 SpringApplication.run() 方法来启动应用程序。 * * 此外,还定义了一个名为 "demo" 的 Bean,类型为 CommandLineRunner。它会在应用程序启动后立即执行。 * * 在 demo 方法中,使用了一个 CustomerRepository 接口的实例来保存几个 Customer 对象,并使用日志打印出所有保存的 Customer 对象。 * * CustomerRepository 接口是由 Spring Data JPA 自动生成的,它继承自 CrudRepository 接口,提供了常用的数据访问操作。 * * 具体来说,它提供了以下方法: * * save():保存单个对象 * findAll():查询所有对象 * findById():根据 id 查询单个对象 * findByLastName():根据 lastName 查询多个对象 * 在 demo 方法中,还使用了 Java 8 的新特性——Lambda 表达式。在 repository.findByLastName("Bauer") 之后,使用 forEach() 方法遍历查询结果,并使用 Lambda 表达式打印每个结果。 */ // https://blog.csdn.net/tongxin_tongmeng/article/details/128401278 @SpringBootApplication public class AccessingDataJpaApplication { private static final Logger log = LoggerFactory.getLogger(AccessingDataJpaApplication.class); public static void main(String[] args) { SpringApplication.run(AccessingDataJpaApplication.class); } @Bean public CommandLineRunner demo(CustomerRepository repository) { return (args) -> { // save a few customers repository.save(new Customer("Jack", "Bauer")); repository.save(new Customer("Chloe", "O'Brian")); repository.save(new Customer("Kim", "Bauer")); repository.save(new Customer("David", "Palmer")); repository.save(new Customer("Michelle", "Dessler")); // fetch all customers log.info("Customers found with findAll():"); log.info("-------------------------------"); for (Customer customer : repository.findAll()) { log.info(customer.toString()); } log.info(""); // fetch an individual customer by ID Customer customer = repository.findById(1L); log.info("Customer found with findById(1L):"); log.info("--------------------------------"); log.info(customer.toString()); log.info(""); // fetch customers by last name log.info("Customer found with findByLastName('Bauer'):"); log.info("--------------------------------------------"); repository.findByLastName("Bauer").forEach(bauer -> { log.info(bauer.toString()); }); // for (Customer bauer : repository.findByLastName("Bauer")) { // log.info(bauer.toString()); // } log.info(""); }; } }
- 项目演示