Springboot 基础7 -- JPA 简单实战

本文介绍了Spring Data JPA如何简化数据访问层代码,通过实例展示了JPA的基础使用,包括配置、实体类定义、接口继承JpaRepository。同时,对比了Hibernate与MyBatis的区别,指出MyBatis适合面向关系的系统设计,而Hibernate更适合构建领域模型类的系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 实现数据接口操作

Spring Data JPA 是SpringData 的子模块,Spring Data JPA 的目标是大大简化了数据访问层代码的编写。作为使用者,我们只需编写自己的repository 接口即可,接口包含一定个性化的查询方法,Spring data JPA 可以实现自动实现查询方法。

JPA 默认使用hibernate 作为ORM 实现。

Hibernate 作为ORM 实现,一般使用Spring Data ,Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC 进行了非常轻量级的对象封装,它将POJO 与数据库表建立映射关系,是一个全自动的orm 框架,hibernate 可以自动生成sql 语句,自动执行,使得开发者使用对象编程思维来操作数据库。

Mybatis 是一款优秀的持久层框架,它支持SQL,存储过程以及高级映射。

Mybatis 与 Spring Data JPA 的比较其实就是Hibernate 与 Mybatis 的比较:

框架MyBatisHibernate
基本概念、目标能够灵活编写sql 语句,并将sql 的入参和查询结果映射成POJOs 的一个持久层框架自动化更强、更加高级,省去sql 编写,通过面向对象的方式操作关系型数据库
抽象层面向关系的面向对象的
解决问题解决数据的高效解决计算机逻辑问题

Hibernate 的使用步骤:

1. 分析、抽象和归纳出系统中业务概念,并梳理出各个业务概念之间的关系 - 创建概念模型
2. 根据概念模型,进一步细化设计系统中的对象以及类的依赖关系 - 创建设计模型
3. 将设计好的类映射到数据库的表和字段配置好
4. hibernate 可以配置信息自动生成数据库表,此时可以集中去梳理一下表关系,观察一下表关系是否合理,并适当调整一下类和表的映射关系,重新生成表结构

MyBatis 的使用步骤:

1. 综合整个系统分析出系统需要存储的数据项目,并画出E-R 关系图,设计表结构
2. 根据上一步设计的表结构,创建数据库、表
3. 编写MyBatis的SQL 映射文件,POJO 以及数据库操作对应的接口方法 

综上: MyBatis 更适合于面向关系(面向数据、面向过程)的系统设计方法,这样的系统称为”事务脚本“系统。

Hibernate 更适合于构建领域模型类的系统。

Java persistence api (JPA) , 是用来操作数据库层的。

步骤一:

完成pom.xml 文件和application.yml 文件。

pom.xml 文件

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
  </dependency>
</dependencies>

application.yml 文件

spring:
    datasource:
        url:jdbc:mysql://localhost:3306/testdemo?useUnicode=true&characterEncoding=utf-8
        username: root
        password: 123456
    jpa:
        hibernate:
            ddl-auto: update
        show-sql: true

说明: ddl-auto: update 自动建表

show-sql: true 表示要在控制台打印sql

步骤二:

实体类

创建一个实体类

@Entity
@Data
@Table(name = "user")
public class User{
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer usreId;
  
  @Column(name = "user_name", length = 20)
  private String userName;
  
  @Column(name = "user_age", length = 10)
  private String userAge;
  
}

说明: @Entity 表示实体,@Table 是表名, 如果不写就会生成类名小写的表。

@GeneratedValue(strategy = GenerationType.IDENTITY) 表示这是以id 字段并且逐渐自增。

@Column(name = "user_name", length = 20) 指明了表中的字段名称和大小

JpaRepository

写一个接口,继承JpaRepository,以实现增删改查的操作。

public interface UserRepository extends JpaRepository<User, Integer>{
  
}

一个主类实现运行效果

@SpringBootApplication
public class SpringJPAMain{
  
  public static void main(String[] args){
    SpringApplication.run(SpringJPAMain.class.args);
  }
}

出现问题:

Caused by: java.sql.SQLException: Access denied for user xxx@xxx(using password: YES) 这样的报错,
在mysql 控制台中输入一下命令即可:
grant all privileges on *.*  to 'root'@'%' with grant option

运行成功后,可以在控制台看到的信息:

Hibernate: create table user(id integer not null auto_increment, user_name varchar(50), user_age varchar(10), primary key(id) engine=Interger)

此时数据库会生成一个user 表,字段分别是 id (主键)、user_name、user_age

给表进行增查功能

代码是controller 中实现

@RestController
@RequestMapping("/user")
public class UserController{
  
  @Autowired
  private UserRepository userRepository;
  
  @PostMappling("/insertUser")
  public User insertUser(@RequestBody User user){
    userRepository.save(user);
    
    return user;
  }
  
  @GetMappling("/getUser/{id}")
  public Optional<User> getUser(@PathVariable("id") Integer id){
    Optional<User> user = userRepository.findById(id);
    
    return user;
  }
}

测试案例

发送一个post请求,增加一个user

{
  "userName":"xiaoming",
  "userAge":"20"
}

获取一个user 请求

http://localhost:8080/user/getUser/1

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值