H2 DataBase入门
H2 DataBase入门+整合hibernate+整合mybatis+整合springboot
H2 是一个用 Java 编写的可嵌入的关系型数据库,H2的主要特点是:
非常快,开源,JDBC API
嵌入式和服务器模式;内存数据库
基于浏览器的控制台应用程序
占用空间小:大约 2.5 MB jar 文件大小
H2数据库可以安装服务server到本机,也可以不安装,执行jdbc连接时根据url的路径自动创建db文件。可以在开发中小型应用时免去安装mysql等,也可以用于javafx客户端应用的开发和安卓等等。。。
一、入门
引入依赖,这个是几天前更新的版本,距离上一次更新是2019年了,现在是2021-12-1,中途停更了两年,这个最新版本修复了许多bug。
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>2.0.202</version></dependency>
下面是一段比较简单的jdbc操作:
import java.sql.*;public class MyDemo {public static void main(String[] args) throws Exception{Class.forName("org.h2.Driver");// 用户名和密码都是自定义的,第一次为创建.db文件,也可以不设置密码Connection conn = DriverManager.getConnection("jdbc:h2:c:/myh2.db", "lingkang", "123456");Statement stat = conn.createStatement();// 创建一个表 注意 user是一个专有名词,需要使用`` 或者更改其他名字stat.executeUpdate("drop table if exists `user`");// 创建表stat.executeUpdate("create table `user` (name varchar(20), nickname varchar(20))");PreparedStatement prep = conn.prepareStatement("insert into `user` values (?, ?);");prep.setString(1, "lk");prep.setString(2, "阿萨德");prep.addBatch();prep.setString(1, "123");prep.setString(2, "啊是电饭锅");prep.addBatch();// 执行prep.executeBatch();ResultSet result = stat.executeQuery("select * from `user`;");while (result.next()) {System.out.println("name=" + result.getString("name") + ", " +"nickname=" + result.getString("nickname"));}result.close();conn.close();}
}
运行效果:
二、查看数据库
使用navicat什么的是无法open查看的,可以使用dbeaver
下载地址:https://dbeaver.io/download/
dbeaver
这个工具社区版是开源的,功能强大,支持非常多数据库,比找navicat破解好多了,我用社区版,社区版功能够啦,配置一下h2驱动即可打开数据库。
三、整合hibernate自动生成表
整合hibernate可用于映射实体生成对应的表格,处理表与实体关系灵活,关联关系比较复杂。
Maven
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.5.8.Final</version></dependency>
编写代码
import entity.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;import java.util.List;
import java.util.Properties;public class MyHi {public static void main(String[] args) {String url = "jdbc:h2:c:/myh2.db";// 配置属性:https://docs.jboss.org/hibernate/orm/5.6/userguide/html_single/Hibernate_User_Guide.html#configurationsProperties properties = new Properties();properties.put("hibernate.connection.driver_class", "org.h2.Driver");properties.put("hibernate.connection.url", url);properties.put("hibernate.connection.username", "lingkang");properties.put("hibernate.connection.password", "123456");properties.put("hibernate.hbm2ddl.auto", "update");// 采用自动更新模式properties.put("hibernate.show_sql", "true");properties.put("hibernate.connection.autocommit", "true");properties.put("connection.pool_size", 10);properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect");properties.put("hibernate.current_session_context_class", "thread");Configuration configuration = new Configuration();configuration.setProperties(properties);// 这里可以编写一个工具类将包下所有的class加载到配置/*List<Class<?>> tableClass = getTableClass("top.oneit.jdownload.entity");for (Class clazz:tableClass){configuration.addAnnotatedClass(clazz);}*/configuration.addAnnotatedClass(User.class);StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(properties).build();try {// 会话工厂SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);// hibernate 插入时需要自己手动管理事务,比较尴尬,整合spring则spring管理事务Session inSession = sessionFactory.openSession();inSession.beginTransaction();User user = new User();user.setId(System.currentTimeMillis());user.setUsername("lingkang");user.setPassword("123456");user.setNickname("凌康");inSession.save(user);inSession.getTransaction().commit();// 这里我们手动提交事务// 从会话工厂中获取一个会话Session session = sessionFactory.openSession();// user 是h2 db的关键词,表名需要改下List users = session.createQuery("from User").list();System.out.println(users);} catch (Exception e) {e.printStackTrace();StandardServiceRegistryBuilder.destroy(serviceRegistry);}}/* private static List<Class<?>> getTableClass(String packageName) {Set<Class<?>> classes = ClassUtil.scanPackage(packageName);List<Class<?>> list = new ArrayList<>();for (Class<?> clazz : classes) {if (clazz.getAnnotation(Table.class) != null) {list.add(clazz);}}return list;}*/
}
实体类:
package entity;import org.hibernate.annotations.CreationTimestamp;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;// user 是h2 db的关键词,这里的表名需要改下
@Table(name = "t_user")
@Entity
public class User {@Idprivate Long id;@Column(length = 20)private String username;@Column(length = 20)private String password;@Column(length = 20)private String nickname;@CreationTimestamp// 创建时添加@Column//我认为不需要遵循什么阿里开发规范,直接使用这个字段名即可private Date createTime;// getset tostring...
效果:
四、整合mybatis
整合mybatis可以灵活编写SQL,能够在SQL中实现复杂的业务查询。
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency>
配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 配置环境--><environments default="h2"><!--配置mysql的环境--><environment id="h2"><!--配置事务的类型--><transactionManager type="JDBC"></transactionManager><!--配置连接池--><dataSource type="POOLED"><!--配置连接数据库的4个基本信息--><property name="driver" value="org.h2.Driver"/><property name="url" value="jdbc:h2:c:/myh2.db"/><property name="username" value="lingkang"/><property name="password" value="123456"/></dataSource></environment></environments><!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件--><mappers><mapper resource="mapper/user.xml"/></mappers>
</configuration>
映射mapper/user.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,用于分层sql -->
<mapper namespace="user"><select id="findAll" resultType="entity.User">select * from t_user</select>
</mapper>
代码
import entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;
import java.util.List;public class DemoMybatis {public static void main(String[] args) throws Exception {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();List<User> users = sqlSession.selectList("user.findAll");System.out.println(users);}
}
效果
五、整合springboot
这里我使用spring-data-jdbc来操作,你也可以整合mybatis、hibernate等来操作数据库。
Maven
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>2.0.202</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
配置文件
spring.datasource.url=jdbc:h2:c:/myh2.db
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=lingkang
spring.datasource.password=123456
代码
import java.util.List;
import java.util.Map;@Controller
public class WebController {@Autowiredprivate JdbcTemplate jdbcTemplate;@GetMapping("")@ResponseBodypublic Object index() {List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from t_user");System.out.println(maps);return maps;}
}
效果
H2 DataBase入门相关推荐
- 【H2 Database】安装
前言 H2 Database version : 1.4.199 jdk 1.8 下载 下载地址:http://www.h2database.com/html/download.html 选择通用版下 ...
- 【H2 Database】导出CSV
前言 H2 Database version : 1.4.199 示例 call CSVWRITE ( '/xxx.csv', 'SELECT id,path,''null'' as raw FROM ...
- 【H2 Database】shell
前言 H2 Database version : 1.4.199 启动shell java -cp h2*.jar org.h2.tools.Shell 参考 The Shell Tool
- 【H2 Database】Server模式启动
前言 H2 Database version : 1.4.199 centos 7.0 启动命令 启动带控制台的 Web Server 启动 TCP Server(jdbc通过tcp server连接 ...
- 【H2 Database】查看帮助信息
前言 H2 Database version : 1.4.199 查看帮助信息 java -cp h2*.jar org.h2.tools.Server -? -------------------- ...
- H2 database文档学习
http://h2database.com/html/quickstart.html Embedding H2 in an Application 嵌入式应用方式,使用方式: 1.Add the h2 ...
- Java嵌入式数据库H2学习总结(一)——H2数据库入门
一.H2数据库介绍 常用的开源数据库有:H2,Derby,HSQLDB,MySQL,PostgreSQL.其中H2和HSQLDB类似,十分适合作为嵌入式数据库使用,而其它的数据库大部分都需要安装独立的 ...
- H2数据库入门,看这篇就对了
H2数据库是一个开源的关系型数据库. H2是一个采用java语言编写的嵌入式数据库引擎,只是一个类库(即只有一个 jar 文件),可以直接嵌入到应用项目中,不受平台的限制 应用场景: 可以同应用程序打 ...
- 简记H2 Database内存数据踩过的坑
开发入门步骤: 一.maven中添加依赖项 <dependency><groupId>com.h2database</groupId><artifactId& ...
最新文章
- codeforces #310 div1 C
- Android状态栏
- 主成分分析二级指标权重_羡慕神仙权重?主成分与因子分析带你揭开权重的秘密...
- STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字
- 【mysql】成绩单表,找到所有成绩都不及格的所有人
- dlib人脸检测功能介绍
- win 10 VMware与Hyper-v共存
- 关于JVM方法调用的那些事
- 贪心算法——合并区间(Leetcode 56)
- jAVA Annotation 小例
- Alex 的 Hadoop 菜鸟教程: 第14课 Sqoop1 从Hbase导出mysql
- 腾讯员工举报漏洞被逮捕,“白帽子”的行为边界到底在哪儿?
- hbuilderx为什么打不开_windows系统,HBuilderX无法启动、点击无反应、或启动报错的解决方案...
- c语言验证费马大定理,费马大定理,用电脑编程证明
- Jetson Nano 安装deepStream
- 机器学习课程讲义·第二章,线性模型系列
- java会签_工作流引擎会签,加签,主持人,组长模式 专题讲解
- 判断字符串中是否存在空格符
- Au:剪辑的基础操作
- Android 面部识别之二(调用开源面部识别算法seetaface检测)