Spring Data的JDBC的作用是什么
Spring Data的JDBC的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
首先,我们需要一个实体:
classCustomer{ @Id Longid; StringfirstName; LocalDatedob; }
请注意,不需要getter或setter。如果您意,可以增加。实际上,唯一的要求是实体有一个注释的属性Id(即@org.springframework.data.annotation.Id,注意不是javax.persistence,后者是JPA)。
接下来,我们需要声明一个存储库。最简单的方法是扩展CrudRepository:
interfaceCustomerRepositoryextendsCrudRepository<Customer,Long>{}
最后,我们需要配置ApplicationContext以启用存储库的创建:
@Configuration @EnableJdbcRepositories(1) publicclassCustomerConfigextendsJdbcConfiguration{(2) @Bean NamedParameterJdbcOperationsoperations(){(3) returnnewNamedParameterJdbcTemplate(dataSource()); } @Bean PlatformTransactionManagertransactionManager(){(4) returnnewDataSourceTransactionManager(dataSource()); } @Bean DataSourcedataSource(){(5) returnnewEmbeddedDatabaseBuilder() .generateUniqueName(true) .setType(EmbeddedDatabaseType.HSQL) .addScript("create-customer-schema.sql") .build(); } }
让我们一步一步地解释。
1. EnableJdbcRepositories可以创建存储库。由于它需要存在一些bean,我们需要其余的配置。
2. 继承扩展的JdbcConfiguration将一些默认bean添加到ApplicationContext。可以覆盖其方法以自定义Spring Data JDBC的某些行为。现在,我们使用默认实现。
3. 真正重要的部分是NamedParameterJdbcOperations,它在内部用于向数据库提交SQL语句。
4. 严格来说,事务管理器不是必需的。不支持跨越多个SQL语句的事务。
5. Spring Data JDBC没有直接使用DataSource,但是,由于TransactionManager和NamedParameterJdbcOperations需要,将DataSource注册为bean是一种确保两者使用相同实例的简单方法。
这就是一切。现在让我们测试玩玩:
@RunWith(SpringRunner.class) @Transactional @ContextConfiguration(classes=CustomerConfig.class) publicclassCustomerRepositoryTest{ @AutowiredCustomerRepositorycustomerRepo; @Test publicvoidcreateSimpleCustomer(){ Customercustomer=newCustomer(); customer.dob=LocalDate.of(1904,5,14); customer.firstName="Albert"; Customersaved=customerRepo.save(customer); assertThat(saved.id).isNotNull(); saved.firstName="HansAlbert"; customerRepo.save(saved); Optional<Customer>reloaded=customerRepo.findById(saved.id); assertThat(reloaded).isNotEmpty(); assertThat(reloaded.get().firstName).isEqualTo("HansAlbert"); } }
@Query 注解
你可能不会只使用基本的CRUD方法CrudRepository。可以使用简单的@Query注释来指定存储库方法的查询:
@Query("selectid,first_name,dobfromcustomerwhereupper(first_name)like'%'||upper(:name)||'%'") List<Customer>findByName(@Param("name")Stringname);
请注意,@Param如果使用-parameters标志进行编译,则不需要注释。
如果要执行更新或删除语句,可以使用@Modifying向方法添加注释。
让我们创建另一个测试以试用新方法。
@Test publicvoidfindByName(){ Customercustomer=newCustomer(); customer.dob=LocalDate.of(1904,5,14); customer.firstName="Albert"; Customersaved=customerRepo.save(customer); assertThat(saved.id).isNotNull(); customer.id=null;(1) customer.firstName="Bertram"; customerRepo.save(customer); customer.id=null; customer.firstName="Beth"; customerRepo.save(customer); assertThat(customerRepo.findByName("bert")).hasSize(2);(2)
关于Spring Data的JDBC的作用是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。
推荐阅读
-
Spring框架基于注解开发CRUD详解
-
spring DI依赖注入方式和区别有哪些
-
spring data jpa开启批量插入、批量更新的示例分析
-
spring中怎么利用FactoryBean配置Bean
这篇文章将为大家详细讲解有关spring中怎么利用FactoryBean配置Bean,文章内容质量较高,因此小编分享给大家做个参考...
-
如何解决解决Spring Boot正常启动后访问Controller提示404的问题
小编给大家分享一下如何解决解决SpringBoot正常启动后访问Controller提示404的问题,希望大家阅读完这篇文章之后...
-
Spring中怎么解决循环依赖问题
本篇文章给大家分享的是有关Spring中怎么解决循环依赖问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有...
-
Spring(aop,如何通过获取代理对象实现事务切换)
Spring,aop,如何通过获取代理对象实现事务切换,恰卡网带你了解更多相关信息。Springaop获取代理对象实现...
-
Spring(bean,四种注入方式详解)
Spring,bean,四种注入方式详解,恰卡网带你了解更多相关信息。目录一、Set方式注入pojo层:1.xml文件t...
-
Spring(Cloud,如何保证微服务内安全)
-
Spring(Cloud,Config,使用本地配置文件方式)