在 Spring 项目中集成 H2 数据库可以按照以下步骤进行:
在项目的 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且无密码。
下面将通过手动加载类路径下的 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='李四'}