IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot 整合 H2 嵌入式关系型数据库 -> 正文阅读

[Java知识库]SpringBoot 整合 H2 嵌入式关系型数据库


GitHub: link. 欢迎star

注意:本篇博客风格(不多比比就是撸代码!!!)

一、maven依赖

        <!-- h2 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>2.1.214</version>
        </dependency>

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

二、application.yml

spring:
  profiles:
    active: dev
  datasource:
    # 内存模式,进程关闭数据丢失
    # url: jdbc:h2:mem:data_h2
    # 嵌入模式,当前项目目录,进程关闭数据保留
    url: jdbc:h2:./data_h2
    username: root
    password: root
    driver-class-name: org.h2.Driver
  h2:
    console:
      # 开启web控制台
      enabled: true
      # 访问路径url+/h2
      path: /h2
      settings:
        web-allow-others: true
  jpa:
    # 更新表结构,可以在控制台执行修改表结构的SQL语句
    hibernate:
      ddl-auto: update
    show-sql: true

三、实体类(映射表)

- H2Table.java

import com.andon.springbootutil.constant.DataType;
import lombok.*;
import lombok.experimental.FieldDefaults;
import org.hibernate.annotations.GenericGenerator;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

/**
 * @author Andon
 * 2022/10/26
 */
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "h2_table")
@FieldDefaults(level = AccessLevel.PRIVATE)
@EntityListeners(AuditingEntityListener.class)
public class H2Table implements Serializable {

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    @Column(columnDefinition = "VARCHAR(36) COMMENT 'ID'", updatable = false, nullable = false, unique = true)
    String id;

    @Column(name = "name", columnDefinition = "VARCHAR(255) COMMENT '名称'", nullable = false, unique = true)
    String name;

    @Enumerated(EnumType.STRING)
    @Column(columnDefinition = "VARCHAR(100) COMMENT '类型'", nullable = false)
    DataType dataType;

    @Column(columnDefinition = "BOOLEAN DEFAULT FALSE COMMENT '是否是调试数据'")
    Boolean isDebug;

    @Column(name = "remark", columnDefinition = "VARCHAR(255) COMMENT '备注'")
    String remark;

    @CreatedDate
    @Column(updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    Date createTime;

    @LastModifiedDate
    @Temporal(TemporalType.TIMESTAMP)
    Date updateTime;
}
  • DataType.java
/**
 * @author Andon
 * 2022/10/26
 */
public enum DataType {
    S,
    A,
    B,
    C,
    D
}

四、Repository

import com.andon.springbootutil.entity.H2Table;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * @author Andon
 * 2022/10/26
 */
public interface H2TableRepository extends JpaRepository<H2Table, String> {
}

五、启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableJpaAuditing
@SpringBootApplication
public class SpringBootUtilApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootUtilApplication.class, args);
    }

}

六、接口测试类(Controller、Service)

- TestH2Controller.java

import com.andon.springbootutil.constant.DataType;
import com.andon.springbootutil.domain.ResponseStandard;
import com.andon.springbootutil.entity.H2Table;
import com.andon.springbootutil.service.TestH2Service;
import io.swagger.annotations.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

/**
 * @author Andon
 * 2022/10/26
 */
@Api(tags = "H2")
@RestController
@RequestMapping("/h2-test")
@RequiredArgsConstructor
public class TestH2Controller {

    private final TestH2Service testH2Service;

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class H2TableAddVO implements Serializable {
        @NotBlank(message = "名称不能为空")
        @ApiModelProperty(value = "名称", required = true)
        String name;
        @NotNull(message = "数据类型不能为空")
        @ApiModelProperty(value = "数据类型", example = "S", required = true)
        DataType dataType;
    }

    @ApiOperation("新增")
    @PostMapping("/add")
    public ResponseStandard<H2Table> add(@Valid @RequestBody H2TableAddVO h2TableAddVO) {
        return ResponseStandard.successResponse(testH2Service.add(h2TableAddVO));
    }

    @ApiOperation("删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "ID", required = true, example = "asd-uio-zxc"),
    })
    @DeleteMapping("/delete")
    public ResponseStandard<Boolean> delete(@RequestParam(name = "id") String id) {
        testH2Service.delete(id);
        return ResponseStandard.successResponse(true);
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public static class H2TableUpdateVO implements Serializable {
        @NotBlank(message = "ID不能为空")
        @ApiModelProperty(value = "ID", required = true)
        String id;
        @NotBlank(message = "名称不能为空")
        @ApiModelProperty(value = "名称", required = true)
        String name;
        @NotNull(message = "数据类型不能为空")
        @ApiModelProperty(value = "数据类型", example = "S", required = true)
        DataType dataType;
    }

    @ApiOperation("修改")
    @PostMapping("/update")
    public ResponseStandard<H2Table> update(@Valid @RequestBody H2TableUpdateVO h2TableUpdateVO) {
        return ResponseStandard.successResponse(testH2Service.update(h2TableUpdateVO));
    }

    @ApiOperation("查询")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "ID", required = true, example = "asd-uio-zxc"),
    })
    @GetMapping("/query")
    public ResponseStandard<H2Table> query(@RequestParam(name = "id") String id) {
        return ResponseStandard.successResponse(testH2Service.query(id));
    }

    @ApiOperation("查询所有")
    @GetMapping("/queryAll")
    public ResponseStandard<List<H2Table>> queryAll() {
        return testH2Service.queryAll();
    }
}

- TestH2Service.java

import com.andon.springbootutil.controller.TestH2Controller;
import com.andon.springbootutil.domain.ResponseStandard;
import com.andon.springbootutil.dto.mapstruct.H2TableMapper;
import com.andon.springbootutil.entity.H2Table;
import com.andon.springbootutil.repository.H2TableRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import java.util.List;
import java.util.Optional;

/**
 * @author Andon
 * 2022/10/26
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class TestH2Service {

    private final H2TableMapper h2TableMapper;
    private final H2TableRepository h2TableRepository;

    public H2Table add(TestH2Controller.H2TableAddVO h2TableAddVO) {
        H2Table h2Table = h2TableMapper.h2TableAddVOToH2Table(h2TableAddVO);
        return h2TableRepository.saveAndFlush(h2Table);
    }

    public void delete(String id) {
        h2TableRepository.deleteById(id);
    }

    public H2Table update(TestH2Controller.H2TableUpdateVO h2TableUpdateVO) {
        H2Table h2Table = h2TableMapper.h2TableUpdateVOToH2Table(h2TableUpdateVO);
        return h2TableRepository.saveAndFlush(h2Table);
    }

    public H2Table query(String id) {
        Optional<H2Table> h2TableOptional = h2TableRepository.findById(id);
        Assert.isTrue(h2TableOptional.isPresent(), "ID不存在");
        return h2TableOptional.get();
    }

    public ResponseStandard<List<H2Table>> queryAll() {
        List<H2Table> h2Tables = h2TableRepository.findAll();
        ResponseStandard<List<H2Table>> response = ResponseStandard.successResponse(h2Tables);
        response.setTotal(h2Tables.size());
        return response;
    }
}

- H2TableMapper.java

import com.andon.springbootutil.controller.TestH2Controller;
import com.andon.springbootutil.entity.H2Table;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;

/**
 * @author Andon
 * 2022/10/26
 */
@Mapper(componentModel = "spring")
public abstract class H2TableMapper {

    @Mappings({
            @Mapping(target = "id", ignore = true),
            @Mapping(target = "isDebug", ignore = true),
            @Mapping(target = "remark", ignore = true),
            @Mapping(target = "createTime", ignore = true),
            @Mapping(target = "updateTime", ignore = true)
    })
    public abstract H2Table h2TableAddVOToH2Table(TestH2Controller.H2TableAddVO h2TableAddVO);

    @Mapping(target = "isDebug", ignore = true)
    @Mapping(target = "createTime", ignore = true)
    @Mapping(target = "remark", ignore = true)
    @Mapping(target = "updateTime", ignore = true)
    public abstract H2Table h2TableUpdateVOToH2Table(TestH2Controller.H2TableUpdateVO h2TableUpdateVO);
}

七、测试

1.启动项目

在这里插入图片描述

2.地址栏输入url+配置文件path,并配置驱动类/地址/用户名/密码

在这里插入图片描述

3.进入h2控制台

在这里插入图片描述

4.通过写的测试接口,进行增删改查

在这里插入图片描述

5.在h2控制台通过sql语句查询

81c3eac8-f5c7-4d0a-acb2-66f3b025a441

GitHub: link. 欢迎star

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:40:46  更:2022-10-31 11:42:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:48:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码