山西网站建设服务公司,百度网络营销中心官网,商城网站程序,东莞社保官方网站H2数据库特征
用比较简洁的话来介绍h2数据库#xff0c;就是一款轻量级的内存数据库#xff0c;支持标准的SQL语法和JDBC API#xff0c;工业领域中#xff0c;一般会使用h2来进行单元测试。
这里贴一下h2数据库的主要特征
Very fast database engineOpen sourceWritten…H2数据库特征
用比较简洁的话来介绍h2数据库就是一款轻量级的内存数据库支持标准的SQL语法和JDBC API工业领域中一般会使用h2来进行单元测试。
这里贴一下h2数据库的主要特征
Very fast database engineOpen sourceWritten in JavaSupports standard SQL, JDBC APIEmbedded and Server mode, Clustering supportStrong security featuresThe PostgreSQL ODBC driver can be usedMulti version concurrency
还有一些附加的特征也列一下
Disk based or in-memory databases and tables, read-only database support, temporary tablesTransaction support (read uncommitted, read committed, repeatable read, snapshot), 2-phase-commitMultiple connections, row-level lockingCost based optimizer, using a genetic algorithm for complex queries, zero-administrationScrollable and updatable result set support, large result set, external result sorting, functions can return a result setEncrypted database (AES), SHA-256 password encryption, encryption functions, SSL
H2数据库的两种连接模式
内嵌模式 Embedded Mode 在内嵌模式中h2数据库和应用程序是在一个JVM进程中这种模式的优点就是速度极快缺点也是显而易见的因为和应用程序在同一个进程中是会共享内存、CPU、线程等资源的如果共享资源没有协调好很有可能就会造成数据库不可用甚至崩溃。 服务器模式 Server Mode 在服务器模式中应用程序是通过JDBC的方式连接h2数据库相比内嵌方式这种模式的速率会有所降低因为有数据传输的损耗。
可能还会有一些资料介绍说有第三种混合模式第三种混合模式是针对两个应用来说的第一个应用使用内嵌的方式连接h2数据库另外一个应用通过服务器模式连接h2数据库其实本质还是这两种模式。
H2数据库集成springboot
pom依赖
dependencygroupIdcom.h2database/groupIdartifactIdh2/artifactIdversion2.2.220/version
/dependency
配置文件
server:port: 9090mybatis:type-aliases-package: com.tml.mouseDemo.modelmapper-locations: classpath:mapper/*.xmlspring:datasource:driver-class-name: org.h2.Driverurl: jdbc:h2:mem:db_users;MODEMYSQL;INITRUNSCRIPT FROM classpath:init_table.sqlusername: tmlpassword: helloTmlh2:console:enabled: true在单元测试中一般都是使用内嵌内存模式内存模式不会造成数据的污染因为数据会随着程序的结束而销毁
这里的init_table.sql是H2的初始化脚本可以初始化单元测试用例需要的用例数据也贴一下文本
create table t_user
(id int not null primary key auto_increment,user_name varchar(100),password varchar(100),status int,create_time datetime);insert into t_user (user_name,password,status,create_time) values (tml,hello world,1,now());
初始化脚本init_table.sql和配置文件application.yml的层级关系如下图 mapper接口
package com.tml.mouseDemo.mapper;import com.tml.mouseDemo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;Mapper
public interface UserMapper {ListUser listByName(Param(userName) String userName);User getOneUser(Param(uid) Long uid);}实体类
package com.tml.mouseDemo.model;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;Data
AllArgsConstructor
NoArgsConstructor
public class User implements Serializable {private static final long serialVersionUID -4489033966046239802L;private Long id;private String userName;private String password;private Integer status;private Date createTime;}Mapper XML File
?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.tml.mouseDemo.mapper.UserMapperresultMap idBaseResultMap typecom.tml.mouseDemo.model.Userid columnid jdbcTypeBIGINT propertyid/result columnuser_name jdbcTypeVARCHAR propertyuserName/result columnpassword jdbcTypeVARCHAR propertypassword/result columncreate_time jdbcTypeTIMESTAMP propertycreateTime/result columnstatus jdbcTypeINTEGER propertystatus//resultMapselect idlistByName resultMapBaseResultMapSELECT *FROM t_user tWHERE t.user_name #{userName}/selectselect idgetOneUser resultMapBaseResultMapSELECT *FROM t_user tWHERE t.id #{uid}/select/mapper至此一个简单的springboot项目集成h2数据库就完成了。
利用h2进行单元测试
一个基于init_table.sql中的初始化数据的断言测试用例如下
package com.tml.mouseDemo;import com.tml.mouseDemo.mapper.UserMapper;
import com.tml.mouseDemo.model.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.List;SpringBootTest
RunWith(SpringRunner.class)
Slf4j
public class MouseDemoApplicationTests {Autowiredprivate UserMapper userMapper;Testpublic void testH2() {ListUser users userMapper.listByName(tml);Assert.assertEquals(1, users.size());}}H2数据库控制台 当java进程在运行中的时候并且程序是开启了h2数据库的控制台 【spring.h2.console.enabledtrue】此时是可以直接通过http://localhost:9090/h2-console访问控制台端口是内嵌java应用的端口号登录时需要用账号密码账号密码就是配置文件application.yml中的username、password效果图如下 总结
h2数据库的基本用法就是这样大家可以根据h2数据库自身的特点尽情发挥详情可以参考官网https://www.h2database.com/html/features.html
切记不要在生产环境轻易使用h2数据库