H2 与 Spring 集成

在 Spring 项目中集成 H2 数据库可以按照以下步骤进行:

添加 Maven 依赖

在项目的 pom.xml 中添加 H2 数据库和 Spring 依赖:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.1.214</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>5.3.31</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.31</version>
</dependency>

该示例将使用 JdbcTemplate,因此引入了 spring-jdbc 依赖。

配置数据源

在 Spring 的配置文件(如 spring-context.xml)中配置 H2 数据库的连接信息,以及 JdbcTemplate 配置信息,如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd">

  <!-- 配置数据源 -->
  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.h2.Driver"/>
    <property name="url" value="jdbc:h2:mem:test-db;DB_CLOSE_DELAY=-1"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
  </bean>

  <!-- 配置 JdbcTemplate -->
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
  </bean>

</beans>

注意,这里使用内存数据库模式,连接名为 test-db,用户名默认是sa且无密码。

使用 H2 数据库

下面将通过手动加载类路径下的 Spring XML 配置文件来初始化 Spring,然后通过 ApplicationContext 获取 JdbcTemplate 的实例,通过 JdbcTemplate 示例操作 H2 数据库。例如:

package com.hxstrive.h2.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * @author hxstrive.com
 * @since 1.0.0  2024/9/24 13:39
 */
public class SpringDemo {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
        JdbcTemplate jdbcTemplate = context.getBean(JdbcTemplate.class);

        // 创建表
        jdbcTemplate.execute("CREATE TABLE PERSON(id int primary key, name varchar(255))");

        // 插入数据
        jdbcTemplate.execute("INSERT INTO PERSON(id, name) VALUES (10001, '张三')");
        jdbcTemplate.execute("INSERT INTO PERSON(id, name) VALUES (10002, '李四')");

        // 查询数据
        List<Person> personList = jdbcTemplate.query("SELECT id,name FROM PERSON", new RowMapper<Person>() {
            @Override
            public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
                Person person = new Person();
                person.setId(rs.getInt("id"));
                person.setName(rs.getString("name"));
                return person;
            }
        });
        for(Person person : personList) {
            System.out.println(person);
        }

        // 删除数据
        jdbcTemplate.execute("DELETE FROM PERSON");
    }

    static class Person {
        private int id;
        private String name;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }
    }

}

执行上述示例,输出如下:

Person{id=10001, name='张三'}
Person{id=10002, name='李四'}


说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号