SpringBoot+Spring Data JPA整合H2数据库

x33g5p2x  于2022-02-16 转载在 Spring  
字(4.2k)|赞(0)|评价(0)|浏览(535)

前言

  • H2数据库是一个开源的关系型数据库。H2采用java语言编写,不受平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准
  • 提供JDBC、ODBC访问接口,提供了非常友好的基于web的数据库管理界面

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

Maven依赖

  1. <!--jpa-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-data-jpa</artifactId>
  5. </dependency>
  6. <!--web-->
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-web</artifactId>
  10. </dependency>
  11. <!--h2-->
  12. <dependency>
  13. <groupId>com.h2database</groupId>
  14. <artifactId>h2</artifactId>
  15. <scope>runtime</scope>
  16. </dependency>
  17. <!--lombok-->
  18. <dependency>
  19. <groupId>org.projectlombok</groupId>
  20. <artifactId>lombok</artifactId>
  21. <optional>true</optional>
  22. </dependency>

Conroller

  1. @RestController
  2. public class UserController {
  3. @Autowired
  4. UserRepository userRepository;
  5. @RequestMapping("/list")
  6. public List<User> findAll(){
  7. List<User> userList = userRepository.findAll();
  8. return userList;
  9. }
  10. @RequestMapping("/save")
  11. public String save(User user){
  12. userRepository.save(user);
  13. return "保存成功";
  14. }
  15. @RequestMapping("/update")
  16. public String update(User user){
  17. userRepository.save(user);
  18. return "更新成功";
  19. }
  20. @RequestMapping("/delete")
  21. public String delete(Integer id){
  22. userRepository.deleteById(id);
  23. return "删除成功";
  24. }
  25. }

实体类

  1. @AllArgsConstructor
  2. @NoArgsConstructor
  3. @Entity
  4. @Data
  5. @Table(name = "user")
  6. public class User {
  7. @Id
  8. @GeneratedValue(strategy = GenerationType.IDENTITY)
  9. private Integer id;
  10. private String name;
  11. private Integer age;
  12. private Integer gender;
  13. }

Repository

  1. @Repository
  2. public interface UserRepository extends JpaRepository<User,Integer> {
  3. }

数据库脚本文件

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

  1. drop table if exists user;
  2. create table user(
  3. `id` int primary key auto_increment,
  4. `name` varchar(255) not null,
  5. `age` int not null,
  6. `gender` int not null
  7. );

数据 (DML) 脚本资源引用

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

配置文件

  1. #---------服务器配置-----------
  2. server.port=8080
  3. #---------数据源配置-----------
  4. spring.datasource.driver-class-name=org.h2.Driver
  5. spring.datasource.url=jdbc:h2:file:./data;AUTO_SERVER=TRUE
  6. spring.datasource.username=sa
  7. spring.datasource.password=
  8. #架构 (DDL) 脚本资源引用
  9. spring.datasource.schema=classpath:db/schema.sql
  10. #数据 (DML) 脚本资源引用
  11. spring.datasource.data=classpath:db/data.sql
  12. #SQL脚本编码
  13. spring.datasource.sql-script-encoding=UTF-8
  14. #初始化模式
  15. spring.datasource.initialization-mode=ALWAYS
  16. #如果在初始化数据库时发生错误,是否停止
  17. spring.datasource.continue-on-error=true
  18. #---------JPA配置-------------
  19. #要操作的目标数据库
  20. spring.jpa.database=h2
  21. #控制台显示SQL语句
  22. spring.jpa.show-sql=true
  23. #更新或者创建数据表结构
  24. spring.jpa.hibernate.ddl-auto=update
  25. #物理命名策略的完全限定名称
  26. spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
  27. #是否在启动时初始化架构
  28. spring.jpa.generate-ddl=true
  29. #----------H2配置--------------
  30. #http://localhost:8080/h2-console
  31. spring.h2.console.path=/h2-console
  32. #启用控制台
  33. spring.h2.console.enabled=true

启动项目

访问H2数据库

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

查看全部数据

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

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

H2数据库文件

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

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

运行方式

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

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

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

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

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

  • web server:此种运行方式支持使用浏览器访问H2 Console
  • TCP server:支持客户端/服务器端的连接方式
  • PG server:支持PostgreSQL客户端

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

  1. jdbc:h2:tcp://localhost/~/test 使用用户主目录
  2. 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

相关文章