h2數據庫做爲內存型與springboot+mybatis的案例

  • 一.前言

    H2 是一個用 Java 開發的嵌入式數據庫,它自己只是一個類庫,即只有一個 jar 文件,能夠直接嵌入到應用項目中。H2 主要有以下三個用途:

    第一個用途,也是最常使用的用途就在於能夠同應用程序打包在一塊兒發佈,這樣能夠很是方便地存儲少許結構化數據。

    第二個用途是用於單元測試。啓動速度快,並且能夠關閉持久化功能,每個用例執行完隨即還原到初始狀態。

    第三個用途是做爲緩存,即當作內存數據庫,做爲NoSQL的一個補充。當某些場景下數據模型必須爲關係型,能夠拿它當Memcached使,做爲後端MySQL/Oracle的一個緩衝層,緩存一些不常常變化但須要頻繁訪問的數據,好比字典表、權限表。
    H2 能夠做爲:
    1)嵌入式模式(使用 JDBC 的本地鏈接)
    2)服務器模式(使用 JDBC 或 ODBC 在 TCP/IP 上的遠程鏈接)
    3)混合模式(本地和遠程鏈接同時進行)
    該案例爲嵌入式模式

    二.springboot建立項目

    首先,給你們看一下個人項目結構java

    springboot的版本爲:2.1.9 具體能夠看一下個人pom文件web

    2.1 依賴pom文件

    如下就是我該演示項目的全部依賴,h2的版本交給springboot去進行肯定spring

    <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語句,如下的配置是本文精華部分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下
    INSERT INTO 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下
    DROP TABLE IF EXISTS cat;
    
    CREATE TABLE cat
    (
        id BIGINT(20) NOT NULL COMMENT '主鍵ID',
        name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
        age INT(11) NULL DEFAULT NULL COMMENT '年齡',
        color VARCHAR(50) NULL DEFAULT NULL COMMENT '顏色',
        score DOUBLE NULL DEFAULT NULL COMMENT '分數',
        PRIMARY KEY (id)
    );

    2.4 啓動類上配上mapper掃描

    /**
     * @author CC-CAN
     */
    @SpringBootApplication
    @MapperScan("com.springboot.*.mapper")
    public class MybatisApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MybatisApplication.class, args);
        }
    
    }

    2.5 mapper.java和mapper.xml

    配置後,由mybatis進行實體類的映射數據庫

    public interface 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

    與數據庫的實體對應apache

    @Data
    public class Cat {
        private Long id;
        private String name;
        private Integer age;
        private String color;
        private Double score;
    }

    2.7 service 和 impl

    public interface CatService {
    
        /**
         * 喵叫
         * @return
         */
        String meow();
    
        List<Cat> list();
    
    }
    @Service
    public class 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
    public class MybatisApplicationTests {
    
        @Autowired
        private CatService catService;
    
        @Test
        public void 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,進去springboot

    查看

    結語

    本人長期從事java開發,若是有什麼疑問,能夠留言,我會及時解答

    附錄

相關文章
相關標籤/搜索