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入门相关推荐

  1. 【H2 Database】安装

    前言 H2 Database version : 1.4.199 jdk 1.8 下载 下载地址:http://www.h2database.com/html/download.html 选择通用版下 ...

  2. 【H2 Database】导出CSV

    前言 H2 Database version : 1.4.199 示例 call CSVWRITE ( '/xxx.csv', 'SELECT id,path,''null'' as raw FROM ...

  3. 【H2 Database】shell

    前言 H2 Database version : 1.4.199 启动shell java -cp h2*.jar org.h2.tools.Shell 参考 The Shell Tool

  4. 【H2 Database】Server模式启动

    前言 H2 Database version : 1.4.199 centos 7.0 启动命令 启动带控制台的 Web Server 启动 TCP Server(jdbc通过tcp server连接 ...

  5. 【H2 Database】查看帮助信息

    前言 H2 Database version : 1.4.199 查看帮助信息 java -cp h2*.jar org.h2.tools.Server -? -------------------- ...

  6. H2 database文档学习

    http://h2database.com/html/quickstart.html Embedding H2 in an Application 嵌入式应用方式,使用方式: 1.Add the h2 ...

  7. Java嵌入式数据库H2学习总结(一)——H2数据库入门

    一.H2数据库介绍 常用的开源数据库有:H2,Derby,HSQLDB,MySQL,PostgreSQL.其中H2和HSQLDB类似,十分适合作为嵌入式数据库使用,而其它的数据库大部分都需要安装独立的 ...

  8. H2数据库入门,看这篇就对了

    H2数据库是一个开源的关系型数据库. H2是一个采用java语言编写的嵌入式数据库引擎,只是一个类库(即只有一个 jar 文件),可以直接嵌入到应用项目中,不受平台的限制 应用场景: 可以同应用程序打 ...

  9. 简记H2 Database内存数据踩过的坑

    开发入门步骤: 一.maven中添加依赖项 <dependency><groupId>com.h2database</groupId><artifactId& ...

最新文章

  1. codeforces #310 div1 C
  2. Android状态栏
  3. 主成分分析二级指标权重_羡慕神仙权重?主成分与因子分析带你揭开权重的秘密...
  4. STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字
  5. 【mysql】成绩单表,找到所有成绩都不及格的所有人
  6. dlib人脸检测功能介绍
  7. win 10 VMware与Hyper-v共存
  8. 关于JVM方法调用的那些事
  9. 贪心算法——合并区间(Leetcode 56)
  10. jAVA Annotation 小例
  11. Alex 的 Hadoop 菜鸟教程: 第14课 Sqoop1 从Hbase导出mysql
  12. 腾讯员工举报漏洞被逮捕,“白帽子”的行为边界到底在哪儿?
  13. hbuilderx为什么打不开_windows系统,HBuilderX无法启动、点击无反应、或启动报错的解决方案...
  14. c语言验证费马大定理,费马大定理,用电脑编程证明
  15. Jetson Nano 安装deepStream
  16. 机器学习课程讲义·第二章,线性模型系列
  17. java会签_工作流引擎会签,加签,主持人,组长模式 专题讲解
  18. 判断字符串中是否存在空格符
  19. Au:剪辑的基础操作
  20. Android 面部识别之二(调用开源面部识别算法seetaface检测)

热门文章

  1. 一文读懂电磁学发展史[图文版]
  2. springboot+校园新闻数据化系统-计算机毕设 附源码99293
  3. Android软件开发之获取通讯录联系人信息
  4. Ubuntu 18.04 创建 mdadm RAID0
  5. SQLServer update语句用法
  6. GRBL学习-常用G代码
  7. 阿里云服务器选购指南(图文教程详解)
  8. 【思考一】Android程序员想做手机游戏开发
  9. 美国eb1a移民费用有哪些
  10. 初级程序员软考重点6 数据结构与算法