Spring Data JDBC介绍及实现代码介绍及实现代码
主要介绍了Spring Data JDBC介绍及实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一
起跟随小编过来看看吧
Spring新增了一个新的数据模块:Spring Data JDBC。Spring Data JDBC背后的想法是提供对关系数据库的访问,而无需处
理JPA的复杂性。JPA提供延迟加载,缓存和脏跟踪等功能。果你需要这些功能会很很棒,但会让猜测JPA的行为比非JPA更
难。
延迟加载可能会在你不需要时触发昂贵的语句,或者它可能会因异常而失败。当你想要比较一个实体的两个版本是哪个变成脏
数据时,缓存可能会妨碍你,让你很难找到所有持久性操作都通过的那个点。
Spring Data JDBC目标是实现更简单的模型,不会有缓存,脏数据跟踪或延迟加载。相反,只有在调用数据库方法时才会发
出SQL语句。方法返回的对象会完全加载,不会有延迟。实体没有“会话”和代理。所有这些都应该使Spring Data JDBC更易于
推理。
当然,这种更简单的方法会导致约束。
我们来看一个简单的例子。
首先,我们需要一个实体:
class Customer {
@Id
Long id;
String firstName;
LocalDate dob;
}
请注意,不需要getter或setter。如果您意,可以增加。实际上,唯一的要求是实体有一个注释的属性Id(即
@org.springframework.data.annotation.Id,注意不是javax.persistence,后者是JPA)。
接下来,我们需要声明一个存储库。最简单的方法是扩展CrudRepository:
interface CustomerRepository extends CrudRepository<Customer, Long> {}
最后,我们需要配置ApplicationContext以启用存储库的创建:
@Configuration
@EnableJdbcRepositories (1)
public class CustomerConfig extends JdbcConfiguration { (2)
@Bean
NamedParameterJdbcOperations operations() { (3)
return new NamedParameterJdbcTemplate(dataSource());
}
@Bean
PlatformTransactionManager transactionManager() { (4)
return new DataSourceTransactionManager(dataSource());
}
@Bean
DataSource dataSource(){ (5)
return new EmbeddedDatabaseBuilder()
.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需要,
评论0
最新资源