Spring data JPA图文教程(一)
1、什么是Spring Data JPA
2、Spring Data JPA CRUD实例
主结构:
springdata→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.tuling.springdata</groupId><artifactId>springdata</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>01-jpa-hibernate</module><module>02-springdata-jpa</module><module>03-springdata-jpa</module><module>04-springdata-jpa</module></modules><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><!--统一管理SpringData子项目的版本--><dependencyManagement><dependencies><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-bom</artifactId><version>2021.1.0</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement></project>
02-springdata-jpa→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"><parent><artifactId>springdata</artifactId><groupId>com.tuling.springdata</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>02-springdata-jpa</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><querydsl.version>4.4.0</querydsl.version><apt.version>1.1.3</apt.version></properties><dependencies><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId></dependency><!-- junit4 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!-- hibernate对jpa的支持包 --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>5.4.32.Final</version></dependency><!-- Mysql and MariaDB --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.22</version></dependency><!--连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><!--spring-test --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.10</version><scope>test</scope></dependency><!-- querydsl --><dependency><groupId>com.querydsl</groupId><artifactId>querydsl-jpa</artifactId><version>${querydsl.version}</version></dependency></dependencies><build><plugins><plugin><groupId>com.mysema.maven</groupId><artifactId>apt-maven-plugin</artifactId><version>${apt.version}</version><dependencies><dependency><groupId>com.querydsl</groupId><artifactId>querydsl-apt</artifactId><version>${querydsl.version}</version></dependency></dependencies><executions><execution><phase>generate-sources</phase><goals><goal>process</goal></goals><configuration><outputDirectory>target/generated-sources/queries</outputDirectory><processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor><logOnlyOnError>true</logOnlyOnError></configuration></execution></executions></plugin></plugins></build></project>
pojo→Customer实体类:
package com.tuling.pojo;import javax.persistence.*;@Entity // 作为hibernate 实体类
@Table(name = "tb_customer") // 映射的表明
public class Customer {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "id")private Long custId; //客户的主键@Column(name = "cust_name")private String custName;//客户名称@Column(name="cust_address")private String custAddress;//客户地址public Long getCustId() {return custId;}public void setCustId(Long custId) {this.custId = custId;}public String getCustName() {return custName;}public void setCustName(String custName) {this.custName = custName;}public String getCustAddress() {return custAddress;}public void setCustAddress(String custAddress) {this.custAddress = custAddress;}@Overridepublic String toString() {return "Customer{" +"custId=" + custId +", custName='" + custName + '\'' +", custAddress='" + custAddress + '\'' +"}\n";}
}
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:jpa="http://www.springframework.org/schema/data/jpa" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/data/jpahttps://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!--用于整合jpa @EnableJpaRepositories --><jpa:repositories base-package="com.tuling.repositories"entity-manager-factory-ref="entityManagerFactory"transaction-manager-ref="transactionManager"/><!--EntityManagerFactory--><bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="jpaVendorAdapter"><!--Hibernate实现--><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><!--生成数据库表--><property name="generateDdl" value="true"></property><property name="showSql" value="true"></property></bean></property><!--设置实体类的包--><property name="packagesToScan" value="com.tuling.pojo"></property><property name="dataSource" ref="dataSource" ></property></bean><!--数据源--><bean class="com.alibaba.druid.pool.DruidDataSource" name="dataSource"><property name="username" value="root"/><property name="password" value="123456"/><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/springdata_jpa?characterEncoding=UTF-8"/></bean><!--声明式事务--><bean class="org.springframework.orm.jpa.JpaTransactionManager" name="transactionManager"><property name="entityManagerFactory" ref="entityManagerFactory"></property></bean><!--启动注解方式的声明式事务--><tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven></beans>
CustomerRepository接口
package com.tuling.repositories;import com.tuling.pojo.Customer;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;//这个接口可以实现分页和排序
import org.springframework.data.repository.query.Param;
import org.springframework.data.repository.query.QueryByExampleExecutor;
import org.springframework.transaction.annotation.Transactional;import java.util.List;//CustomerRepository接口继承这个接口PagingAndSortingRepository,有分页排序等功能
// 这个相应测试类可见:SpringDataJpaPagingAndSortTest
public interface CustomerRepository extends PagingAndSortingRepository<Customer,Long>{// 增删查改// 查询@Query("FROM Customer where custName=:custName ")List<Customer> findCustomerByCustName(@Param("custName") String custName);// 修改@Transactional@Modifying // 通知springdatajpa 是增删改的操作@Query("UPDATE Customer c set c.custName=:custName where c.custId=:id")int updateCustomer(@Param("custName") String custName,@Param("id")Long id);@Transactional@Modifying // 通知springdatajpa 是增删改的操作@Query("DELETE FROM Customer c where c.custId=?1")int deleteCustomer(Long id);// 新增 JPQL@Transactional@Modifying // 通知springdatajpa 是增删改的操作@Query("INSERT INTO Customer (custName) SELECT c.custName FROM Customer c where c.custId=?1")int insertCustomerBySelect(Long id);@Query(value="select * FROM tb_customer where cust_name=:custName ",nativeQuery = true)List<Customer> findCustomerByCustNameBySql(@Param("custName") String custName);}
SpringdataJpaTest测试
package com.tuling;import com.tuling.config.SpringDataJPAConfig;
import com.tuling.pojo.Customer;
import com.tuling.repositories.CustomerRepository;
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 java.util.Arrays;
import java.util.Optional;// 基于junit4 spring单元测试
@ContextConfiguration("/spring.xml") //spring.xml配置文件的方式,二选一
//@ContextConfiguration(classes = SpringDataJPAConfig.class) //配置类的方式,,二选一
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringdataJpaTest {// jdk动态代理的实例@AutowiredCustomerRepository repository;//查询@Testpublic void testR(){Optional<Customer> byId = repository.findById(1L);//Optional<Customer>这个是JDK8的新特性,用来防止空指针的System.out.println(byId.orElse(null));System.out.println("========");System.out.println(byId.get());}//增@Testpublic void testC(){Customer customer = new Customer();customer.setCustName("赵");System.out.println(repository.save(customer));}//更新、删除@Testpublic void testD(){Customer customer = new Customer();customer.setCustId(7L);customer.setCustName("赵六");//更新插入repository.save(customer);//删除
// repository.delete(customer);}//查询多个@Testpublic void testFindAll(){Iterable<Customer> allById = repository.findAllById(Arrays.asList(1L, 4L, 5L));System.out.println(allById);}// 用来插入和修改 有主键就是修改 没有就是新增// 获得插入后自增id, 获得返回值 <S extends T> S save(S entity);// 通过集合保存多个实体 <S extends T> Iterable<S> saveAll(Iterable<S> entities);// 通过主键查询实体 Optional<T> findById(ID id);// 通过主键查询是否存在 返回boolean 11 boolean existsById(ID id);// 查询所有 Iterable<T> findAll();// 通过集合的主键 查询多个实体,, 返回集合 Iterable<T> findAllById(Iterable<ID> ids);// 查询总数量 long count();// 根据id进行删除 void deleteById(ID id);// 根据实体进行删除 void delete(T entity);// 删除多个 void deleteAllById(Iterable<? extends ID> ids);// 删除多个传入集合实体 void deleteAll(Iterable<? extends T> entities);// 删除所有 void deleteAll();
}
Spring data JPA图文教程(一)相关推荐
- 使用H2Database+Druid连接池+Spring Data JPA+Ehcache实现CRUD操作
前言 注:本篇为纯实践篇,主要用于技术整合,介绍如何搭建一个完整全面的Web项目.如果对于技术原理还不了解的童鞋可点击下方链接,学习后在来~ H2数据库教程:H2数据库入门 缓存使用教程:在Sprin ...
- Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...
- Spring Data JPA 教程(翻译)
写那些数据挖掘之类的博文 写的比较累了,现在翻译一下关于spring data jpa的文章,觉得轻松多了. 翻译正文: 你有木有注意到,使用Java持久化的API的数据访问代码包含了很多不必要的模式 ...
- Spring Data JPA教程
在Java类或对象与关系数据库之间管理数据是一项非常繁琐且棘手的任务. DAO层通常包含许多样板代码,应简化这些样板代码,以减少代码行数并使代码可重复使用. 在本教程中,我们将讨论Spring数据的J ...
- Spring Data JPA教程:获取所需的依赖关系
在创建使用Spring Data JPA的应用程序之前,我们需要获取所需的依赖关系. 这篇博客文章标识了必需的组件,并描述了如何使用Maven获得它们. 让我们开始吧. 其他阅读:如果您不熟悉Spri ...
- Spring Data JPA教程:简介
创建使用Java Persistence API的存储库是一个繁琐的过程,需要大量时间,并且需要大量样板代码. 通过执行以下步骤,我们可以消除一些样板代码: 创建一个抽象的基础存储库类,该类为实体提供 ...
- Spring Data JPA教程第一部分:配置
Spring Data JPA是一个旨在简化基于JPA的存储库的创建并减少与数据库通信所需的代码量的项目. 在我的工作和个人爱好项目中,我已经使用了一段时间,确实使事情变得更加简单和整洁. 现在是时候 ...
- node在regedit配置哪个位置_Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置
上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现.接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用. 添加多数据源的配置 先在 ...
- Spring Data JPA教程,第一部分: Configuration(翻译)
Spring Data JPA项目旨在简化基于仓库的JPA的创建并减少与数据库交互的所需的代码量.本人在自己的工作和个人爱好项目中已经使用一段时间,它却是是事情如此简单和清洗,现在是时候与你分享我的知 ...
- Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 上一篇我们介绍了在使用JdbcTemplate来做数据访 ...
最新文章
- Kali Linux更新后无法启动解决了
- How to Secure Your Smart Contracts: 6 Solidity Vulnerabilities and how to avoid them (Part 2)
- lambda在python中的意思_Python中的lambda的简单介绍
- Matlab图像处理创新实践-实验3【图像锐化】
- Android PermissionUtils:运行时权限工具类及申请权限的正确姿势
- 多亏了Google相册,如何一键释放Android手机上的空间
- .net core DI 注册 Lazy 类型
- windows环境下nginx的入门配置跳转tomcat
- java中的命令怎么上移_web系统中上下移动功能的实现
- nginx服务无法停止(Windows)
- 图像去雾之何凯明暗通道先验去雾算法原理及c++代码实现
- Eclipse设置中文及取消
- SpringMVC工作原理(含案例图解)
- n的约数(数论+DFS)
- iOS 动画之翻页动画实现
- 微服务架构系列一:关键技术与原理研究
- html标签outclick,vue自定义指令(Directive中的clickoutside.js)的理解
- leetcode 最常见的150道前端面试题(简单题下)
- CSS最详细的基础教程
- java中一些常用的英语