SpringBoot整合H2数据库
花伤情犹在 人气:4前言
- H2数据库是一个开源的关系型数据库。H2采用java语言编写,不受平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准
- 提供JDBC、ODBC访问接口,提供了非常友好的基于web的数据库管理界面
官网:http://www.h2database.com/
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
启动项目
访问H2数据库
访问:http://localhost:8080/h2-console
查看全部数据
由于设置了数据库脚本,所以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
H2数据库文件
数据库文件位置通过spring.datasource.url
来指定
spring.datasource.url=jdbc:h2:file:./data;AUTO_SERVER=TRUE
运行方式
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、PostgreSQLAUTO_RECONNECT=TRUE
:连接丢失后自动重新连接AUTO_SERVER=TRUE
:启动自动混合模式,允许开启多个连接,该参数不支持在内存中运行模式TRACE_LEVEL_SYSTEM_OUT、TRACE_LEVEL_FILE
:输出跟踪日志到控制台或文件, 取值0为OFF,1为ERROR(默认值),2为INFO,3为DEBUGSET TRACE_MAX_FILE_SIZE mb
:设置跟踪日志文件的大小,默认为16M
加载全部内容