Spring Data之Hello World
1. 概述
- SpringData : 注意目标是使数据库的访问变得方便快捷;支持NoSQL和关系数据存储;
- 支持NoSQL存储:
- MongoDB(文档数据库)
- Neo4j(图形数据库)
- Redis(键/值存储)
- Hbase(列族数据库)
- 关系数据库存储:
- JDBC
- JPA
- 支持NoSQL存储:
2. Spring Data 入门程序 Hello World
2.1 使用 Spring Data JPA 进行持久层开发需要的四个步骤:
- 配置Spring整合JPA;
- 在Spring配置中配置Spring Data,让Spring为声明的接口创建代理对象;
- 声明持久层的接口,该接口继承Repository,Repository是一个标记型接口,它不包含任何方法,如果必要,
Spring Data 可实现Repository其他子接口,其中定义了一些常用的增删改查,以及分页相关的方法; - 在接口中声明需要的方法;
// Spring 配置文件 applicationContext.xml
<!-- 1. 配置数据源 -->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
</bean>
<!-- 2. 配置JPA 的 EntityManagerFactory -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
</property>
<property name="packagesToScan" value="com.noodles.springdata"></property>
<property name="jpaProperties">
<props>
<!-- 生成的数据表的列的映射策略 -->
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
<!-- hibernate 基本属性 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!-- 3. 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<!-- 4. 配置支持注解的事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 5. 配置SpringData -->
<!-- 加入JPA 的命名空间-->
<!-- base-package: 扫描Repository Bean 所在的package -->
<jpa:repositories base-package="com.noodles.springdata"
entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>
// db.properties
jdbc.username=root
jdbc.password=root
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///jpa
// com.noodles.springdata
// Person 类
@Table(name="JPA_PERSONS")
@Entity
public class Person{
private Integer id;
private String lastName;
private String email;
private Date birth;
@GeneratedValue
@Id
privte Integer getId(){
return id;
}
private void SetId(Integer id){
this.id = id;
}
...(省略getter和setter)
}
// PersonRepository.java(接口)
public interface PersonRepository extends Repository<Person, Integer>{
Person getByLastName(String lastName);
}
// 测试类com.noodles.springdata.test
// SpringDataTest
public class SpringDataTest{
private ApplicationContext ctx = null;
{
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
}
@Test
public void testHelloWorld(){
PersonRepository pr = ctx.getBean(PersonRepository.class);
Person person = pr.getByLastName("李四");
System.out.println(person);
}
}
参考资料: