Spring jpa

Jpa技术在javaEE5后出现
目前比较成熟的 JPA 框架主要包括 Jboss 的 Hibernate EntityManager、Oracle 捐献给 Eclipse 社区的 EclipseLink、Apache 的 OpenJPA 等。

Jpa的标准配置文件

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 
<persistence-unit name="SimplePU" transaction-type="RESOURCE_LOCAL"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<class>footmark.springdata.jpa.domain.UserInfo</class> 
<class>footmark.springdata.jpa.domain.AccountInfo</class> 
<properties> 
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver"/> 
<property name="hibernate.connection.url"
value="jdbc:mysql://10.40.74.197:3306/zhangjp"/> 
<property name="hibernate.connection.username" value="root"/> 
<property name="hibernate.connection.password" value="root"/> 
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQL5Dialect"/> 
<property name="hibernate.show_sql" value="true"/> 
<property name="hibernate.format_sql" value="true"/> 
<property name="hibernate.use_sql_comments" value="false"/> 
<property name="hibernate.hbm2ddl.auto" value="update"/> 
</properties> 
</persistence-unit> 
</persistence>

分析一下Spring对JPA的支持

我们可以大致总结一下 Spring 框架对 JPA 提供的支持主要体现在如下几个方面:

   首先,它使得 JPA 配置变得更加灵活。
    JPA 规范要求,配置文件必须命名为 persistence.xml,并存在于类路径下的 META-INF 目录中。
    该文件通常包含了初始化 JPA 引擎所需的全部信息。
    Spring 提供的 LocalContainerEntityManagerFactoryBean 提供了非常灵活的配置,persistence.xml 中的信息都可以在此以属性注入的方式提供。

    其次,Spring 实现了部分在 EJB 容器环境下才具有的功能,
    比如对 @PersistenceContext、@PersistenceUnit 的容器注入支持。

    第三,也是最具意义的,Spring 将 EntityManager 的创建与销毁、
    事务管理等代码抽取出来,并由其统一管理,开发者不需要关心这些,
    如前面的代码所示,业务方法中只剩下操作领域对象的代码,

Spring 对 JPA 的支持已经非常强大,开发者只需关心核心业务逻辑的实现代码,无需过多关注 EntityManager 的创建、事务处理等 JPA 相关的处理,这基本上也是作为一个开发框架而言所能做到的极限了。

于最近推出了 Spring Data JPA 框架,主要针对的就是 Spring 唯一没有简化到的业务逻辑代码,至此,开发者连仅剩的实现持久层业务逻辑的工作都省了,唯一要做的,就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!

框架怎么可能代替开发者实现业务逻辑呢?
毕竟,每一个应用的持久层业务甚至领域对象都不尽相同,框架是怎么做到的呢?
其实这背后的思想并不复杂,比如,
当你看到 UserDao.findUserById() 这样一个方法声明,大致应该能判断出这是根据给定条件的 ID 查询出满足条件的 User 对象。
Spring Data JPA 做的便是规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑。

关键接口

Repository 接口。该接口使用了泛型,需要为其提供两个类型:第一个为该接口处理的域对象类型,第二个为该域对象的主键类型。

框架会为我们完成业务逻辑。
如果是spring项目添加如下配置

<-- 需要在 <beans> 标签中增加对 jpa 命名空间的引用 --> 
<jpa:repositories base-package="footmark.springdata.jpa.dao"
entity-manager-factory-ref="entityManagerFactory"
transaction-manager-ref="transactionManager"/>

如果要再增加新的持久层业务,接口中增加一行代码即可 必须遵循规范

下面总结一下使用 Spring Data JPA 进行持久层开发大致需要的三个
声明持久层的接口,该接口继承 Repository,
Repository 是一个标记型接口,它不包含任何方法,当然如果有需要,
Spring Data 也提供了若干 Repository 子接口,其中定义了一些常用的增删改查,以及分页相关的方法。
在接口中声明需要的业务方法。
Spring Data 将根据给定的策略(具体策略稍后讲解)来为其生成实现代码。
在 Spring 配置文件中增加一行声明,让 Spring 为声明的接口创建代理对象。
配置了 <jpa:repositories> 后,Spring 初始化容器时将会扫描 base-package 指定的包目录及其子目录,为继承 Repository 或其子接口的接口创建代理对象,并将代理对象注册为 Spring Bean,业务层便可以通过 Spring 自动封装的特性来直接使用该对象。
此外,<jpa:repository> 还提供了一些属性和子标签,便于做更细粒度的控制。可以在 <jpa:repository> 内部使用 <context:include-filter>、<context:exclude-filter> 来过滤掉一些不希望被扫描到的接口。
它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法。
与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。如下两种方式是完全等价的:

public interface UserDao extends Repository

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值