<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>springdataJPAgroupId>
<artifactId>springdataJPAartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>warpackaging>
<name>springdataJPAname>
<description/>
<properties>
<webVersion>3.0webVersion>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<dependencies>
<dependency>
<groupId>org.glassfishgroupId>
<artifactId>javax.enterprise.deployartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.glassfishgroupId>
<artifactId>javax.jmsartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.glassfishgroupId>
<artifactId>javax.management.j2eeartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.eclipse.persistencegroupId>
<artifactId>javax.persistenceartifactId>
<version>2.0.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.glassfishgroupId>
<artifactId>javax.resourceartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.glassfishgroupId>
<artifactId>javax.security.auth.messageartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.glassfishgroupId>
<artifactId>javax.security.jaccartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.glassfishgroupId>
<artifactId>javax.servletartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.glassfishgroupId>
<artifactId>javax.servlet.jspartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.glassfishgroupId>
<artifactId>javax.servlet.jsp.jstlartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.xml.bindgroupId>
<artifactId>jaxb-api-osgiartifactId>
<version>2.2.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.ws.rsgroupId>
<artifactId>jsr311-apiartifactId>
<version>1.1.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.glassfish.webgroupId>
<artifactId>jstl-implartifactId>
<version>1.2version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.mailgroupId>
<artifactId>mailartifactId>
<version>1.4.3version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.xmlgroupId>
<artifactId>webservices-api-osgiartifactId>
<version>2.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.10version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.38version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>4.3.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>4.3.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.datagroupId>
<artifactId>spring-data-jpaartifactId>
<version>1.8.0.RELEASEversion>
dependency>
<dependency>
<groupId>org.hibernategroupId>
<artifactId>hibernate-entitymanagerartifactId>
<version>4.3.6.Finalversion>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.22version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-slf4j-implartifactId>
<version>2.7version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-coreartifactId>
<version>2.7version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-pluginartifactId>
<version>2.3.2version>
<configuration>
<source>1.6source>
<target>1.6target>
configuration>
plugin>
<plugin>
<artifactId>maven-war-pluginartifactId>
<version>2.6version>
<configuration>
<failOnMissingWebXml>falsefailOnMissingWebXml>
configuration>
plugin>
plugins>
build>
project>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.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/data/repository
http://www.springframework.org/schema/data/repository/spring-repository-1.6.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.propertiesvalue>
list>
property>
bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
property>
<property name="packagesToScan" value="com.wangh"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategyprop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectprop>
<prop key="hibernate.show_sql">trueprop>
<prop key="hibernate.format_sql">trueprop>
<prop key="hibernate.hbm2ddl.auto">updateprop>
props>
property>
bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<jpa:repositories base-package="com.wangh" entity-manager-factory-ref="entityManagerFactory"/>
<context:component-scan base-package="com.wangh"/>
beans>
jdbc.url=jdbc:mysql:///spring_data?characterEncoding=utf8&useSSL=false
jdbc.username=root
jdbc.password=****
jdbc.driver=com.mysql.jdbc.Driver
@Entity
public class Employee {
private Integer id;
private String name;
private Integer age;
@GeneratedValue
@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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
package com.wangh.repository;
import org.springframework.data.repository.Repository;
import com.wangh.model.Employee;
public interface EmployeeRepository extends Repository<Employee, Integer>{
public Employee findByName(String name);
//where name like ?% and age <
public List<Employee> findByNameStartingWithAndAgeLessThan(String name, Integer age);
//where name like %? and age <
public List<Employee> findByNameEndingWithAndAgeLessThan(String name, Integer age);
//where name in(? ? ?)or age
public List<Employee> findByNameInOrAgeLessThan(List<String> names, Integer age);
//使用Query注解查询
@Query("select e from Employee e where id=(select max(id) from Employee)")
public Employee getEmployeeByMaxId();
//占位符查询
@Query("select e from Employee e where e.name=?1 and e.age=?2")
public List<Employee> queryByParamers(String name ,Integer age);
@Query("select e from Employee e where e.name=:name and e.age=:age")
public List<Employee> queryByParamers2(@Param("name")String name ,@Param("age")Integer age);
@Query("select count(*) from Employee e")
public Long getCount();
@Modifying
@Query("update Employee set age=:age where id=:id")
public void update(@Param("age")Integer age ,@Param("id")Integer id);
}
修改操作需添加事务,事务放在service层处理,在dao层添加@Modifying
package com.wangh.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.wangh.repository.EmployeeRepository;
@Service
public class EmployeeService {
@Resource
private EmployeeRepository employeeRepository;
@Transactional
public void update(Integer id , Integer age){
employeeRepository.update(age, id);
}
}
package springdata;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.wangh.model.Employee;
import com.wangh.repository.EmployeeRepository;
import com.wangh.service.EmployeeService;
public class RepositoryTest {
private ApplicationContext ctx = null;
private EmployeeRepository emp = null;
private EmployeeService esv = null;
@Before
public void before(){
ctx = new ClassPathXmlApplicationContext("spring.xml");
emp = ctx.getBean(EmployeeRepository.class);
esv = ctx.getBean(EmployeeService.class);
System.out.println("before");
}
@After
public void after(){
ctx = null;
esv = null;
System.out.println("after");
}
@Test
public void testRepository(){
Employee empolyee = emp.findByName("wh");
System.out.println(empolyee.getName()+","+empolyee.getAge()+","+empolyee.getId());
}
@Test
public void testFindByNameStartingWithAndAgeLessThan(){
List list = emp.findByNameStartingWithAndAgeLessThan("t", 20);
for(Employee empolyee: list){
System.out.println(empolyee.getName()+","+empolyee.getAge()+","+empolyee.getId());
}
}
@Test
public void testFindByNameEndingWithAndAgeLessThan(){
List list = emp.findByNameEndingWithAndAgeLessThan("6", 20);
for(Employee empolyee: list){
System.out.println(empolyee.getName()+","+empolyee.getAge()+","+empolyee.getId());
}
}
@Test
public void testFindByNameInOrAgeLessThan(){
List names = new ArrayList();
names.add("t1");
names.add("t2");
List list = emp.findByNameInOrAgeLessThan(names, 20);
for(Employee empolyee: list){
System.out.println(empolyee.getName()+","+empolyee.getAge()+","+empolyee.getId());
}
}
@Test
public void testGetEmployeeByMaxId(){
Employee empolyee = emp.getEmployeeByMaxId();
System.out.println(empolyee.getName()+","+empolyee.getAge()+","+empolyee.getId());
}
@Test
public void testqueryByParamers(){
List list = emp.queryByParamers("wanghao", 20);
for(Employee empolyee: list){
System.out.println(empolyee.getName()+","+empolyee.getAge()+","+empolyee.getId());
}
}
@Test
public void testqueryByParamers2(){
List list = emp.queryByParamers2("wanghao", 20);
for(Employee empolyee: list){
System.out.println(empolyee.getName()+","+empolyee.getAge()+","+empolyee.getId());
}
}
@Test
public void testGetCount(){
Long l = emp.getCount();
System.out.println(l);
}
@Test
public void testUpdate(){
esv.update(1, 27);
}
}