在一些测试环境或者很小的项目中,可能不需要太大的数据库,但是又想用数据库,这里就介绍下怎么使用H2这个可以嵌入式的数据库。因为冲着简单方便的目标来使用的,所以不会单独的安装数据库来使用了。

这里介绍的是在SpringBoot中简单快速的使用MyBatis去操作H2的一个过程。

使用

  1. 创建一个新的SpringBoot的项目,配置application.yml文件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    server:
      port: 8080
      servlet:
        context-path: /tf
       
    spring:
      h2:
        console:
          enabled: true
          path: /h2
      datasource:
        url: jdbc:h2:mem:test
        username: root
        password: test
        driver-class-name: org.h2.Driver
        schema:
          - "classpath:db/schema.sql"
        data:
          - "classpath:db/data.sql"
    
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
> url: jdbc:h2:mem:test 这个数据库是存在内存中的,如果需要保存起来,重启还可以使用,需要修改下
>
> url: jdbc:h2:file:db/reward 这个路径是自己定义的
>
> h2.console.enabled=true 开启后是可以在web页面上进行操作的,基于以上的配置web-console的地址是:http://localhost:8080/tf/h2/ 
>
> ![](https://sevenbooks.oss-cn-hangzhou.aliyuncs.com/postimages/20200817182228.png)
>
> 这里自己检查下 是否和配置文件一样,不一样的话,需要手动输入后点击测试连接和连接。

2. 在resources文件下创建一个文件夹db,下面创建两个脚本

```sql
-- 文件schema.sql

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);


-- 文件 data.sql

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
  1. 配置必要的POM文件依赖

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
     <!--H2-->
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.3.2</version>
            </dependency>
    
  2. 创建测试代码

    文件的结构是这样的:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    // User 具体代码如下
    package com.kid.reward.entity;
       
    import lombok.Data;
       
    /**
     * @author tangf
     * @createTime 2020/08/17 15:50:00
     */
    @Data
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }
       
    // **************************************************************
    // UserMapper
    package com.kid.reward.mapper;
       
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.kid.reward.entity.User;
       
    /**
     * @author tangf
     * @createTime 2020/08/17 16:04:00
     */
    public interface UserMapper extends BaseMapper<User> {
    

    }

    // ************************************************************** // UserServiceImpl package com.kid.reward.service.impl;

    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.kid.reward.entity.User; import com.kid.reward.mapper.UserMapper; import com.kid.reward.service.UserService; import org.springframework.stereotype.Service;

    /**

    • @author tangf
    • @createTime 2020/08/17 16:06:00 */ @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }

    // ************************************************************** // UserService package com.kid.reward.service;

    import com.baomidou.mybatisplus.extension.service.IService; import com.kid.reward.entity.User;

    /**

    • @author tangf
    • @createTime 2020/08/17 16:04:00 */ public interface UserService extends IService { }

    // ************************************************************** // RewardApplication package com.kid.reward;

    import com.kid.reward.service.UserService; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;

    /**

    • @author kid */ @SpringBootApplication @MapperScan(“com.kid.reward.mapper”) public class RewardApplication implements CommandLineRunner {

      public static void main(String[] args) {

       SpringApplication.run(RewardApplication.class, args);
      

      }

      @Autowired public UserService userService;

      @Override public void run(String… args) { System.out.println(“用户(id=1)信息:” + userService.getById(1)); }

    }

    1
    
    
    
  3. 运行代码就可以看到结果了

总结

做一些小应用或者小工具,如果需要用到数据库尤其是嵌入式的场景,那么H2是个不错的选择。有机会尝试下做个超级简单的博客系统,可以让不懂技术的也可以使用。