h2数据库作为内存型与springboot+mybatis的案例

database

  • 一.前言

    H2 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,即只有一个 jar 文件,可以直接嵌入到应用项目中。H2 主要有如下三个用途:


    第一个用途,也是最常使用的用途就在于可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据。


    第二个用途是用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态。


    第三个用途是作为缓存,即当做内存数据库,作为NoSQL的一个补充。当某些场景下数据模型必须为关系型,可以拿它当Memcached使,作为后端MySQL/Oracle的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据,比如字典表、权限表。

     

    H2 可以作为:

    1)嵌入式模式(使用 JDBC 的本地连接)

    2)服务器模式(使用 JDBC 或 ODBC 在 TCP/IP 上的远程连接)

    3)混合模式(本地和远程连接同时进行)

    该案例为嵌入式模式

     

    二.springboot创建项目

    首先,给大家看一下我的项目结构

    springboot的版本为:2.1.9 具体可以看一下我的pom文件

    2.1 依赖pom文件

    以下就是我该演示项目的所有依赖,h2的版本交给springboot去进行确定

     

    <properties>

    <java.version>1.8</java.version>

    </properties>

    <dependencies>

    <!--starter-web-->

    <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

    <!--连接H2的mybatis-->

    <dependency>

    <groupId>org.mybatis.spring.boot</groupId>

    <artifactId>mybatis-spring-boot-starter</artifactId>

    <version>2.1.1</version>

    </dependency>

    <!--h2数据库-->

    <dependency>

    <groupId>com.h2database</groupId>

    <artifactId>h2</artifactId>

    <scope>runtime</scope>

    </dependency>

    <dependency>

    <groupId>org.projectlombok</groupId>

    <artifactId>lombok</artifactId>

    <optional>true</optional>

    </dependency>

    <!--测试-->

    <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-test</artifactId>

    <scope>test</scope>

    </dependency>

    </dependencies>

    <build>

    <plugins>

    <plugin>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-maven-plugin</artifactId>

    </plugin>

    </plugins>

    <!--把放置在mapper路径下的xml文件编译后放在一起-->

    <resources>

    <resource>

    <directory>src/main/java</directory>

    <includes>

    <include>**/*.xml</include>

    </includes>

    <filtering>true</filtering>

    </resource>

    </resources>

    </build>

     

    2.2 application.yml

    需要关注 h2 web操作界面的路径 和 console打印的sql语句,以下的配置是本文精华部分

    spring:

    h2:

    console:

    path: /h2-console #进入h2 web操作界面的路径

    enabled: true #开启h2 web界面

    datasource:

    driver-class-name: org.h2.Driver

    schema: classpath:db/schema-h2.sql

    data: classpath:db/data-h2.sql

    url: jdbc:h2:mem:test

    username: root

    password: test

    mybatis:

    configuration:

    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 在console打印sql语句

    server:

    port: 8081

    2.3 sql语句

    data-h2.sql,需要放置在resource/db下

    INSERTINTO cat (id, name, age, color,score) VALUES

    (1, "Jone", 18, "黃色",0.4),

    (2, "Jack", 20, "白色",0.5),

    (3, "Tom", 28, "金色",0.1),

    (4, "Sandy", 21, "紅色",0.8),

    (5, "Billie", 24, "綠色",0.7);

    schema-h2.sql,需要放置在resource/db下

    DROPTABLEIFEXISTS cat;

    CREATETABLE cat

    (

    id BIGINT(20) NOTNULL COMMENT "主键ID",

    name VARCHAR(30) NULLDEFAULTNULL COMMENT "姓名",

    age INT(11) NULLDEFAULTNULL COMMENT "年龄",

    color VARCHAR(50) NULLDEFAULTNULL COMMENT "颜色",

    score DOUBLENULLDEFAULTNULL COMMENT "分数",

    PRIMARYKEY (id)

    );

    2.4 启动类上配上mapper扫描

    /**

    * @author CC-CAN

    */

    @SpringBootApplication

    @MapperScan("com.springboot.*.mapper")

    publicclass MybatisApplication {

    publicstaticvoid main(String[] args) {

    SpringApplication.run(MybatisApplication.class, args);

    }

    }

    2.5 mapper.java和mapper.xml

    配置后,由mybatis进行实体类的映射

    publicinterface CatMapper {

    List<Cat> selectAll();

    }

     

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE mapper

    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    <mapper namespace="com.springboot.mybatis.mapper.CatMapper">

    <select id="selectAll" resultType="com.springboot.mybatis.entity.Cat">

    SELECT * from cat

    </select>

    </mapper>

     

    2.6 案例的entity

    与数据库的实体对应

    @Data

    publicclass Cat {

    private Long id;

    private String name;

    private Integer age;

    private String color;

    private Double score;

    }

     

    2.7 service 和 impl

    publicinterface CatService {

    /**

    * 喵叫

    * @return

    */

    String meow();

    List<Cat> list();

    }

    @Service

    publicclass CatServiceImpl implements CatService {

    @Autowired

    private CatMapper catMapper;

    @Override

    public String meow() {

    return "瞄";

    }

    @Override

    public List<Cat> list() {

    return catMapper.selectAll();

    }

    }

     

    2.8 建立测试类

    在test创建 springboot 的测试类

     

    @RunWith(SpringRunner.class)

    @SpringBootTest

    publicclass MybatisApplicationTests {

    @Autowired

    private CatService catService;

    @Test

    publicvoid contextLoads() {

    List<Cat> list = catService.list();

    list.forEach(System.out::println);

    }

    }

     

    三 测试结果

    Creating a new SqlSession

    SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6caf7803] was not registered for synchronization because synchronization is not active

    JDBC Connection [HikariProxyConnection@408543908 wrapping conn0: url=jdbc:h2:mem:test user=ROOT] will not be managed by Spring

    ==> Preparing: SELECT * from cat

    ==> Parameters:

    <== Columns: ID, NAME, AGE, COLOR, SCORE

    <== Row: 1, Jone, 18, 黃色, 0.4

    <== Row: 2, Jack, 20, 白色, 0.5

    <== Row: 3, Tom, 28, 金色, 0.1

    <== Row: 4, Sandy, 21, 紅色, 0.8

    <== Row: 5, Billie, 24, 綠色, 0.7

    <== Total: 5

    Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6caf7803]

    Cat(id=1, name=Jone, age=18, color=黃色, score=0.4)

    Cat(id=2, name=Jack, age=20, color=白色, score=0.5)

    Cat(id=3, name=Tom, age=28, color=金色, score=0.1)

    Cat(id=4, name=Sandy, age=21, color=紅色, score=0.8)

    Cat(id=5, name=Billie, age=24, color=綠色, score=0.7)

     

     

    四 打开h2的web浏览页面

    运行main方法

    浏览器输入 

    http://localhost:8081/h2-console

    账号 root 密码 test,进去

    查看

     

     

     

    结语

    本人长期从事java开发,如果有什么疑问,可以留言,我会及时解答

    附录

     

     

     

以上是 h2数据库作为内存型与springboot+mybatis的案例 的全部内容, 来源链接: utcz.com/z/532864.html

回到顶部