Spring Data的JDBC的作用是什么

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的作用是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。

发布于 2021-06-13 23:18:49
收藏
分享
海报
0 条评论
172
上一篇:Android中怎么适配刘海屏 下一篇:Java中怎么实现微信退款功能
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码