我还是先搜索了一下 Spring Data 官方网站:
Spring Data http://projects.spring.io/spring-data/
说明:本笔记为学习了尚硅谷佟刚老师的《Spring Data 视频教程》所做。在此向佟刚老师表示感谢。
项目结构:
1、添加依赖
(1)Spring 所有 jar 包
(2)hibernate 的 required
(3)jpa(在 Hibernate 下载的包中)
(4)加入 Spring Data 的 jar 包
spring-data-commons-1.6.2.RELEASE.jar
spring-data-jpa-1.4.2.RELEASE.jar
(5)c3p0(在 Hibernate 下载的包中)
(6)mysql
(7)slf4j (在后面代码运行的时候,控制台会提示你缺少该 jar 包)
2、编写 Spring 的核心配置文件
步骤:
(1)配置数据源(Druid 或者 c3p0 都行)
(2)配置 JPA 的 EntityManagerFactory
(3)配置事务管理器
(4)配置支持注解的事务
(5)配置 SpringData
具体步骤:
(1)配置数据源(Druid 或者 c3p0 都行)
<context:property-placeholder location="db.properties"/>
<!-- 1、配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<!-- 这里还可以配置 c3p0 的其它属性 -->
</bean>
(2)配置 JPA 的 EntityManagerFactory
说明:这里我们注释了二级缓存的相关配置。
<!-- 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.liwei.springdata"></property>
<property name="jpaProperties">
<props>
<!-- 二级缓存相关 -->
<!--
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<prop key="net.sf.ehcache.configurationResourceName">ehcache-hibernate.xml</prop>
-->
<!-- 生成的数据表的列的映射策略 -->
<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)配置事务管理器
<!-- 3、配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
(4)配置支持注解的事务
<!-- 4、配置支持注解的事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
(5)配置 SpringData
<!-- 5、配置 SpringData -->
<!-- 加入 jpa 的命名空间 -->
<jpa:repositories base-package="com.liwei.springdata.repository"
entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>
3、编写实体类
4、编写接口类
public interface PersonRepository extends Repository<Person, Integer> {
// 根据 lastName 来获取对应的 Person
Person getByLastName(String lastName);
}
重要说明:这里我们不能使用别的方法名字。必须以 get 开头,by 是固定写法(拼接成方法名的时候首字母大写),表示一个连接词,lastName 是 Person 类的一个属性(拼接成方法名的时候首字母大写)。
5、编写测试方法
public class DataSourceTest {
private ApplicationContext ctx;
private PersonRepository personRepository;
{
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
personRepository = ctx.getBean(PersonRepository.class);
}
@Test
public void testDataSource(){
DataSource dataSource = (DataSource) ctx.getBean("dataSource");
System.out.println(dataSource);
}
@Test
public void testJPA(){
}
@Test
public void testHelloWorldSpringData() {
System.out.println(personRepository.getClass().getName());
Person person = personRepository.getByLastName("liwei");
System.out.println(person);
}
}
控制台打印: