在Spring中使用嵌入式数据库-H2
- Spring3以后开始支持嵌入式数据库,嵌入式数据库目前在市面上有好多种,HSQL,DERBY,H2...今天就主要讲一下h2的使用
对于一个数据库产品来说,主要就是如何存储数据和读取数据了。所谓嵌入式就是直接运行在项目中,不需要安装额外的产品。说白了就是一个jar包,可以随项目启动和结束而结束,它主要有以下特点:
优点:
- 小而简,但是可以存储的数据还是很大,大概有512G左右;
- 不用多余的安装,用来做测试和一些小工具最好不过了
- 一些常见的关系型数据库,如mysql的大多数功能它全都支持,如事务,搭建集群等
- 它是由Java开发的jar包,所以和其他的Jar应用一样,高可移植性
缺点:
- 由于它是内存型的,所以并不会持久化数据
这的运行方式主要有两种:
- 和MySql很相似的服务器模式,运行起来后,可以连接多个实例,下载地址http://www.h2database.com/html/main.html
- 使用内嵌入到应用程序中,因为它是一个jar包,所以放应用程序中就可以了,但是它只能连接一个实例,也就是只能在当前应用程序中连接,不能在其他应用中操作(主要讲解这种模式)
接下来我们就使用SpringJdbc连接数据库进行操作,当然其他orm框架也可以,使用SpringJdbc是为了简化代码
运行环境:
JDK1.8+Spring4以上
- maven引入依赖(当然Spring相关的依赖是必须,)
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.172</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
<!-- 2.Spring dao依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
- 配置Spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">
<!--当然是配置datasource了-->
<jdbc:embedded-database id="dataSource" type="H2">
<!--一定要是先DDL,即数据库定义语言-->
<jdbc:script location="classpath:sql/h2-schema.sql"/>
<!--然后才是DML,数据库操作语言-->
<jdbc:script location="classpath:sql/h2-data.sql" encoding="UTF-8"/>
</jdbc:embedded-database>
<!--定义springjdbctemplate-->
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
- 注意这里的这两个sql,一个是用来初始化数据库,另一个就是用来添加数据,一定要注意顺序,当然,写在一个sql文件中也可以
-- h2-schame.sql
drop table if exists teacher ;
-- 创建表
create table teacher(
id int primary key auto_increment,
name varchar(20),
age int
);
-- 插入表数据 h2-data.sql
insert into teacher(name,age) values('张老师',23);
insert into teacher(name,age) values('李老师',24);
这里的datasource是通过jdbc命名空间定义的,因为我们选择模式是内嵌式运行。一个最简单的事情要明白,只有在这个应用运行中,才会访问到数据库,其他时间是不能使用外部工具连接的,比如idea的datasource工具
- 实体类
public class Teacher {
private int id;
private String name;
private int age;
//省略set和get
}
- 测试代码
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml");
JdbcTemplate jdbcTemplate = context.getBean("jdbcTemplate", JdbcTemplate.class);
String selectSql = "select * from teacher";
List query = jdbcTemplate.query(selectSql, new RowMapper() {
@Nullable
@Override
public Object mapRow(ResultSet resultSet, int i) throws SQLException {
Teacher teacher = new Teacher();
teacher.setId(resultSet.getInt(1));
teacher.setName(resultSet.getString(2));
teacher.setAge(resultSet.getInt(3));
return teacher;
}
});
query.forEach(o -> System.out.println(o));
}
以下就是运行结果,当然你能看到一些关于这个datasource的信息
我们给程序一个不退出的代码,让它一直运行(如果是一个web应用,只要启动,就会一直运行),使用idea连接一下这个数据库
但是你通过这个工具是不能看见teahcer表的,同样,你通过这个工具添加的表和数据也不会使用程序取到的,因为它本身就是连接实例之间是分开的,这样做是很安全的。
如果是使用SpringBoot的话:
运行环境:SpirngBoot+SpringJdbc
这里并不创建一个新的SpringBoot项目,而是使用Java注解的方式来注册bean(在SpirngBoot的环境就可以这样用)
- 配置类
package cn.lyn4ever.bean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import javax.sql.DataSource;
@Configuration
public class BeanConfig {
@Bean
public DataSource dataSource() {
try {
EmbeddedDatabaseBuilder dbBuilder = new EmbeddedDatabaseBuilder();
return dbBuilder.setType(EmbeddedDatabaseType.H2)
.addScripts("classpath:sql/h2-schema.sql", "classpath:sql/h2-data.sql")
.build();
} catch (Exception e) {
System.out.println("创建数据库连接失败");
return null;
}
}
@Bean
public JdbcTemplate jdbcTemplate(){
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource());
return jdbcTemplate;
}
}
- 测试类
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);
JdbcTemplate jdbcTemplate = context.getBean("jdbcTemplate", JdbcTemplate.class);
String selectSql = "select * from teacher";
List query = jdbcTemplate.query(selectSql, new RowMapper() {
@Nullable
@Override
public Object mapRow(ResultSet resultSet, int i) throws SQLException {
Teacher teacher = new Teacher();
teacher.setId(resultSet.getInt(1));
teacher.setName(resultSet.getString(2));
teacher.setAge(resultSet.getInt(3));
return teacher;
}
});
query.forEach(o -> System.out.println(o));
}
在Spring中使用嵌入式数据库-H2的更多相关文章
- Java嵌入式数据库H2学习总结(三)——在Web应用中嵌入H2数据库
H2作为一个嵌入型的数据库,它最大的好处就是可以嵌入到我们的Web应用中,和我们的Web应用绑定在一起,成为我们Web应用的一部分.下面来演示一下如何将H2数据库嵌入到我们的Web应用中. 一.搭建测 ...
- Java嵌入式数据库H2学习总结(一)——H2数据库入门
一.H2数据库介绍 常用的开源数据库有:H2,Derby,HSQLDB,MySQL,PostgreSQL.其中H2和HSQLDB类似,十分适合作为嵌入式数据库使用,而其它的数据库大部分都需要安装独立的 ...
- spring中操作mysql数据库
就是在spring中,对mysql数据库进行增删改查的样例,很easy. 文件结构 maven的pom.xml文件,里面用到的几个很重要的jar包都有 <project xmlns=" ...
- java 嵌入式数据库H2
H2作为一个嵌入型的数据库,它最大的好处就是可以嵌入到我们的Web应用中,和我们的Web应用绑定在一起,成为我们Web应用的一部分.下面来演示一下如何将H2数据库嵌入到我们的Web应用中. 一.搭建测 ...
- Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库
一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb项目,找到H2数据库的jar文件,如下图所示: H2数据库就一个jar文件,这个Jar文件里面包含 ...
- Java嵌入式数据库H2学习总结
H2数据库使用总结 —— 孤傲苍狼
- 嵌入式数据库H2的安装与配置
一.配置JAVA环境 1.首先检查系统是否自带JDK 使用命令:#java -version 没有信息即为没有安装,如有且版本较低,可采用如下方式卸载: 查看命令: rpm -qa | grep ja ...
- 转载:在spring中嵌入activemq
转载:http://www.dev26.com/blog/article/137 web开发站中的邮件发送使用了activemq我这是从网上找的进行了一些修改,记录下来,为了避免发送邮件时程序对用户操 ...
- spring中的mybatis的sqlSession是如何做到线程隔离的?
项目中常常使用mybatis配合spring进行数据库操作,但是我们知道,数据的操作是要求做到线程安全的,而且按照原来的jdbc的使用方式,每次操作完成之后都要将连接关闭,但是实际使用中我们并没有这么 ...
随机推荐
- tomcat 访问权限设置
1.全局设置,设置允许某些IP能够访问到tomcat服务器,或不能访问tomcat服务器 只需要编辑tomcat的server.xml,增加适当代码即可. 修改如下:在<Host> &l ...
- gitlab CICD/schedules无法按照分钟执行
多条Scheduling Pipelines 设置之后发现执行时间都是某个时间,分钟设置的无效不管用 修改/etc/gitlab/gitlab.rb gitlab_rails['pipeline_sc ...
- Windows+Python+Selenium基础篇之1-环境搭建
1.所需工具包1.1Selenium for python1.2 Python 1.3 Notepad++或python IDE 2. 环境搭建2.1 下载和安装Pythonpython2. ...
- 杭电-------2047阿牛的eof牛肉串(C语言写)
/* 主要看最后一个是否为O,若为O,则倒数第二个不能为O,则为a[n-2]*1*2; 若不为O,则最后一个有两个选择则为a[n-1]*2 */ #include<stdio.h> ] = ...
- Babel配置中的presets、plugins、各个阶段stage的含义
什么是Babel Babel 官方文档: https://babeljs.io/ Babel 中文文档:https://www.babeljs.cn/ 我们知道各个浏览器对JavaScript版本的支 ...
- java 正则表达式空格无法匹配
举个例子 Boolean xx= Pattern.matches("^[a-zA-Z0-9\\s]*$", " 801 Tampines Ave 4 Singapore ...
- C# WPF 一个设计界面
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF 一个设计界面 今天正月初三,大家在家呆着挺好,不要忘了自我充电. 武汉人民加油, ...
- shell 一键配置单实例oracle基础环境变量(linux7)
#!/bin/bash echo "修改主机名" hostnamectl set-hostname wangxfa hostname sleep 1 echo "查看并关 ...
- 两张图搞清楚Eclipse上的Web项目目录
从MyEclipse转到Eclipse起初有点不习惯eclipse的目录结构,顺手一查看到的文章帮助很大,转载一下: 原文链接:https://www.jianshu.com/p/91050dfcbe ...
- Your idea evaluation has expired. Your session will be limited to 30 minutes
今天打开idea,出现了上面的话,试了网上的很多办法,获取注册码的那个方法是最常见的,那个网站现在不提供注册码了. ----两种方法-----**1)把提示框的x点掉,会自动打开idea**按最开始安 ...