关键词:
什么是Jpa?
Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。
值得注意的是,Jpa是在充分吸收了现有 Hibernate,TopLink,JDO 等 ORM 框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,Jpa 受到了极大的支持和赞扬,其中就包括了 Spring 与 EJB3. 0的开发团队。
注意:Jpa 是一套规范,不是一套产品,那么像 Hibernate,TopLink,JDO 他们是一套产品,如果说这些产品实现了这个 Jpa 规范,那么我们就可以叫他们为 Jpa 的实现产品。
Spring Boot Jpa
Spring Boot Jpa 是 Spring 基于 ORM 框架、Jpa 规范的基础上封装的一套 Jpa 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data Jpa 可以极大提高开发效率!
Spring Boot Jpa 让我们解脱了 DAO 层的操作,基本上所有 CRUD 都可以依赖于它来实现
在Spring Data中,只要按照既定的规范命名方法,Spring Data Jpa就知道你想干嘛,这样就不用写SQL了,那么规范是什么呢?
当然,这种方法命名主要是针对查询,但是一些特殊需求,可能并不能通过这种方式解决,例如想要查询id最大的用户,这时就需要开发者自定义查询SQL了,如上代码所示,自定义查询SQL,使用@Query注解,在注解中写自己的SQL,默认使用的查询语言不是SQL,而是JPQL,这是一种数据库平台无关的面向对象的查询语言,有点定位类似于Hibernate中的HQL,在@Query注解中设置nativeQuery属性为true则表示使用原生查询,即大伙所熟悉的SQL。
工程建设
1. 添加pom依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--测试--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> <version>2.2.4.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.3.RELEASE</version> </dependency> </dependencies>
2. 配置文件application.yml
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: 123456 jpa: properties: hibernate: hbm2ddl: auto: update dialect: org.hibernate.dialect.MySQL5InnoDBDialect show-sql: true
3. 实体类
package com.demo.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue private Long id; @Column(nullable = false, unique = true) private String username; @Column(nullable = false, unique = true) private String address; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", address='" + address + '\'' + '}'; } }
4. UserRepository和UserService
//要继承JpaResponsitory
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "select id,username,address from user where username like %?1%", nativeQuery = true)
List<User> findAllByUsernameLike(String username);
}
// UserService
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User addUser(User user){
return userRepository.save(user);
}
public void delUserById(Long id){
userRepository.deleteById(id);
}
@Transactional(timeout = 10)
public void updateUser(User user){
User resultUser = userRepository.getOne(user.getId());
resultUser.setUsername(user.getUsername());
resultUser.setAddress(user.getAddress());
userRepository.flush();
}
@Transactional(timeout = 10)
public Optional<User> getUserById(Long id){
return userRepository.findById(id);
}
public List<User> getAll(){
return userRepository.findAll();
}
public List<User> getAllByUsernameLike(String name){
return userRepository.findAllByUsernameLike(name);
}
}
测试
@RunWith(SpringRunner.class) @SpringBootTest public class JpaTest { @Autowired private UserService userService; @Test public void add(){ User user = new User(); user.setUsername("八戒"); user.setAddress("众界"); User result = userService.addUser(user); System.out.println(result.toString()); } @Test public void del(){ userService.delUserById(7L); } @Test public void update(){ User user = new User(); user.setId(3L); user.setUsername("齐天大圣"); user.setAddress("众界"); userService.updateUser(user); } @Test public void select(){ List<User> userList1 = userService.getAll(); for (User user : userList1){ System.out.println(user.toString()); } List<User> userList2 = userService.getAllByUsernameLike("霞"); for (User user : userList2){ System.out.println(user.toString()); } } @Test public void selectOne(){ User user = userService.getUserById(5L).get(); System.out.println(user.toString()); } }
都测试通过即可,自行深入研究
软件工程迭代开发第六篇
今天更新了整个玩耍界面,学会了如何通过二维纹理载入图片。最终界面如下:下面的十个框框,左边五个是技能栏,右边五个是道具。这俩要等到整合之后才能体现。实现方法: 将一张由我们美工画好的界面图加载到... 查看详情
微服务第六章springboot通过spring-data-jpa配置oracle数据源(spring-data-jpa详细介绍)
JPA:JavaPersistenceAPI是java持久化规范。它为java开发人员提供了一种对象/映射工具来管理java应用中的关系数据。目的是为了简化持久化开发工作和整合ORM技术。 SpringDataJPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA... 查看详情
springboot整合jpa
1.编写一个实体类bean和数据表进行映射,并且配置好映射关系packagecom.seegot.springboot06datajpa.entity;importlombok.Data;importjavax.persistence.*;/***@program:springboot-06-data-jpa*@description:*@author:PPZhang*@create:2020-0 查看详情
springboot整合jpa
1.创建SpringBoot项目 2.pom.xml添加JPA依赖,数据库MySQL依赖包<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ 查看详情
springboot整合jpa
1.初始化项目,引入相关依赖项目中引入的依赖关系当中最主要的 spring-boot-starter-data-jpa包主要依赖如下,可以看到JPA的底层主要是通过hibernate实现的。2.创建实体类,利用JPA生成数据表2.1编写实体类,配置好映射关系,从而... 查看详情
springboot-整合jpa
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.sprin 查看详情
springboot数据访问springboot整合jpa(代码片段)
JPA简介SpringDataJPA是SpringData大家族的一部分,它可以轻松实现基于JPA的存储库。该模块用于增强支持基于JPA的数据访问层,它使我们可以更加容易地构建使用数据访问技术的Spring驱动的应用程序。对于普通的开发者而言,自己实... 查看详情
springboot2.0整合jpa
在整合的遇到各种坑,以下是我整合的流程1、pom.xml文件<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency& 查看详情
第六篇:面向对象
第六篇:面向对象 PYTHON-面向对象类绑定方法PYTHON-面向对象继承派生PYTHON-面向对象-练习-王者荣耀对砍游戏 查看详情
springboot整合jpa
导入依赖 新建Person类,包含id,姓名和年龄三个字段: 用@Entity指定为实体类,表示这不是一个普通的bean,而是和数据库有关的,类名默认为数据库表名,也可以用@Table注解直接指定一张具体... 查看详情
springboot2整合jpa(特别完整!)
JPA全称JavaPersistenceAPI.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该API,而不是使用私有供... 查看详情
springboot整合jpa使用多个数据源(代码片段)
...基本的CURD的功能就出来了。在这篇文章中,我们将介绍SpringBoot整合JPA 查看详情
第六篇vggnet——模型精讲
文章目录 查看详情
springboot+jpa+mysql+redis+swagger整合步骤
springboot+jpa+MySQL+swagger框架搭建好之上再整合redis:在电脑上先安装redis:一、在pom.xml中引入redis二、在application.yml里配置redis,单独说明:redis刚一开始安装好是没有设置密码的。否则,会报connection错误。三、在service配置Redis,... 查看详情
springboot整合jpa创建数据库表失败
org.hibernate.tool.schema.spi.CommandAcceptanceException:ErrorexecutingDDL"createtablet_s_depart(idvarchar(255)notnull,primarykey(id))engine=MyISAM"viaJDBCStatement atorg.hibernate.tool.schema.interna 查看详情
kubernetes第六篇:k8s的四种部署策略(代码片段)
...录一、前言二、滚动更新2.1滚动更新2.2实践2.2.1新建两个springboot项目,生成两个镜像2.2.2kubectlapply启动2.2.3将版本修改为v2.0,kubectlapply重新部署三、重新创建3.1重新创建3.2实践3.2.1kubectlapply启动3.2.2将版本修改为v2.0,ku... 查看详情
kubernetes第六篇:k8s的四种部署策略(代码片段)
...录一、前言二、滚动更新2.1滚动更新2.2实践2.2.1新建两个springboot项目,生成两个镜像2.2.2kubectlapply启动2.2.3将版本修改为v2.0,kubectlapply重新部署三、重新创建3.1重新创建3.2实践3.2.1kubectlapply启动3.2.2将版本修改为v2.0,ku... 查看详情
springboot整合jpa+mysql+querydsl数据增删改查
SpringBootJpa是Spring基于ORM框架、Jpa规范的基础上封装的一套Jpa应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用SpringDataJpa可以极大... 查看详情