利用SpringData环境搭建项目

来源:互联网 发布:管家婆数据库安装 编辑:程序博客网 时间:2024/06/16 20:02

工程结构

工程结构

pom.xml

<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.0</modelVersion>  <groupId>springdataJPA</groupId>  <artifactId>springdataJPA</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>war</packaging>  <name>springdataJPA</name>  <description/>  <properties>    <webVersion>3.0</webVersion>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>    <dependency>      <groupId>org.glassfish</groupId>      <artifactId>javax.enterprise.deploy</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.glassfish</groupId>      <artifactId>javax.jms</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.glassfish</groupId>      <artifactId>javax.management.j2ee</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.eclipse.persistence</groupId>      <artifactId>javax.persistence</artifactId>      <version>2.0.0</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.glassfish</groupId>      <artifactId>javax.resource</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.glassfish</groupId>      <artifactId>javax.security.auth.message</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.glassfish</groupId>      <artifactId>javax.security.jacc</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.glassfish</groupId>      <artifactId>javax.servlet</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.glassfish</groupId>      <artifactId>javax.servlet.jsp</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.glassfish</groupId>      <artifactId>javax.servlet.jsp.jstl</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>javax.xml.bind</groupId>      <artifactId>jaxb-api-osgi</artifactId>      <version>2.2.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>javax.ws.rs</groupId>      <artifactId>jsr311-api</artifactId>      <version>1.1.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.glassfish.web</groupId>      <artifactId>jstl-impl</artifactId>      <version>1.2</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>javax.mail</groupId>      <artifactId>mail</artifactId>      <version>1.4.3</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>javax.xml</groupId>      <artifactId>webservices-api-osgi</artifactId>      <version>2.0.1</version>      <scope>provided</scope>    </dependency>    <!--junit -->    <dependency>        <groupId>junit</groupId>        <artifactId>junit</artifactId>        <version>4.10</version>    </dependency>    <!--mysql driver -->    <dependency>        <groupId>mysql</groupId>        <artifactId>mysql-connector-java</artifactId>        <version>5.1.38</version>    </dependency>    <!--spring-jdbc -->    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-jdbc</artifactId>        <version>4.3.5.RELEASE</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>4.3.5.RELEASE</version>    </dependency>    <!-- spring-data-jpa -->    <dependency>        <groupId>org.springframework.data</groupId>        <artifactId>spring-data-jpa</artifactId>        <version>1.8.0.RELEASE</version>    </dependency>    <dependency>        <groupId>org.hibernate</groupId>        <artifactId>hibernate-entitymanager</artifactId>        <version>4.3.6.Final</version>    </dependency>     <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-api</artifactId>        <version>1.7.22</version>    </dependency>    <dependency>        <groupId>org.apache.logging.log4j</groupId>        <artifactId>log4j-slf4j-impl</artifactId>        <version>2.7</version>    </dependency>    <dependency>        <groupId>org.apache.logging.log4j</groupId>        <artifactId>log4j-core</artifactId>        <version>2.7</version>    </dependency>  </dependencies>  <build>    <plugins>      <plugin>        <artifactId>maven-compiler-plugin</artifactId>        <version>2.3.2</version>        <configuration>          <source>1.6</source>          <target>1.6</target>        </configuration>      </plugin>      <plugin>        <artifactId>maven-war-plugin</artifactId>        <version>2.6</version>        <configuration>          <failOnMissingWebXml>false</failOnMissingWebXml>        </configuration>      </plugin>    </plugins>  </build></project>

spring.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: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.properties</value>                </list>            </property>        </bean>          <!-- 1.数据库连接-->        <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>         <!-- 2.配置entityManagerFactory -->        <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.ImprovedNamingStrategy</prop>                    <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"/>        </bean>        <!-- 4.配置支持注解的事务 -->        <tx:annotation-driven transaction-manager="transactionManager"/>        <!-- 5.配置spring-data -->        <jpa:repositories base-package="com.wangh" entity-manager-factory-ref="entityManagerFactory"/>        <context:component-scan base-package="com.wangh"/></beans>

jdbc.properties

jdbc.url=jdbc:mysql:///spring_data?characterEncoding=utf8&useSSL=falsejdbc.username=rootjdbc.password=****jdbc.driver=com.mysql.jdbc.Driver

实体类

@Entity
public class Employee {
private Integer id;
private String name;
private Integer age;

@GeneratedValue@Idpublic 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层

修改操作需添加事务,事务放在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 {

@Resourceprivate EmployeeRepository employeeRepository;@Transactionalpublic 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<Employee> list = emp.findByNameStartingWithAndAgeLessThan("t", 20);        for(Employee empolyee: list){            System.out.println(empolyee.getName()+","+empolyee.getAge()+","+empolyee.getId());        }    }    @Test    public void testFindByNameEndingWithAndAgeLessThan(){        List<Employee> list = emp.findByNameEndingWithAndAgeLessThan("6", 20);        for(Employee empolyee: list){            System.out.println(empolyee.getName()+","+empolyee.getAge()+","+empolyee.getId());        }    }    @Test    public void testFindByNameInOrAgeLessThan(){        List<String> names = new ArrayList<String>();        names.add("t1");        names.add("t2");        List<Employee> 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<Employee> list = emp.queryByParamers("wanghao", 20);        for(Employee empolyee: list){            System.out.println(empolyee.getName()+","+empolyee.getAge()+","+empolyee.getId());        }    }    @Test    public void testqueryByParamers2(){        List<Employee> 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);    }}

测试结果

这里写图片描述

注意

这里写图片描述
这里写图片描述