SpringData的Helloword

1.加入jar包antlr-2.7.7.jar
c3p0-0.9.2.1.jar
com.springsource.net.sf.cglib-2.2.0.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
commons-logging-1.1.3.jar
dom4j-1.6.1.jar
hibernate-c3p0-4.2.4.Final.jar
hibernate-commons-annotations-4.0.2.Final.jar
hibernate-core-4.2.4.Final.jar
hibernate-entitymanager-4.2.4.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.1.Final.jar
mchange-commons-java-0.2.3.4.jar
mysql-connector-java-5.1.7-bin.jar
slf4j-api-1.7.26.jar
spring-aop-4.0.0.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-data-commons-1.6.2.RELEASE.jar
spring-data-jpa-1.4.2.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar

2.配置applicationContext.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
		<!-- 配置要扫描的包 -->		
		<context:component-scan base-package="zhang.springdata"></context:component-scan>
		<context:property-placeholder location="classpath:db.properties"/>
		<!-- 配置数据源 -->
		<bean id="comboPooledDataSource"
		class="com.mchange.v2.c3p0.ComboPooledDataSource">
			<property name="user" value="${jdbc.user}"></property>
			<property name="password" value="${jdbc.password}"></property>
			<property name="driverClass" value="${jdbc.driverclass}"></property>
			<property name="jdbcUrl" value="${jdbc.url}"></property>
		</bean>
		<!-- 配置LocalEntityManagerFactory -->
		<bean id="localContainerEntityManagerFactoryBean"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
			<property name="dataSource" ref="comboPooledDataSource"></property>
			<!-- 配置配置器 -->
			<property name="jpaVendorAdapter">
				<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
			</property>
			<property name="packagesToScan" value="zhang.springdata.entities"></property>
			<property name="jpaProperties">
				<props>
					<prop key="hibernate.show_sql">true</prop>
					<prop key="hibernate.hbm2ddl.auto">update</prop>
					<prop key="hibernate.format_sql">true</prop>
				</props>
			</property>
		</bean>
		<!-- 配置管理器 -->
		<bean id="jpaTransactionManager"
		class="org.springframework.orm.jpa.JpaTransactionManager">
			<property name="entityManagerFactory" ref="localContainerEntityManagerFactoryBean"></property>
		</bean>
		<!--配置事务的属性 -->
		<tx:advice id="txadvice" transaction-manager="jpaTransactionManager">
			<tx:attributes>
				<tx:method name="find*" read-only="true"/>
				<tx:method name="get*" read-only="true"/>
				<tx:method name="*"/>
			</tx:attributes>
		</tx:advice>
		<aop:config>
			<aop:pointcut expression="execution(* zhang.springdata.dao.*.*(..))" id="pointcut"/>
			<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut"/>		
		</aop:config>
		<!-- 配置springdata -->
		<jpa:repositories base-package="zhang.springdata" entity-manager-factory-ref="localContainerEntityManagerFactoryBean"></jpa:repositories>
</beans>

3.db.properties

  jdbc.user=root
    jdbc.password=zhangyukang
    jdbc.driverclass=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/jpa_springdata
4.实体类:
    package zhang.springdata.entities;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    
    @Entity
    public class Person {
    	private Integer id;
    	private String name;
    	private int age;
    	private String email;
    	private Address address;
    	
    	@JoinColumn(name="address_id")
    	@ManyToOne
    	public Address getAddress() {
    		return address;
    	}
    	public void setAddress(Address address) {
    		this.address = address;
    	}
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Id
    	public Integer getId() {
    		return id;
    	}
    	public void setId(Integer id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	@Override
    	public String toString() {
    		return "Person [id=" + id + ", name=" + name + ", age=" + age + ", email=" + email + "]";
    	}
    	
    	
    
    }
package zhang.springdata.test;

import java.sql.SQLException;
import java.util.List;

import javax.persistence.Embeddable;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import zhang.springdata.dao.PersonDao;
import zhang.springdata.dao.PersonRepsotory;
import zhang.springdata.entities.Person;

public class Testspringdata {
	private ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
	private PersonDao personDao=null;
	private PersonRepsotory personRepsotory=null;
	{
		personDao=ctx.getBean(PersonDao.class);
		personRepsotory=ctx.getBean(PersonRepsotory.class);
	}
	@Test
	public void testjpa(){
		List<Person> persons = personRepsotory.getByAddressIdGreaterThan(2);
		System.out.println(persons);
	}
	@Test
	public void testquery3(){
		List<Person> persons = personRepsotory.getByEmailInOrAgeLessThan(new String[]{"[email protected]"}, 25);
		System.out.println(persons);
	}
	
	@Test
	public void tsetqueryperson2(){
		List<Person> persons = personRepsotory.getByNameEndingWithAndIdLessThan("g", 5);
		System.out.println(persons);
	}
	@Test
	public void testqueryperson(){
		List<Person> persons = personRepsotory.getByNameStartingWithAndIdLessThan("z", 5);
		System.out.println(persons);
	}
	@Test
	public void testpersonrepsotory(){
		PersonRepsotory personRepsotory=ctx.getBean(PersonRepsotory.class);
		Person person = personRepsotory.getByName("zhangyukang1");
		System.out.println(person);
	}
	@Test
	public void testgetallperson(){
		List<Person> persons = personDao.getAll();
		System.out.println(persons.size());
	}
	@Test
	public void testdeleteperson(){
		personDao.deletePerson(1);
	}
	@Test
	public void testsaveperson(){
		Person person=new Person();
		person.setAge(23);
		person.setEmail("[email protected]");
		person.setName("张");
		
		personDao.savePerson(person);
	}
	@Test
	public void testgetPerson(){
		Person person = personDao.getPerson(1);
		System.out.println(person);
	}
	@Test
	public void testpersondao(){
		PersonDao personDao=ctx.getBean(PersonDao.class);
		List<Person> persons = personDao.getAll();
	}
	@Test
	public void testgetconnection() throws SQLException{
		DataSource dataSource=ctx.getBean(DataSource.class);
		System.out.println(dataSource.getConnection());
	}
	@Test
	public void testentities(){
		EntityManagerFactory entityManagerFactory=ctx.getBean(EntityManagerFactory.class);
		System.out.println(entityManagerFactory);
	}
}
package zhang.springdata.dao;

import java.util.List;

import org.springframework.data.repository.Repository;

import zhang.springdata.entities.Person;
/**
 * 继承该接口会被纳入到IOC容器中,
 * 也可以不继承该Repository接口,可以使用
 * @RepositoryDefinition(domainClass=Person.class,idClass=Integer.class)
 * 注解.
 * @author Administrator
 *
 */
/**
 * Repository中定义方法的规范.
 * 1.不是随便声明的,需要满足一定的规范
 * 2.查询方法用 find,get,read,开头
 * 3.如果涉及条件查询的时候,属性的首字母需要大写 
 * 4.支持属性的级联查询,如果当前类有符合的属性,则优先使用当前类的属性
 * 如果一定要使用级联属性,可以使用_进行连接
 */
public interface PersonRepsotory extends Repository<Person, Integer>{
	
	//WHERE ADDRESS.ID>?
	public List<Person> getByAddressIdGreaterThan(Integer id);
	
	//WHERE ADDRESS.ID>?
	public List<Person> getByAddress_IdGreaterThan(Integer id);
	
	//WHERE EMAIL IN(?,?,?) OR AGE<?
	public List<Person> getByEmailInOrAgeLessThan(String[] strs,Integer age);
	
	//通过姓名来查询
	public Person getByName(String name);
	
	//WHERE name like z% and id>?
	public List<Person> getByNameStartingWithAndIdLessThan(String name,Integer id);
	
	//WHERE name like %g and id>?
	public List<Person> getByNameEndingWithAndIdLessThan(String name,Integer id);
}