1。 pom 导入测试要用到的包
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.github.springtestdbunit</groupId> <artifactId>spring-test-dbunit</artifactId> <version>1.1.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.dbunit</groupId> <artifactId>dbunit</artifactId> <version>2.5.0</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>junit</artifactId> <groupId>junit</groupId> </exclusion> </exclusions> </dependency>
2. spring data for JPA 数据库配置代码
@Configuration @EnableTransactionManagement @EnableJpaRepositories(basePackages = "com.eifesun.monitor.db.repository") @PropertySource("classpath:application.properties") @EnableJpaAuditing public class PersistenceContext { protected static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver"; protected static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password"; protected static final String PROPERTY_NAME_DATABASE_URL = "db.url"; protected static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username"; private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect"; private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql"; private static final String PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO = "hibernate.hbm2ddl.auto"; private static final String PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY = "hibernate.ejb.naming_strategy"; private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql"; private static final String PROPERTY_PACKAGES_TO_SCAN = "com.eifesun.monitor.db.jpa"; private static final String CONVERT_PACKAGES_TO_SCAN = "org.springframework.data.jpa.convert.threeten"; @Autowired private Environment environment; @Bean public DataSource dataSource() { HikariConfig dataSourceConfig = new HikariConfig(); dataSourceConfig.setDriverClassName(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER)); dataSourceConfig.setJdbcUrl(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_URL)); dataSourceConfig.setUsername(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME)); dataSourceConfig.setPassword(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD)); return new HikariDataSource(dataSourceConfig); } @Bean public JpaTransactionManager transactionManager() { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); return transactionManager; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); entityManagerFactoryBean.setDataSource(dataSource()); entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); entityManagerFactoryBean.setPackagesToScan(PROPERTY_PACKAGES_TO_SCAN, CONVERT_PACKAGES_TO_SCAN); Properties jpaProperties = new Properties(); jpaProperties.put(PROPERTY_NAME_HIBERNATE_DIALECT, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT)); jpaProperties.put(PROPERTY_NAME_HIBERNATE_FORMAT_SQL, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL)); jpaProperties.put(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO)); jpaProperties.put(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY)); jpaProperties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL)); //jpaProperties.put("jadira.usertype.autoRegisterUserTypes", "true"); entityManagerFactoryBean.setJpaProperties(jpaProperties); entityManagerFactoryBean.setMappingResources("META-INF/orm.xml"); return entityManagerFactoryBean; }
注意:orm.xml
<?xml version="1.0" encoding="UTF-8"?> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd" version="2.0"> <persistence-unit-metadata> <persistence-unit-defaults> <entity-listeners> <entity-listener class="org.springframework.data.jpa.domain.support.AuditingEntityListener" /> </entity-listeners> </persistence-unit-defaults> </persistence-unit-metadata> </entity-mappings>
作用是为了使@createddate @version等spring annoation生效
3. 数据库的配置文件可以这样写,不同数据库有所不同
application.properties
#Database Configuration db.driver=org.h2.Driver db.url=jdbc:h2:mem:datajpa db.username=sa db.password= #Hibernate Configuration hibernate.dialect=org.hibernate.dialect.H2Dialect hibernate.hbm2ddl.auto=create-drop hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy hibernate.show_sql=false hibernate.format_sql=true
4. entity的写法很普通
@Entity @Table(name = "inverter") public class Inverter { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name = "client_id", nullable = false, length = 20) private String clientId; @Column(name = "record_time") @Temporal(TemporalType.TIMESTAMP) private Date recordTime; @Column(name = "output_power") private int outputPower; @Column(name = "output_energy") private int outputEnergy; @Column(name = "energy_total") private long energyTotal; @CreatedDate @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") private DateTime creationTime; }
5.repository 的写法也很普通
public interface InverterRepository extends Repository<Inverter, Long>{ List<Inverter> findByClientIdAndRecordTimeBetween(String inverterId, Date startTime, Date endTime); Inverter save(Inverter entity); }
6. 测试代码:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {PersistenceContext.class}) @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class, DbUnitTestExecutionListener.class }) @DatabaseSetup("inverterData.xml") public class InverterRepositoryTest { @Autowired private InverterRepository repository; @Test public void when_find_by_clientid_and_record_times_should_return_one() throws Exception { // when Date start = DateTime.now().withDate(2015, 5, 14).withTimeAtStartOfDay().toDate(); Date end = DateTime.now().withDate(2015, 5, 15).withTimeAtStartOfDay().toDate(); List<Inverter> inverters = repository.findByClientIdAndRecordTimeBetween("inverter1", start, end); // then assertThat(inverters.size(), is(1)); } @Test public void when_save_and_created_time_should_not_null() throws Exception { // given Inverter inverter = new Inverter(); inverter.setClientId("inverter2"); inverter.setEnergyTotal(1000); inverter.setOutputEnergy(200); inverter.setOutputPower(3000); inverter.setRecordTime(new Date()); // when Inverter inverter2 = repository.save(inverter); // then assertThat(inverter2.getCreationTime(), notNullValue()); } }
只要这样配置一下就可以使用操作数据库了,是不是很方便?
注意inverterData.xml里是表字段的信息
<dataset> <inverter id="1" client_id="inverter1" record_time="2015-05-14 15:55:32" output_power="100" output_energy="250" energy_total="345000"/> </dataset>
以上
相关推荐
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
Spring Data JPA中文文档1.4.3
'SpringDataJPA从入门到精通'分为12章 内容包括整体认识JPA、JPA基础查询方法、定义查询方法、注解式查询方法、@Entity实例里面常用注解详解、JpaRepository扩展详解、JPA的MVC扩展REST支持、DataSource的配置、乐观...
spring注解完整版+spring data jpa官方文档中文翻译+JPA2.0官方文档 文档内容齐全 值得参考学习
使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速开发迭代,可用于开发模板,项目经过测试,可完美运行! 使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速...
技术架构:SpringMVC3+Spring3.1.2+... 内涵sql和各种Spring Data JPA测试和案例,导入&创建DB,配置好maven便可运行 maven构建项目&问题:http://zhc3191012.blog.163.com/blog/static/18555337620140891133454/
spring data jpa最新版本1.8.0,包含了spring-data-jpa-1.8.0.RELEASE.jar,spring-data-jpa-1.8.0.RELEASE-javadoc.jar以及 spring-data-jpa-1.8.0.RELEASE-sources.jar文档和源代码
仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot...
NULL 博文链接:https://mixo44.iteye.com/blog/1797079
Spring Data JPA中文文档[1.4.3].zip
Spring Data JPA是Spring基于Hibernate开发的一个JPA框架。如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架...
3. 与Spring全家桶结合紧密: 4. 成熟的框架和架构 常⻅的SQL性能问题,如何优雅处理? 2. 错综复杂的关联关系如何应对? 3. 万恶的LazyException本质是什么? 4. ⾼并发⾼性能要求的API服务要⽤JPA吗?
Spring Data JPA Demo
maven工程下的springDataJpa测试demo,mysql数据库
基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的...
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封 装的一套 JPA 应用框架,可使开发者用极简的代码即可实现对数据库 的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩 展!学习并使用 ...
第一章:Spring Data JPA入门 包括:是什么、能干什么、有什么、HelloWorld等 第二章:JpaRepository基本功能 包括:代码示例JpaRepository提供的CRUD功能,还有翻页、排序等功能 第三章:JpaRepository的查询 ...
该案例使用SpringBoot 整合了SPringData JPA,使用SpringData 开发简化了Dao层的开发量,简化了数据访问,使得持久化更加简单 !
spring data jpa 的Specifications动态查询 单条件查询 多条件查询 分页查询