Spring Data JPA HelloWorld

使用 Spring Data JPA 进行持久层开发需要的四个步骤:

  • 配置 Spring 整合 JPA

  • 在 Spring 配置文件中配置 Spring Data,让 Spring 为声明的接口创建代理对象。配置了 <jpa:repositories> 后,Spring 初始化容器时将会扫描 base-package 指定的包目录及其子目录,为继承 Repository 或其子接口的接口创建代理对象,并将代理对象注册为 Spring Bean,业务层便可以通过 Spring 自动封装的特性来直接使用该对象。

  • 声明持久层的接口,该接口继承 Repository,Repository 是一个标记型接口,它不包含任何方法,如必要,Spring Data 可实现 Repository 其他子接口,其中定义了一些常用的增删改查,以及分页相关的方法。

  • 在接口中声明需要的方法。Spring Data 将根据给定的策略(具体策略稍后讲解)来为其生成实现代码。

搭建环境

  • pom.xml
<?xml version="1.0" encoding="UTF-8"?><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>com.ifox.hgx</groupId><artifactId>springData</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>springData Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.0.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.0.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-web --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.0.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.0.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-orm --><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>5.0.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.13.Final</version></dependency><!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>5.2.13.Final</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>2.0.3.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies>
  • 配置文件: 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:tx="http://www.springframework.org/schema/tx"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.xsd   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"><!-- 配置自动扫描的包 --><context:component-scan base-package="com.ifox.hgx.springdata"></context:component-scan><!-- 1. 配置数据源 --><context:property-placeholder location="classpath:db.properties"/><bean id="dataSource"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><!-- 2. 配置 JPA 的 EntityManagerFactory --><bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean></property><property name="packagesToScan" value="com.ifox.hgx.springdata"></property><property name="jpaProperties"><props><!-- 二级缓存相关 --><!--<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop><prop key="net.sf.ehcache.configurationResourceName">ehcache-hibernate.xml</prop>--><!-- 生成的数据表的列的映射策略 --><prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop><!-- hibernate 基本属性 --><prop key="hibernate.dialect">org.hibernate.dialect.MySQL57Dialect</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"></property></bean><!-- 4. 配置支持注解的事务 --><tx:annotation-driven transaction-manager="transactionManager"/><!-- 5. 配置 SpringData --><!-- 加入  jpa 的命名空间 --><!-- base-package: 扫描 Repository Bean 所在的 package --><jpa:repositories base-package="com.ifox.hgx.springdata"entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>
</beans>
  • 数据库连接配置:db.properties
jdbc.url = jdbc:mysql://localhost:3306/JPA?useSSL=true
jdbc.user = root
jdbc.password = 123456
jdbc.driverClass = com.mysql.jdbc.Driver
  • log4j配置文件:log4j.properties
log4j.rootLogger=WARN, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.logger.com.foo=WARN

HelloWorld

  • entity实体类:Person
package com.ifox.hgx.springdata.entities;import org.springframework.format.annotation.DateTimeFormat;import javax.persistence.*;
import java.util.Date;@Table(name = "JPA_PERSONS")
@Entity
public class Person {private Integer id ;private String lastName ;private String email ;private Date birth ;@GeneratedValue(strategy = GenerationType.IDENTITY)@Idpublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@Column(name = "LAST_NAME")public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@DateTimeFormatpublic Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth = birth;}@Overridepublic String toString() {return "Person{" +"id=" + id +", lastName='" + lastName + '\'' +", email='" + email + '\'' +", birth=" + birth +'}';}
}
  • dao层:PersonRepository
package com.ifox.hgx.springdata.dao;import com.ifox.hgx.springdata.entities.Person;
import org.springframework.data.repository.Repository;public interface PersonRepository extends Repository<Person,Integer> {Person getByLastName(String lastName) ;
}
  • service层:PersonService
package com.ifox.hgx.springdata.service;import com.ifox.hgx.springdata.dao.PersonRepository;
import com.ifox.hgx.springdata.entities.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class PersonService {@Autowiredprivate PersonRepository personRepository;public Person getByLastName(String lastName) {return personRepository.getByLastName(lastName);}}
  • 测试类:

package com.ifox.hgx.jap.spring;import com.ifox.hgx.springdata.entities.Person;
import com.ifox.hgx.springdata.service.PersonService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import javax.sql.DataSource;
import java.sql.Connection;public class SpringDataTest {private ApplicationContext applicationContext = null;private PersonService personService = null;{applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");personService = applicationContext.getBean(PersonService.class);}@Testpublic void testDataSource() throws Exception {DataSource dataSource = applicationContext.getBean(DataSource.class);Connection connection = dataSource.getConnection();System.out.println(connection);}@Testpublic void testPersonFindByLastName() {Person person = personService.getByLastName("sjsja") ;System.out.println(person);}
}

Spring Data JPA 2. HelloWorld相关推荐

  1. Spring Data JPA入门

    见:http://sishuok.com/forum/blogPost/list/7000.html Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框 ...

  2. 深入浅出学Spring Data JPA

    第一章:Spring Data JPA入门 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map ...

  3. 深入浅出学Spring Data JPA , Predicate

    转自:https://blog.csdn.net/qq_19936739/article/details/76176927 序言 自工作以来,除了以前比较流量的hibernate,就是一直使用ORM ...

  4. 深入浅出学Spring Data JPA toPredicate Predicate[] p = new Predicate[list.size()]; query.where(cb.and 201

    序言自工作以来,除了以前比较流量的hibernate,就是一直使用ORM 规范 JPA了.而这几天工作需要,研究了下JPA的标准查询,名为:JPA criteria查询.相比JPQL,其优势是类型安全 ...

  5. Spring Boot整合Spring Data JPA操作数据

    一. Sping Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 J ...

  6. Spring Data JPA 五分钟快速入门和实践

    Spring Data JPA(类似于Java Web 中的 DAO) 操作声明持久层的接口(Repository) 三个核心接口: CrudRepository PagingAndSortingRe ...

  7. Spring Data JPA(官方文档翻译)

    关于本书 介绍 关于这本指南 第一章 前言 第二章 新增及注意点 第三章 项目依赖 第四章 使用Spring Data Repositories 4.1 核心概念 4.2 查询方法 4.3 定义rep ...

  8. Hibernate、JPA、Spring Data JPA,傻傻分不清

    国庆假期接近尾声,明天最后一天了,要开始收收心啦- 今天讲讲一个初学者(或许一些老手)可能没去搞懂的几个概念:Hibernate.JPA.Spring Data JPA 之间的关联. 嘿嘿,前段时间有 ...

  9. Spring Data JPA 与 MyBatis 对比,你喜欢用哪个?

    来源:jianshu.com/p/3927c2b6acc0 概述 Spring Data JPA是Spring Data的子模块.使用Spring Data,使得基于"repositorie ...

最新文章

  1. 某程序员吐槽:回老家被乡镇公务员表哥怼,催他赶紧上岸!表哥月薪3800,而他年包90w!...
  2. “极致”神话和产品观念_转自“蜗窝科技”
  3. Field XXXX input value is longer than screen field-BDC
  4. hibernate mysql分页_求struts+hibernate实现mysql分页的详细代码
  5. gan简介_GAN简介
  6. 高等数学上-赵立军-北京大学出版社-题解-练习2.4
  7. ExtAspNet学习-利用AppBox框架快速创建项目(五)—完成项目含源代码
  8. django-模型类的查询方法
  9. 前端改变窗口大小内容不变形_10个前端灵魂拷问丨吃透这些就能摆脱初级前端工程师...
  10. 启动报错 classnofoundexception org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  11. ZooKeeper在分布式应用中的作用
  12. 关于代理服务器与NAT
  13. 各省简称 拼音 缩写_近50个拼音/英文缩写合集 (一)
  14. ir2104s的自举电容_IR2104s半桥驱动芯片使用经验及注意事项
  15. 运行Rundll.exe
  16. VSCode 配置 python环境 相对齐全 有遇到问题欢迎投稿哈
  17. 什么是共享设备,对共享设备如何分配?
  18. java eclipse计算器_eclipse编写计算器
  19. mysql 公历变农历_经过完整测试的农历-公历相互转换
  20. 懵了?一夜之间,Rust 审核团队突然集体辞职

热门文章

  1. PostgreSQL 数据库下载安装
  2. 【CyberSecurityLearning 54】扫描技术+口令破解
  3. Java Build工具Ant与Maven之比较
  4. HashSet-哈希值
  5. KML、GML、GeoRSS、SVG (转)
  6. C++ OpenCV 基于HSV颜色分割区域、获取目标
  7. Feflow建模步骤及注意事项
  8. vue上传文件,重新上传后覆盖之前文件
  9. 在iOS当中发送电子邮件和短信
  10. ERD Online 4.1.0对接ChatGPT,实现AI建模、SQL自由