首页 > 其他分享 >SpringBoot整合JPA实现CRUD详解

SpringBoot整合JPA实现CRUD详解

时间:2024-09-27 21:20:03浏览次数:3  
标签:goods SpringBoot JPA CRUD org import cjq com public

SpringBoot版本是2.0以上(2.6.13)

JDK是1.8

一、依赖

<dependencies>

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

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

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <!-- mysql-connector -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

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

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

    </dependencies>

二、配置文件

注意:使用的是application.yml

           
1.数据库连接池,这次例子里面采用的是springboot2.0版本后默认整合的hikari连接池


2.ddl-auto,

create:每次运行程序时,都会重新创建表,故而数据会丢失

create-drop:每次运行程序时会先创建表结构,然后待程序结束时清空表

upadte:每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新(推荐使用)

validate:运行程序会校验数据与数据库的字段类型是否相同,字段不同会报错

none: 禁用DDL处理

3.database-platform,这项是配置对应连接数据库的方言,也就是语法、规则等等。 这里我们使用mysql数据库,方言项记得使用MySQL5InnoDBDialect,这样才能对应起InnoDB。

# 应用服务 WEB 访问端口
server:
  port: 8081

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/数据库名?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
    hikari: # springboot 2.0 整合了hikari ,据说这是目前性能最好的java数据库连接池
      username: root
      password: root
      minimum-idle: 5  # 最小空闲连接数量
      idle-timeout: 180000 # 空闲连接存活最大时间,默认600000(10分钟)
      maximum-pool-size: 10 # 连接池最大连接数,默认是10
      auto-commit: true # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
      pool-name: MyHikariCP # 连接池名称
      max-lifetime: 1800000 # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
      connection-timeout: 30000 # 数据库连接超时时间,默认30秒,即30000
      connection-test-query: SELECT 1 #连接池每分配一条连接前执行的查询语句(如:SELECT 1),以验证该连接是否是有效的。如果你的驱动程序支持 JDBC4,HikariCP 强烈建议我们不要设置此属性
  jpa:
    hibernate:
      ddl-auto: update  # 第一次建表create  后面用update,要不然每次重启都会新建表
    show-sql: true #打印执行的sql语句
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect #设置数据库方言  记住必须要使用 MySQL5InnoDBDialect 指定数据库类型对应InnoDB  ;如果使用MySQLDialect 则对应的是MyISAM

#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis:
  mapper-locations: classpath:mappers/*xml
#指定Mybatis的实体目录
  type-aliases-package: com.cjq.mybatis.entity





三、实体类

注意:

1.注解@Entity 表示是实体类
2.注解@Table 指定关联的数据库的表名(name=表名)
3.注解@Id  定义一条记录的唯一标识,并结合注解@GeneratedValue将其设置为自动生成
 4.注解@Column: 标注在字段上,可以指定字段名和长度 
package com.cjq.entity;

import lombok.Data;
import lombok.ToString;

import javax.persistence.*;
import java.math.BigDecimal;

@Data
@ToString
@Entity
@Table(name ="t_goods")
public class Goods {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //自增主键
    private Long goodsId;
    /**
     * @Column 注解可以接受多个参数,常用的参数包括:
     * name:指定数据库表中的列名。
     * nullable:指定该列是否可为空,默认为 true。
     * unique:指定该列是否唯一,默认为 false。
     * length:指定该列的长度。
     * precision 和 scale:用于精度和刻度的数字列。
     * precision属性和scale属性表⽰精度,
     * 当字段类型为double时,precision表⽰数值的总长度,scale表⽰⼩数点所占的位数。
     */
    @Column(name = "goods_name",length = 50,nullable = false)
    private String goodsName;
    @Column(name = "goods_num")
    private Integer goodsNum;
    @Column(name = "goods_price")
    private BigDecimal goodsPrice;
}

四、控制层(Controller)

package com.cjq.controller;

import com.cjq.entity.Goods;
import com.cjq.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class GoodsController {
    @Autowired
    private GoodsService goodsService;

    /**
     * 查询列表
     * @return
     */
    @GetMapping("/findAll")
    public List<Goods> findAll(){
        return goodsService.findAll();
    }

    /**
     * 添加/修改
     * 在测试时,有id就修改,没有就添加
     * @param goods
     */
    @PostMapping("/insert")
    public void insert(@RequestBody Goods goods){
        goodsService.save(goods);
    }
    
    /**
     * 单删
     * @param goodsId
     */
    @DeleteMapping("/delete/{goodsId}")
    public void delete(@PathVariable Long goodsId){ goodsService.delete(goodsId); }








}

五、业务层(Service、ServiceImpl)

package com.cjq.service;

import com.cjq.entity.Goods;

import java.util.List;

public interface GoodsService {

    /**
     * 查询列表
     * @return
     */
    List<Goods> findAll();

    /**
     * 添加
     * @param goods
     */
    void save(Goods goods);

    /**
     * 单删
     * @param goodsId
     */
    void delete(Long goodsId);


}
package com.cjq.service.impl;

import com.cjq.mapper.GoodsMapper;
import com.cjq.entity.Goods;
import com.cjq.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class GoodsServiceImpl implements GoodsService {
    @Autowired
    private GoodsMapper goodsMapper;

    @Override
    public List<Goods> findAll() {
        return goodsMapper.findAll();
    }

    @Override
    public void save(Goods goods) {
        goodsMapper.save(goods);
    }

    @Override
    public void delete(Long goodsId) {
        goodsMapper.deleteById(goodsId);
    }



}

六、持久层(Mapper)

package com.cjq.mapper;

import com.cjq.entity.Goods;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Component;

@Component
public interface GoodsMapper extends JpaRepository<Goods,Long> {

}

七、为什么持久层不用写接口

JpaRepository继承于PagingAndSortingRepository,它提供了分页和排序功能。


PagingAndSortingRepository继承于CrudRepository,它提供了简单的CRUD功能。


定义的接口继承于Repository,所以它传递性的继承了上面所有接口,并拥有这些接口的所有方法。

到这里就结束啦,感谢各位小伙伴的观看!!!

标签:goods,SpringBoot,JPA,CRUD,org,import,cjq,com,public
From: https://blog.csdn.net/C1226786216/article/details/142601900

相关文章

  • springboot+vue柚趣商城【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为推动全球经济增长的重要力量。特别是在“新零售”与“社交电商”兴起的背景下,消费者对购物体验的要求日益提升,不仅追求商品的多样性与品质,更渴望在购物过程中获得乐趣与社交互动。柚趣商城应运......
  • springboot+vue幼儿园管理系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着社会对学前教育重视程度的不断提升,幼儿园作为儿童早期教育的重要场所,其管理水平直接影响着教育质量与幼儿的发展。当前,许多幼儿园仍采用传统的人工管理方式,不仅效率低下,还容易出现信息遗漏、统计错误等问题。在信息化时代背景下,构......
  • springboot+vue幼儿学前教育系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景:随着社会对幼儿教育重视程度的日益提升,构建一个高效、全面、安全的幼儿学前教育系统显得尤为重要。当前,传统幼儿教育管理模式面临着信息孤岛、家校沟通不畅、教育资源分配不均等问题,难以满足现代家庭对高质量学前教育的需求。特别是在......
  • 基于Java+Springboot+Vue开发的健身房管理系统源码+参考文章1.3万字
    项目简介该项目是基于Java+Springboot+Vue开发的健身房管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的健身房管理系统项目,大学生可以在实践中学习和提升......
  • 基于Java+Springboot+Vue开发的家具管理系统源码+开发文档
    项目简介该项目是基于Java+Springboot+Vue开发的家具管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的家具管理系统项目,大学生可以在实践中学习和提升自己......
  • 基于Java+Springboot+Vue开发的网上商城管理系统源码+文章
    项目简介该项目是基于Java+Springboot+Vue开发的网上商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的网上商城管理系统项目,大学生可以在实践中学习和......
  • 基于Java+Springboot+Vue开发的医院门诊预约挂号系统源码+参考文章1.2万字
    项目简介该项目是基于Java+Springboot+Vue开发的医院门诊预约挂号系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的门诊预约挂号管理系统项目,大学生可以在实践......
  • springboot+vue游泳馆管理系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着人们生活水平的提高和健康意识的增强,游泳作为一项全身性的运动,日益受到广大市民的青睐。游泳馆作为提供游泳服务的公共场所,其运营管理和服务质量直接影响到用户体验及健身效果。然而,传统的人工管理模式存在效率低下、信息滞后、容......
  • springboot+vue游戏资讯网站【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着互联网的飞速发展,电子游戏已成为全球范围内广泛流行的一种娱乐方式,其影响力渗透到了文化、社交、经济等多个领域。在这个背景下,游戏资讯的获取与传播变得尤为重要。玩家群体对于新游戏的发布、游戏攻略、赛事活动及行业动态等信息......
  • springboot+vue游戏商城平台【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着互联网的飞速发展和智能设备的普及,游戏产业迎来了前所未有的繁荣期。游戏不仅成为人们休闲娱乐的重要方式,也逐渐形成了一个庞大的经济体系。在这个背景下,游戏商城平台作为连接游戏开发商与玩家的桥梁,其重要性日益凸显。然而,市场上......