springboot多态_Java技术-SpringBoot整合JPA

本文介绍了Spring Data JPA的背景与特点,并在SpringBoot项目中详细展示了如何引入JPA依赖,配置数据库,创建实体类,编写DAO、Service及Controller,实现对数据库的增删改查操作。
摘要由CSDN通过智能技术生成

​一、 Spring Data JPA简介

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了Hibernate 的 JPA 技术实现,可使开发者用极简的代码即可实现对数据的访问和操作。

它提供了包括增删改查等在内的常用功能接口,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!

由于微服务系统的广泛应用,服务粒度逐渐细化,多表关联查询的场景一定程度减少。单表查询和单表的数据操作正是JPA的优势。

二、 Spring Data JPA特点

1. 标准化 JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。

2. 容器级特性的支持 JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。

3. 简单方便 JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java类一样简单,没有任何的约束和限制,只需要使用javax.persistence.Entity进行注释,JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易地掌握。JPA基于非侵入式原则设计,因此可以很容易地和其它框架或者容器集成。

4. 查询能力 JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

5. 高级特性 JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

三、 在SpringBoot项目中引入JPA依赖实现对数据库的操作

1. 引入必须的依赖包

org.springframework.boot

spring-boot-starter-data-jpa

org.springframework.boot

spring-boot-starter-web

org.hibernate.validator

hibernate-validator

org.springframework.boot

spring-boot-devtools

runtime

true

mysql

mysql-connector-java

runtime

org.projectlombok

lombok

true

2. 修改application.yml编写配置文件

server:

port: 9004

spring:

jackson:

date-format: yyyy-MM-dd HH:mm:ss

time-zone: GMT+8

datasource:

url: jdbc:mysql://localhost:3306/springbootjpa?serverTimezone=UTC

driver-class-name: com.mysql.cj.jdbc.Driver

username: root

password: 123456aB

jpa:

hibernate:

ddl-auto: validate    # 自动建表用update 成功后换成validate

database: mysql

show-sql: true

# create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

# create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。

# update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。

#要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。

# validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

3. 编写与数据库对应的实体类

@Data

@Entity

@Table(name="tb_user")

public class TbUser {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Integer id;

@NotEmpty(message = "不能为空,不能为null")

@Column(name = "username",nullable = false, length = 20)

private String username;

@Column(name = "password",nullable = false, length = 100)

private String password;

@Column(name = "role",nullable = false, length = 100)

private String role;

private Date createTime;

}

4. 编写dao接口

public interface TbUserDao extends JpaRepository {

}

5. 编写service接口

public interface TbUserService {

TbUser addUser(TbUser tbUser);

void deleteUserById(Integer id);

TbUser findUserById(Integer id);

List users();

}6. 编写service实现类

@Service

public class TbUserServiceImpl implements TbUserService {

@Resource

TbUserDao userDao;

@Override

public TbUser addUser(TbUser tbUser){

TbUser user = userDao.save(tbUser);

return user;

}

@Override

public void deleteUserById(Integer id) {

userDao.deleteById(id);

}

@Override

public TbUser findUserById(Integer id) {

TbUser user = userDao.findById(id).get();

return user;

}

@Override

public List users() {

List users = userDao.findAll();

return users;

}

}

7. 编写controller

@RestController

public class TbUserController {

@Resource

TbUserService userService;

@PostMapping("/add")

public TbUser addUser(TbUser tbUser){

TbUser user = userService.addUser(tbUser);

user.setCreateTime(new Date());

System.out.println("user = " + user);

return user;

}

@PostMapping("/delete/{id}")

public void deleteUserById(@PathVariable(value = "id") Integer id){

userService.deleteUserById(id);

}

@GetMapping("/user/{id}")

public TbUser findUserById(@PathVariable(value = "id") Integer id){

TbUser user = userService.findUserById(id);

return user;

}

@GetMapping("/findAll")

public List users(){

List users = userService.users();

System.out.println("users = " + users);

return users;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值