利用SpringData环境搭建项目

工程结构

利用SpringData环境搭建项目_第1张图片

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.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>

spring.xml


<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.properties

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层

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

测试结果

利用SpringData环境搭建项目_第2张图片

注意

利用SpringData环境搭建项目_第3张图片
这里写图片描述

你可能感兴趣的:(springboot,springdata)