SpringBoot+Spring Data JPA整合H2数据库的示例代码

作者:花伤情犹在 时间:2024-01-28 19:58:37 

前言

  • H2数据库是一个开源的关系型数据库。H2采用java语言编写,不受平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准

  • 提供JDBC、ODBC访问接口,提供了非常友好的基于web的数据库管理界面

官网:http://www.h2database.com/

SpringBoot+Spring Data JPA整合H2数据库的示例代码

Maven依赖

<!--jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--h2-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

Conroller

@RestController
public class UserController {

@Autowired
   UserRepository userRepository;
  @RequestMapping("/list")
   public List<User> findAll(){
      List<User> userList = userRepository.findAll();
      return userList;
  }
  @RequestMapping("/save")
  public String save(User user){
      userRepository.save(user);
      return "保存成功";
  @RequestMapping("/update")
  public String update(User user){
      return "更新成功";
  @RequestMapping("/delete")
  public String delete(Integer id){
      userRepository.deleteById(id);
      return "删除成功";
}

实体类

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

@Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Integer id;
   private String name;
   private Integer age;
   private Integer gender;
}

Repository

@Repository
public interface UserRepository extends JpaRepository<User,Integer> {

}

数据库脚本文件

架构 (DDL) 脚本资源引用
schema.sql

drop table if exists user;
create table user(
   `id` int primary key auto_increment,
   `name` varchar(255) not null,
   `age` int not null,
   `gender` int not null
);

数据 (DML) 脚本资源引用

insert into user (id,name,age,gender) values (null, '张三',18,1);
insert into user (id,name,age,gender) values (null, '李四',19,1);
insert into user (id,name,age,gender) values (null, '王五',20,1);
insert into user (id,name,age,gender) values (null, '李六',21,1);

配置文件

#---------服务器配置-----------
server.port=8080

#---------数据源配置-----------
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:file:./data;AUTO_SERVER=TRUE
spring.datasource.username=sa
spring.datasource.password=
#架构 (DDL) 脚本资源引用
spring.datasource.schema=classpath:db/schema.sql
#数据 (DML) 脚本资源引用
spring.datasource.data=classpath:db/data.sql
#SQL脚本编码
spring.datasource.sql-script-encoding=UTF-8
#初始化模式
spring.datasource.initialization-mode=ALWAYS
#如果在初始化数据库时发生错误,是否停止
spring.datasource.continue-on-error=true
#---------JPA配置-------------
#要操作的目标数据库
spring.jpa.database=h2
#控制台显示SQL语句
spring.jpa.show-sql=true
#更新或者创建数据表结构
spring.jpa.hibernate.ddl-auto=update
#物理命名策略的完全限定名称
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#是否在启动时初始化架构
spring.jpa.generate-ddl=true
#----------H2配置--------------
#http://localhost:8080/h2-console
spring.h2.console.path=/h2-console
#启用控制台
spring.h2.console.enabled=true

启动项目

SpringBoot+Spring Data JPA整合H2数据库的示例代码

访问H2数据库

访问:http://localhost:8080/h2-console

SpringBoot+Spring Data JPA整合H2数据库的示例代码

查看全部数据

由于设置了数据库脚本,所以SpringBoot项目每次启动都会运行一遍sql文件

#架构 (DDL) 脚本资源引用
spring.datasource.schema=classpath:db/schema.sql
#数据 (DML) 脚本资源引用
spring.datasource.data=classpath:db/data.sql
#SQL脚本编码
spring.datasource.sql-script-encoding=UTF-8
#初始化模式
spring.datasource.initialization-mode=ALWAYS
#如果在初始化数据库时发生错误,是否停止
spring.datasource.continue-on-error=true

SpringBoot+Spring Data JPA整合H2数据库的示例代码

H2数据库文件

数据库文件位置通过spring.datasource.url来指定

spring.datasource.url=jdbc:h2:file:./data;AUTO_SERVER=TRUE

SpringBoot+Spring Data JPA整合H2数据库的示例代码

运行方式

1.在内存中运行
数据库只在内存中运行,关闭连接后数据库将被清空,适合测试环境
连接字符串:

jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1

2.嵌入式
数据库持久化存储为单个文件
连接字符串:

jdbc:h2:file:~/.h2/DBName;AUTO_SERVER=TRUE

3.服务模式
H2支持三种服务模式:

  • web server:此种运行方式支持使用浏览器访问H2 Console

  • TCP server:支持客户端/服务器端的连接方式

  • PG server:支持PostgreSQL客户端

启动tcp服务连接字符串示例:

jdbc:h2:tcp://localhost/~/test 使用用户主目录
jdbc:h2:tcp://localhost//data/test 使用绝对路径

4.连接字符串参数

  • DB_CLOSE_DELAY:要求最后一个正在连接的连接断开后,不要关闭数据库

  • MODE=MySQL:兼容模式,H2兼容多种数据库,该值可以为:DB2、Derby、HSQLDB、MSSQLServer、MySQL、Oracle、PostgreSQL

  • AUTO_RECONNECT=TRUE:连接丢失后自动重新连接

  • AUTO_SERVER=TRUE:启动自动混合模式,允许开启多个连接,该参数不支持在内存中运行模式

  • TRACE_LEVEL_SYSTEM_OUT、TRACE_LEVEL_FILE:输出跟踪日志到控制台或文件, 取值0为OFF,1为ERROR(默认值),2为INFO,3为DEBUG

  • SET TRACE_MAX_FILE_SIZE mb:设置跟踪日志文件的大小,默认为16M

来源:https://blog.csdn.net/qq_31762741/article/details/122967384

标签:SpringBoot,Spring,Data,JPA,H2,数据库
0
投稿

猜你喜欢

  • PHP实现的注册,登录及查询用户资料功能API接口示例

    2024-04-30 08:50:18
  • 基于Python实现剪切板实时监控方法解析

    2023-05-31 16:01:59
  • Selenium常见异常解析及解决方案示范

    2023-06-27 20:09:48
  • 一个无组件上传的ASP代码

    2007-10-09 19:49:00
  • Oracle 随机数

    2009-06-04 10:01:00
  • 详解supervisor使用教程

    2022-02-18 09:12:07
  • Go语言自带测试库testing使用教程

    2024-04-26 17:31:49
  • 一文带你搞懂Python上下文管理器

    2022-11-26 05:15:50
  • mysql数据库 主从复制的配置方法

    2024-01-16 09:24:35
  • Python使用monkey.patch_all()解决协程阻塞问题

    2021-05-11 17:27:19
  • 远程连接mysql错误代码1130的解决方法

    2024-01-14 06:54:05
  • JavaScript/jQuery实现切换页面效果

    2024-04-22 22:23:17
  • MySQL数据库定时备份的实现方法

    2024-01-23 19:38:42
  • bootstrapValidator.min.js表单验证插件

    2024-04-10 13:53:46
  • SQL Server中统计每个表行数的快速方法

    2024-01-19 08:51:21
  • 浅谈python 类方法/静态方法

    2021-02-23 07:00:54
  • 使用Python实现牛顿法求极值

    2021-10-14 15:10:21
  • Python自定义元类的实例讲解

    2021-12-31 13:13:36
  • Python中ROC曲线绘制

    2023-05-28 16:38:15
  • prototype-1.4.0注释版源代码下载

    2007-09-30 14:06:00
  • asp之家 网络编程 m.aspxhome.com