Fork me on GitHub

Spring Data之Hello World

1. 概述

  • SpringData : 注意目标是使数据库的访问变得方便快捷;支持NoSQL和关系数据存储;
    • 支持NoSQL存储:
      • MongoDB(文档数据库)
      • Neo4j(图形数据库)
      • Redis(键/值存储)
      • Hbase(列族数据库)
    • 关系数据库存储:
      • JDBC
      • JPA

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);
    }
}

参考资料:

posted @ 2018-06-10 18:20  小a的软件思考  阅读(218)  评论(0编辑  收藏  举报