`

spring data jpa简单实例

 
阅读更多
我们都知道Spring是一个非常优秀的JavaEE整合框架,它尽可能的减少我们开发的工作量和难度。

  在持久层的业务逻辑方面,Spring开源组织又给我们带来了同样优秀的Spring Data JPA。

  通常我们写持久层,都是先写一个接口,再写接口对应的实现类,在实现类中进行持久层的业务逻辑处理。

  而现在,Spring Data JPA帮助我们自动完成了持久层的业务逻辑处理,我们要做的,仅仅是声明一个持久层接口。



  1、下载开发所需要的发布包。

    1)spring-framework-3.1.2.RELEASE-with-docs.zip  

      下载地址:http://www.springsource.org/spring-framework

    2)hibernate-release-4.1.6.Final.zip

      下载地址:http://olex.openlogic.com/packages/hibernate

    3)Spring Data JPA

      Spring Data JPA

        下载地址:http://www.springsource.org/spring-data/jpa

      Spring Data Commons

        下载地址:http://www.springsource.org/spring-data/commons

    4)其他一些依赖包可以从 http://ebr.springsource.com/repository/app/library 上查找下载



  2、新建一个Web项目 spring-data-jpa,把相应的jar包放到/WebRoot/WEB-INF/lib目录下。

    我也没有挑选哪些是不需要的,最后用到的jar如下:


复制代码
antlr-2.7.7.jar
com.springsource.net.sf.cglib-2.2.0.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.aspectj.weaver-1.6.3.RELEASE.jar
commons-lang3-3.1.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.1.6.Final.jar
hibernate-entitymanager-4.1.6.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.0.Final.jar
log4j-1.2.17.jar
mysql-connector-java-5.0.4-bin.jar
org.springframework.aop-3.1.2.RELEASE.jar
org.springframework.asm-3.1.2.RELEASE.jar
org.springframework.aspects-3.1.2.RELEASE.jar
org.springframework.beans-3.1.2.RELEASE.jar
org.springframework.context-3.1.2.RELEASE.jar
org.springframework.context.support-3.1.2.RELEASE.jar
org.springframework.core-3.1.2.RELEASE.jar
org.springframework.expression-3.1.2.RELEASE.jar
org.springframework.instrument-3.1.2.RELEASE.jar
org.springframework.instrument.tomcat-3.1.2.RELEASE.jar
org.springframework.jdbc-3.1.2.RELEASE.jar
org.springframework.jms-3.1.2.RELEASE.jar
org.springframework.js.resources-2.3.0.RELEASE.jar
org.springframework.orm-3.1.2.RELEASE.jar
org.springframework.oxm-3.1.2.RELEASE.jar
org.springframework.test-3.1.2.RELEASE.jar
org.springframework.transaction-3.1.2.RELEASE.jar
org.springframework.web-3.1.2.RELEASE.jar
org.springframework.web.portlet-3.1.2.RELEASE.jar
org.springframework.web.servlet-3.1.2.RELEASE.jar
slf4j-api-1.6.6.jar
slf4j-log4j12-1.6.6.jar
spring-data-commons-core-1.3.0.M1.jar
spring-data-jpa-1.0.2.RELEASE.jar

复制代码

  

  3、在MySql数据库中建立一个叫spring_data_jpa的数据库。

create database spring_data_jpa default character set utf8;



  4、JPA配置文件persistence.xml

    1)在src目录下建立一个叫META-INF的文件夹

    2)在META-INF文件夹下建立persistence.xml文件

      persistence.xml内容如下:


复制代码
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
            http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
           
    <persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
        <properties>
            <!--配置Hibernate方言 -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
            <!--配置数据库驱动 -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <!--配置数据库用户名 -->
            <property name="hibernate.connection.username" value="root" />
            <!--配置数据库密码 -->
            <property name="hibernate.connection.password" value="root" />
            <!--配置数据库url -->
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/spring_data_jpa?useUnicode=true&amp;characterEncoding=UTF-8" />
            <!--设置外连接抓取树的最大深度 -->
            <property name="hibernate.max_fetch_depth" value="3" />
            <!--自动输出schema创建DDL语句 -->
            <property name="hibernate.hbm2ddl.auto" value="update" />   
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="javax.persistence.validation.mode" value="none"/>
        </properties>
    </persistence-unit>
           
</persistence>

复制代码

  

  5、Spring配置文件applicationContext.xml

   在src目录下建立applicationContext.xml

   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:context="http://www.springframework.org/schema/context" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:cache="http://www.springframework.org/schema/cache" 
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
   
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
          http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
          http://www.springframework.org/schema/context  
          http://www.springframework.org/schema/context/spring-context-3.1.xsd  
          http://www.springframework.org/schema/aop  
          http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  
          http://www.springframework.org/schema/tx   
          http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
          http://www.springframework.org/schema/cache
          http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
          http://www.springframework.org/schema/data/jpa
          http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> 
       
        <context:annotation-config /> 
       
        <context:component-scan base-package="cn.luxh.app"/>
      
        <!-- 定义实体管理器工厂 -->
        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
             <property name="persistenceUnitName" value="myJPA"/>
        </bean>
        
         <!-- 配置事务管理器 --> 
           <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
            <property name="entityManagerFactory" ref="entityManagerFactory" /> 
           </bean>
      
          <!-- 启用 annotation事务-->
           <tx:annotation-driven transaction-manager="transactionManager"/>
          
           <!-- 配置Spring Data JPA扫描目录-->
           <jpa:repositories base-package="cn.luxh.app.repository"/>

       
      
</beans>

复制代码

  

  6、web.xml

  web.xml内容如下:


复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>  
 
  <!-- 编码过滤器 -->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
    </init-param>
   
   
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 
  <!-- 配置spring监听器 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
 
  <!-- 配置缓存清除监听器,负责处理由 JavaBean Introspector 功能而引起的缓存泄露 -->
  <listener> 
      <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 
  </listener>
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

复制代码
  

  8、所有环境配完毕,开始写一个Spring Data JPA 的增删改查

    1)建立相应的包
    2)领域模型实体类User


复制代码
package cn.luxh.app.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
* 用户信息
* @author Luxh
* 2012-8-30
*/
@Entity
@Table(name="t_user")
public class User {
   
    @Id
    @GeneratedValue
    private Integer id;
   
    //账号
    private String account;
   
    //姓名
    private String name;
   
    //密码
    private String password;
   
   
    //省略 getter和setter方法

}

复制代码

    3)声明持久层接口UserRepository

    让UserRepository接口继承CrudRepository<T,ID>,T是领域实体,ID是领域实体的主键类型。CrudRepository实现了相应的增删改查方法。


复制代码
package cn.luxh.app.repository;


import org.springframework.data.repository.CrudRepository;

import cn.luxh.app.domain.User;

/**
* 用户持久层接口
* @author Luxh
* 2012-8-31
*/
public interface UserRepository extends CrudRepository<User,Integer>{
   
   
}

复制代码

    不再需要持久层接口实现类。



    4)业务层

      一般多层架构是控制层调用业务层,业务层再调用持久层。所以这里写个业务层。

      a、业务层接口:


复制代码
package cn.luxh.app.service;

import cn.luxh.app.domain.User;

/**
* 用户业务接口
* @author Luxh
* 2012-8-31
*/
public interface UserService {
   
    /**
     * 保存用户
     * @param user
     */
    void saveUser(User user);
   
    /**
     * 根据id查找用户
     * @param id
     * @return
     */
    User findUserById(Integer id);
   
    /**
     * 更新用户
     * @param user
     */
    void updateUser(User user);
   
    /**
     * 根据ID删除用户
     * @param id
     */
    void deleteUserById(Integer id);
   
   
}

复制代码

    b、业务层接口实现类


复制代码
package cn.luxh.app.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.luxh.app.domain.User;
import cn.luxh.app.repository.UserRepository;

/**
* 用户业务服务实现类
* @author Luxh
* 2012-8-31
*/
@Service("userService")
public class UserServiceImpl implements UserService{
   
   
    @Autowired
    private UserRepository userRepository;//注入UserRepository

    @Override
    @Transactional
    public void saveUser(User user) {
        userRepository.save(user);
       
    }

    @Override
    @Transactional(readOnly=true)
    public User findUserById(Integer id) {
        return userRepository.findOne(id);
    }

   
    @Override
    @Transactional
    public void updateUser(User user) {
        userRepository.save(user);
    }

    @Override
    @Transactional
    public void deleteUserById(Integer id) {
        userRepository.delete(id);
    }

}

复制代码



  9)编写测试用例

    
  测试代码:


复制代码
package cn.luxh.app.test;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import cn.luxh.app.domain.User;
import cn.luxh.app.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/applicationContext.xml"})
public class UserTest {
   
    @Autowired
    private UserService userService;
   
    //保存用户
    @Test
    public void testSaveUser() {
        User user = new User();
        user.setAccount("LiHuai");
        user.setName("李坏");
        user.setPassword("123456");
       
        userService.saveUser(user);
    }
   
   
    //根据id查找用户
    @Test
    public void testFindUserById() {
        Integer id = 1;
        User user = userService.findUserById(id);
        Assert.assertEquals("李坏",user.getName());
    }
   
    //更新用户
    @Test
    public void testUpdateUser() {
        Integer id = 1;
        User user = userService.findUserById(id);
        user.setName("李寻欢");
       
        userService.updateUser(user);
       
    }
   
    //根据id删除用户
    @Test
    public void testDeleteUserById() {
        Integer id = 1;
       
        userService.deleteUserById(id);
    }

}

复制代码



--------------------------------------------------------------------------------

  

  使用Spring Data JPA相当的简单,我们只需要定义持久层的接口,不需要编写实现代码。

  步骤和注意点:

  1)在spring配置文件中添加仓库接口的扫描路径 <jpa:repositories base-package="cn.luxh.app.repository"/>

  2)编写领域实体,需要按照JPA规范

  3)编写仓库Repository<T,ID>接口,依靠Spring Data规范定义接口方法。

     比如按照规范定义一个数据访问接口方法  List<User> findByName(String name);

     Spring Data JPA 就会自动转化为 select u from User u where u.name = ?1

  

--------------------------------------------------------------------------------



  可以使用的仓库接口有:
    Repository:           是 Spring Data的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法。

    CrudRepository:          继承Repository,提供增删改查方法,可以直接调用。

    PagingAndSortingRepository:    继承CrudRepository,具有分页查询和排序功能

    JpaRepository:                         继承PagingAndSortingRepository,针对JPA技术提供的接口

    JpaSpecificationExecutor:          可以执行原生SQL查询
分享到:
评论

相关推荐

    Spring Data JPA 笔记

    至于压缩包中的“helloworld”文件,可能是一个简单的示例项目,通常会包含一个基础的Spring Data JPA配置,一个实体类,以及对应的Repository接口,用于展示Spring Data JPA的基本用法。通过查看这个例子,你可以更...

    spring data jpa简单案例

    **Spring Data JPA 简单案例** Spring Data JPA 是 Spring 框架的一个模块,它为使用 JPA(Java Persistence API)提供了强大的支持,简化了数据访问层的开发。通过使用 Spring Data JPA,我们可以避免编写大量重复...

    spring data jpa 实例源码

    spring data jpa 实例源码 spring data jpa 实例源码 spring data jpa 实例源码

    spring data jpa入门实例

    【Spring Data JPA 入门实例】 Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问层(DAO)的开发,通过提供自动化的 Repository 实现,使得开发者无需编写大量的 CRUD(创建、读取、更新、删除)代码...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    在本项目中,我们主要探讨如何手动构建一个基于SpringMVC、Spring Data JPA、Hibernate以及FreeMarker模板引擎的Maven工程,同时实现环境切换功能。这个基础框架为日常开发工作提供了必要的支持。 首先,SpringMVC...

    spring data jpa 入门例子

    本入门例子将帮助你理解并掌握Spring Data JPA的核心概念和常用功能。 1. **什么是Spring Data JPA** Spring Data JPA是Spring框架的一部分,它为JPA提供了一种声明式的方法来处理数据访问层。通过使用Spring Data...

    spring data jpa 例子

    这个"spring data jpa 例子"很可能是包含了一个示例项目,展示了如何在实际应用中集成并使用Spring Data JPA。让我们深入探讨Spring Data JPA的关键概念和用法。 首先,Spring Data JPA的目标是通过提供泛型 ...

    SpringData JPA 参考文档PDF 英文

    文档中所涉及的知识点涵盖了从简单的仓库接口定义、查询创建,到复杂的事务管理、锁定机制和审计功能的配置,使得开发者能够利用Spring Data JPA来极大减少数据访问层的代码量,专注于业务逻辑的实现。文档的编写以...

    SpringDataJPA实例

    在这个实例中,我们将会深入理解SpringDataJPA如何与SpringBoot结合,实现数据库的增删改查(CRUD)操作以及实体之间的关联关系处理。 首先,SpringBoot是Spring框架的轻量级启动器,它自动配置了大量常见应用的...

    spring Data JPA框架实例

    分页查询在Spring Data JPA中非常简单,我们可以通过`Pageable`接口实现。在查询方法中添加`Pageable`参数,例如`findAll(Pageable pageable)`,然后在服务层或控制器层,我们可以创建`PageRequest`对象,指定页码和...

    spring-data-jpa 简单实例

    **Spring Data JPA 简单实例** Spring Data JPA 是 Spring 框架的一个模块,它极大地简化了与 Java 持久层的交互,尤其是与 JPA(Java Persistence API)的集成。通过 Spring Data JPA,我们可以快速地创建数据访问...

    Spring Data JPA

    6. **Spring Boot集成**:在Spring Boot项目中,Spring Data JPA的配置非常简单,只需要在`pom.xml`添加依赖,然后在`application.properties`或`application.yml`配置数据库连接信息,Spring Boot会自动配置JPA和...

    Spring Data JPA Examples 官方源码

    Spring Data JPA是Spring框架的一个重要模块,它简化了Java Persistence API (JPA)的使用,使得数据库操作变得更加便捷。这个"Spring Data JPA Examples"官方源码提供了丰富的示例,帮助开发者深入理解如何在实际...

    springDataJpa测试demo

    在这个名为“springDataJpa测试demo”的项目中,我们看到它是一个基于Maven构建的工程,目的是演示如何在Spring应用中集成并测试Spring Data JPA的功能。这里我们将详细探讨Spring Data JPA以及与Maven和MySQL数据库...

    Spring Data JPA1.7中文文档

    Spring Data JPA 是一个强大的框架,它简化了与Java Persistence API (JPA)的交互,提供了对数据库操作的便捷抽象。1.7.0.RELEASE 版本的文档由 Oliver Gierke、Thomas Darimont 和 Christoph Strobl 编写,并由 ...

    后端 Java Spring Data Jpa @Transactional 介绍

    在Java后端开发中,Spring框架提供了强大的事务管理能力,特别是在使用Spring Data JPA时,`@Transactional`注解使得事务处理变得简单易用。这个注解是Spring框架中的核心部分,它允许开发者声明性地控制事务边界,...

    Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例.zip

    在这个"Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例"中,我们将深入探讨这三个组件如何协同工作,实现高效的数据管理与用户交互。 首先,Spring MVC是Spring框架的一个模块,专门用于构建Web应用...

    2017 spring data jpa+spring4.2+springmvc+hibernate4.3 maven环境intellij idea增删改查实例

    在本项目中,我们探索的是一个基于2017年技术栈的Java Web应用程序实例,主要涉及Spring Data JPA、Spring 4.2、Spring MVC和Hibernate 4.3。这些技术是Java开发中的核心组件,尤其在企业级应用开发中广泛使用。下面...

    Spring Data JPA 简化 JPA 开发

    Spring Data JPA 提供了一套灵活的查询机制,允许开发者通过简单的接口方法定义就能执行复杂的数据库查询。 Spring Data JPA 的核心概念包括以下几个接口: 1. Repository:这是所有 Repository 接口的基类,不...

    springData-jpa-demo

    本项目“springData-jpa-demo”旨在提供一个示例,帮助开发者理解如何在实践中应用Spring Data JPA。 首先,Spring Data JPA 是Spring框架的一部分,它为ORM(对象关系映射)工具如Hibernate提供了高级抽象层。通过...

Global site tag (gtag.js) - Google Analytics