博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring使用内存数据库二
阅读量:6209 次
发布时间:2019-06-21

本文共 3548 字,大约阅读时间需要 11 分钟。

  在上篇《》中我们使用Hibernate作为ORM的框架,直接调用Hibernate的API进行相关的持久化操作,但在实际项目中,可能会由于公司规定等原因要求统一使用JPA接口来进行持久化,而JPA的实现可以灵活配置,避免对第三方JPA实现的过分依赖,这样可能会牺牲第三方JPA实现带来的一些额外优化和特性,但确实避免了对其依赖,本文将更改《》Demo的实现,使其使用JPA标准接口进行持久化操作,而JPA实现可以配置为Hibernate或EclipseLink支持。

  第一步:将HibernateConfiguration类修改为JpaConfiguration类

1 @Configuration 2 public class JpaConfiguration { 3     @Autowired 4     private DataSource dataSource; 5     @Bean 6     public Map
jpaProperties() { 7 Map
props = new HashMap
(); 8 //Hibernate JPA properties 9 10 /*props.put("hibernate.dialect", H2Dialect.class.getName());11 props.put("hibernate.cache.provider_class", HashtableCacheProvider.class.getName());*/12 13 //EclipseLink JPA properties14 15 props.put("eclipselink.weaving", "false"); 16 17 return props;18 }19 @Bean20 public JpaVendorAdapter jpaVendorAdapter() { 21 //Hibernate JPA Vendor Adapter22 /*AbstractJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();*/23 24 //EclipseLink JPA Vendor Adapter25 AbstractJpaVendorAdapter jpaVendorAdapter = new EclipseLinkJpaVendorAdapter();26 27 //Common vendor settings28 jpaVendorAdapter.setShowSql(false);29 jpaVendorAdapter.setGenerateDdl(true);30 jpaVendorAdapter.setDatabase(Database.H2);//指定数据库为 H231 32 return jpaVendorAdapter; 33 }34 @Bean35 public PlatformTransactionManager transactionManager() {36 return new JpaTransactionManager( localContainerEntityManagerFactoryBean().getObject() );37 }38 @Bean39 public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean() {40 LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();41 lef.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());42 lef.setDataSource(this.dataSource);43 lef.setJpaPropertyMap(this.jpaProperties());44 lef.setJpaVendorAdapter(this.jpaVendorAdapter());45 return lef;46 }47 48 /**49 * 设置数据源,可以指定类型为Derby或HSQLDB50 * @return51 */52 @Bean53 public DataSource dataSource(){54 EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();55 builder.setType(EmbeddedDatabaseType.H2);56 return builder.build();57 }58 }

  第二步:修改OrderPersistenceTests类

  将org.hibernate.Session类的API操作修改为javax.persistence.EntityManager类的API

  org.hibernate.Session类的API代码示例:

1 @Autowired 2     private SessionFactory sessionFactory; 3     @Test 4     @Transactional 5     public void testSaveOrderWithItems() throws Exception { 6         Session session = sessionFactory.getCurrentSession(); 7         Order order = new Order(); 8         order.getItems().add(new Item()); 9         session.save(order);10         session.flush();11         assertNotNull(order.getId());12     }

  javax.persistence.EntityManager类的API代码示例:

1 @PersistenceContext 2     private EntityManager entityManager; 3     @Test 4     @Transactional 5     public void testSaveOrderWithItems() throws Exception { 6         Order order = new Order(); 7         order.getItems().add(new Item()); 8         entityManager.persist(order); 9         entityManager.flush();10         assertNotNull(order.getId());11     }

  第三步:修改Maven依赖

  修改完成,可以开始运行测试用例进行调试!总感觉EclipseLink是个半成品,不是很好使,甲骨文公司还是希望Everybody使用TopLink!

 

 

转载地址:http://lszja.baihongyu.com/

你可能感兴趣的文章
android studio :cannot resolve symbol R
查看>>
paper 20 :color moments
查看>>
代码大全
查看>>
博客园作业4--数组
查看>>
DataTable.ImportRow()与DataTable.Rows.Add()的区别
查看>>
程序集、应用程序配置及App.config和YourSoft.exe.config .
查看>>
二叉树的基本操作及应用(三)
查看>>
A SimpleDataStore
查看>>
朱晔和你聊Spring系列S1E3:Spring咖啡罐里的豆子
查看>>
IOS CALayer的属性和使用
查看>>
温故而知新:柯里化 与 bind() 的认知
查看>>
查看修改swap空间大小
查看>>
Django REST framework
查看>>
CSS 如何让Table的里面TD全有边框 而Table的右左边框没有
查看>>
如何让帝国CMS7.2搜索模板支持动态标签调用
查看>>
apache 虚拟主机详细配置:http.conf配置详解
查看>>
BABOK - 开篇:业务分析知识体系介绍
查看>>
Java入门系列-22-IO流
查看>>
Template、ItemsPanel、ItemContainerStyle、ItemTemplate
查看>>
MySQL:Innodb page clean 线程 (二) :解析
查看>>