SpringBoot整合Jpa实现增删改查功能(提供Gitee源码)

news/2024/5/17 15:54:18 标签: spring boot, gitee, 后端, spring, mysql, java

前言:在日常开发中,总是撰写一些简单的SQL会非常耗时间,Jpa可以完美的帮我们提高开发的效率,对于常规的SQL不需要我们自己撰写,相对于MyBatis有着更简单易用的功能,但是MyBatis自由度相对于Jpa会更高一些,所以Jpa比较适用于一些中小型的项目开发,提高开发人员的开发效率,下面我就完整的介绍一下SpringBoot是如何整合Jpa来实现完整的增删改查功能的。 

目录

一、导入pom依赖

二、yml配置文件

三、表结构SQL

四、User实体类

五、Dao持久层

六、使用示例

6.1、查询名为张三的用户

6.2、分页查询数据

6.3、自定义SQL查询

6.4、新增一条用户数据

6.5、修改一条用户数据

6.6、删除一条用户数据

七、Gitee源码 

八、总结


一、导入pom依赖

完整代码:

<dependencies>

        <!-- JPA -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- MySQL驱动依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

        <!-- lombok依赖包 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
    </dependencies>

二、yml配置文件

完整代码:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/数据库名?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: 用户名
    password: 密码
  # JPA配置
  jpa:
    # 在建表的时候,将默认的存储引擎切换为InnoDB
    database-platform: org.hibernate.dialect.MySQLDialect
    # 数据源
    database: mysql
    # 控制台显示sql
    show-sql: true
    hibernate:
      # 更新或创建表结构
      ddl-auto: update

三、表结构SQL

完整代码:

-- jpa.`user` definition

CREATE TABLE `user` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL,
  `sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `address` varchar(100) DEFAULT NULL,
  `age` bigint NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

四、User实体类

常见用于实体类注解如下:

1、@Entity:用于将一个类标记为JPA实体类,表示这个类将映射到数据库中的一个表。在JPA中,实体类必须使用@Entity注解进行标记,以便JPA能够识别并管理它。

2、@Table:用于指定实体类对应的数据库表的名称和约束。

name:指定表的名称。

schema:指定表所在的数据库模式。

catalog:指定表所在的数据库目录。

uniqueConstraints:指定表的唯一约束。

3、@Column:用于指定实体类属性与数据库表字段的映射关系。

name:指定字段的名称。

nullable:指定字段是否可为空。

unique:指定字段是否唯一。

length:指定字段的长度。

precision:指定字段的精度。

scale:指定字段的小数位数。

4、@Id:用于指定实体类属性作为主键。

5、@GeneratedValue:用于指定主键的生成策略。

strategy:指定主键生成策略,如AUTO、IDENTITY、SEQUENCE等。

6、@Transient:用于指定实体类属性不需要持久化到数据库。

7、@Access:用于指定属性的访问方式,如FIELD、PROPERTY等。

8、@Temporal:用于指定实体类属性与数据库表字段的日期/时间类型映射。

value:指定日期/时间类型,如DATE、TIME、TIMESTAMP等。

9、@Enumerated:用于指定实体类属性与数据库表字段的枚举类型映射。

value:指定枚举类型映射方式,如ORDINAL、STRING等。

10、@Embedded:用于指定实体类属性为嵌入式对象。

11、@Embeddable:用于指定嵌入式对象。

12、@OneToOne:用于指定实体类之间的一对一关系。

13、@JoinColumn:用于指定外键列的名称和约束。

14、@OneToMany:用于指定实体类之间的一对多关系。

15、@JoinColumn:用于指定外键列的名称和约束。

16、@OrderBy:用于指定集合属性的排序方式。

17、@ManyToOne:用于指定实体类之间的多对一关系。

18、@JoinColumn:用于指定外键列的名称和约束。

19、@ManyToMany:用于指定实体类之间的多对多关系。

20、@JoinTable:用于指定中间表的名称和约束。

21、@JoinColumn:用于指定外键列的名称和约束。

完整代码:

java">package com.example.jpa.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "user")
public class User {

    @Id
    @Column(name = "id",nullable = false)
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username",nullable = false,length = 100)
    private String username;

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

    @Column(name = "sex",nullable = false,length = 1)
    private String sex;

    @Column(name = "address",length = 100)
    private String address;

    @Column(name = "age",nullable = false)
    private int age;
}

五、Dao持久层

完整代码:

java">package com.example.jpa.dao;

import com.example.jpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface UserRepository extends JpaRepository<User,Long> {

    /**
     * 根据用户名去查询用户信息
     * @return
     */
    public User findUserByUsername(@Param("username") String username);
    
    /**
     * 自定义SQL查询
     * @return
     */
    @Query(value="select * from user where address like %:address%",nativeQuery=true)
    List<User> findUserByAddressSQL(@Param("address") String address);


}

六、使用示例

以下列举一些基本的增删改查功能。

6.1、查询名为张三的用户

完整代码:

java">package com.example.jpa;

import com.example.jpa.dao.UserRepository;
import com.example.jpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;

@SpringBootTest
class JpaApplicationTests {

    @Resource
    private UserRepository userRepository;

    @Test
    void contextLoads() {
        User user = userRepository.findUserByUsername("张三");
        System.out.println(user);
    }

}

6.2、分页查询数据

完整代码:

java">package com.example.jpa;

import com.example.jpa.dao.UserRepository;
import com.example.jpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import javax.annotation.Resource;
import java.util.List;

@SpringBootTest
class JpaApplicationTests {

    @Resource
    private UserRepository userRepository;

    @Test
    void contextLoads() {
        Pageable pageable = PageRequest.of(1, 10);
        Page<User> userPage = userRepository.findAll(pageable);
        List<User> userList = userPage.getContent();
    }

}

6.3、自定义SQL查询

完整代码:

java">package com.example.jpa;

import com.example.jpa.dao.UserRepository;
import com.example.jpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;

@SpringBootTest
class JpaApplicationTests {

    @Resource
    private UserRepository userRepository;

    @Test
    void contextLoads() {
        List<User> userList = userRepository.findUserByAddressSQL("江苏");
    }

}

6.4、新增一条用户数据

完整代码:

java">package com.example.jpa;

import com.example.jpa.dao.UserRepository;
import com.example.jpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.*;

@SpringBootTest
class JpaApplicationTests {

    @Resource
    private UserRepository userRepository;

    @Test
    void contextLoads() {
        User user = new User();
        user.setUsername("李四");
        user.setPassword(UUID.randomUUID().toString());
        user.setAddress("江苏南通");
        user.setAge(18);
        user.setSex("男");
        userRepository.save(user);
    }

}

6.5、修改一条用户数据

完整代码:

java">package com.example.jpa;

import com.example.jpa.dao.UserRepository;
import com.example.jpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.UUID;

@SpringBootTest
class JpaApplicationTests {

    @Resource
    private UserRepository userRepository;

    @Test
    void contextLoads() {
        User findUserByUsername = userRepository.findUserByUsername("张三");
        findUserByUsername.setPassword(UUID.randomUUID().toString());
        userRepository.save(findUserByUsername);
    }

}

6.6、删除一条用户数据

完整代码:

java">package com.example.jpa;

import com.example.jpa.dao.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;

@SpringBootTest
class JpaApplicationTests {

    @Resource
    private UserRepository userRepository;

    @Test
    void contextLoads() {
        userRepository.deleteById(18L);
    }

}

七、Gitee源码 

码云地址:SpringBoot整合Jpa实现增删改查功能

八、总结

以上就是我对SpringBoot整合Jpa实现增删改查基本功能分享,如有问题,欢迎评论区讨论!


http://www.niftyadmin.cn/n/4989502.html

相关文章

Linux命令awk详细用法

简介 awk 是一种强大的文本处理工具&#xff0c;用于在命令行环境下对文件或数据流进行逐行处理和分析。它是由 Alfred Aho、Peter Weinberger 和 Brian Kernighan 在 1977 年开发的&#xff0c;并以他们三人的姓氏命名。awk 在 Unix/Linux 系统中非常常见&#xff0c;也有 Win…

【阅读笔记】John Carmack和Edward Kmett的成为编程高手的建议

2023年8月31日&#xff0c;周四晚上 本次阅读的文章来自&#xff1a; 那些编程水平很高的程序员是怎么训练出来的? - IreneGarcia的回答 - 知乎 https://www.zhihu.com/question/351504112/answer/2798591054 John Carmack Write lots of code. Clone existing things as exe…

苍穹外卖01-项目概述、环境搭建

项目概述、环境搭建 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; 管理端-外卖商家使用用户端-点餐用户使用当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一名软…

Scala集合继承体系图

Scala集合简介 1&#xff09; Scala 的集合有三大类&#xff1a;序列 Seq、集Set、映射 Map&#xff0c;所有的集合都扩展自 Iterable特质。 2&#xff09; 对于几乎所有的集合类&#xff0c;Scala 都同时提供了可变和不可变的版本&#xff0c;分别位于以下两个包 不可变集合…

vue3动态路由警告问题

{ path: "/:pathMatch(.*)*", // 必备 component: () > import("/views/error/404.vue"), }, 路由里添加

OpenCV(九):LUT查找表

LUT&#xff08;Look-Up Table&#xff09;查找表是OpenCV中一种常用的图像处理方法&#xff0c;用于对图像进行像素级别的颜色映射或图像增强操作。LUT查找表可以实现快速、高效的颜色转换和像素操作&#xff0c;尤其在处理大量像素的情况下具有优势。以下是关于OpenCV LUT查找…

如何做好银行统一报送系统UI设计

北京蓝蓝设计公司是一支由清华美院毕业的专业团队组成的设计公司。我们的设计师们在金融银行软件领域拥有12年的工作经验和丰富的行业知识。 在工作中我们常常思考银行金融反洗钱软件用户使用痛点是什么&#xff1f;我们发现用户的使用痛点往往是&#xff1a; 1功能入口不清晰…

【Vue】集成百度地图

Vue 集成 百度地图 1、获取百度地图 ak 密钥 2、登录网址 https://lbsyun.baidu.com/ 3、注册百度地图开放平台账号&#xff0c;填写认证信息&#xff0c;并且创建应用 安装 npm install vue-baidu-map --savemain.js import BaiduMap from vue-baidu-map;Vue.use(BaiduM…