我还是先搜索了一下 Spring Data 官方网站:
Spring Data http://projects.spring.io/spring-data/

说明:本笔记为学习了尚硅谷佟刚老师的《Spring Data 视频教程》所做。在此向佟刚老师表示感谢。

项目结构:
Spring Data 学习(1)—— HelloWorld_SpringData

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、编写实体类

Spring Data 学习(1)—— HelloWorld_hibernate_02

4、编写接口类

public interface PersonRepository extends Repository<Person, Integer> {
    // 根据 lastName 来获取对应的 Person
    Person getByLastName(String lastName);
}

Spring Data 学习(1)—— HelloWorld_xml_03

重要说明:这里我们不能使用别的方法名字。必须以 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);

    }
}

控制台打印:
Spring Data 学习(1)—— HelloWorld_xml_04