Spring Data JPA 使用
2013-06-21 14:39
543 查看
1,Spring 使用JPA
(1),实体类
@Entity @Table(name = "ss_user") public class User extends IdEntity { private String loginName; private String plainPassword; private String password; 。。。 //getter /setter }
(2),业务层
@Service public class AccountService { @Autowired private UserDao userDao; @Transactional public void saveUser(User user){ userDao.save(user); } 。。。。 }
(3),持久层实现
@Repository("userDao") public class UserDaoImpl implements UserDao { @PersistenceContext private EntityManager em; @Transactional public Long saveUser(User user) { em.persist(user); return user.getId(); } }
(4),配置文件
<!-- Jpa Entity Manager 配置 --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter" /> <property name="packagesToScan" value="com.blueinfo.jee.entity" /> <property name="jpaProperties"> <props> <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory </prop> <prop key="net.sf.ehcache.configurationResourceName">cache/ehcache-hibernate-local.xml</prop> <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> <bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="database" value="POSTGRESQL" /> </bean> <!-- 事务管理器配置, Jpa单数据源事务 --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean>
(5),在web中使用,假设使用springmvc:
@Controller public class LoginController { @Autowired private AccountService accountService; @RequestMapping(value = "/login", method = RequestMethod.POST) public String login( User user, Model model) { accountService.saveUser(user); return "login"; } }
可以发现 Spring 对 JPA 的简化已经非常出色了,我们可以大致总结一下 Spring 框架对 JPA 提供的支持主要体现在如下几个方面:
首先,它使得 JPA 配置变得更加灵活。JPA 规范要求,配置文件必须命名为 persistence.xml,并存在于类路径下的 META-INF 目录中。该文件通常包含了初始化 JPA 引擎所需的全部信息。Spring 提供的 LocalContainerEntityManagerFactoryBean 提供了非常灵活的配置,persistence.xml 中的信息都可以在此以属性注入的方式提供。
其次,Spring 实现了部分在 EJB 容器环境下才具有的功能,比如对 @PersistenceContext、@PersistenceUnit 的容器注入支持。
第三,也是最具意义的,Spring 将 EntityManager 的创建与销毁、事务管理等代码抽取出来,并由其统一管理,开发者不需要关心这些,如前面的代码所示,业务方法中只剩下操作领域对象的代码,事务管理和 EntityManager 创建、销毁的代码都不再需要开发者关心了。
2,使用Spring data jpa
Spring Data JPA 框架,主要针对的就是 Spring 唯一没有简化到的业务逻辑代码,开发者连仅剩的实现持久层业务逻辑的工作都省了,唯一要做的,就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成。
使用方法:
1),添加Spring data jpa 发布包,可以从spring官网:http://www.springsource.org/spring-data/jpa 下载
2)在配置文件(上文中已配置好spring jpa)中添加配置
<!-- Spring Data Jpa配置, 扫描base-package下所有继承于Repository<T,ID>的接口 --> <jpa:repositories base-package="com.blueinfo.jee.reposity.jpa" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory" />
3),修改持久层
public interface UserDao extends Repository<User, Long> { public AccountInfo save(User user); // 你需要做的,仅仅是新增如下一行方法声明 public User findByAccountId(Long userId); }
不用写具体实现,配置了 <jpa:repositories> 后,Spring 初始化容器时将会扫描 base-package 指定的包目录及其子目录,为继承 Repository 或其子接口的接口创建代理对象,并将代理对象注册为 Spring
Bean,业务层便可以通过 Spring 自动封装的特性来直接使用该对象。其他代码同样使用。
相关文章推荐
- 在 Spring Data Jpa 中使用逻辑删除需做的工作
- Spring boot中使用Spring-data-jpa方便快捷的访问数据库(推荐)
- spring data jpa使用二级缓存
- Spring data JPA中使用Specifications动态构建查询
- 使用 Spring Data JPA 简化 JPA 开发
- Spring Data JPA使用JpaRepository自动装配报No qualifying bean of type错误
- 【jpa】spring data jpa 配置使用
- springboot(五):spring data jpa的使用
- 深入学习spring-boot系列(二)--使用spring-data-jpa
- 使用SpecificationBuilder简化Spring Data Jpa的动态查询
- Spring Data Jpa 使用@Query标注自定义查询语句
- 在Spring Boot中使用Spring-data-jpa实现分页查询
- 使用 Spring Data JPA 简化 JPA 开发
- Spring Data Jpa Mysql使用utf8mb4编码
- Spring Data JPA 初使用
- spring-data-jpa的使用
- Spring Boot中使用Spring-data-jpa
- 使用 Spring Data JPA 简化 JPA 开发
- 在spring data jpa中使用redis的通用list及entity存储方法
- Spring Boot中使用Spring-data-jpa