西宁网站制作 青,wordpress 主题制作 导航条,深圳网站设计公司让您放心省心,企业网站建站元素上文我们展示了通过学习经典的MVC分包结构展示了一个用户的增删查改项目#xff0c;但是我们没有接入数据库#xff1b;本文将在上文的基础上#xff0c;增加一个H2内存数据库#xff0c;并且通过Spring 提供的数据访问包JPA进行数据查询。准备知识点在介绍通过Spring JPA接…上文我们展示了通过学习经典的MVC分包结构展示了一个用户的增删查改项目但是我们没有接入数据库本文将在上文的基础上增加一个H2内存数据库并且通过Spring 提供的数据访问包JPA进行数据查询。准备知识点在介绍通过Spring JPA接入真实H2数据时需要首先了解下什么是H2数据库什么是JPA什么是H2内存数据库H2是一个用Java开发的嵌入式数据库它本身只是一个类库可以直接嵌入到应用项目中。官方网站有哪些用途H2最大的用途在于可以同应用程序打包在一起发布这样可以非常方便地存储少量结构化数据。它的另一个用途是用于单元测试。启动速度快而且可以关闭持久化功能每一个用例执行完随即还原到初始状态。H2的第三个用处是作为缓存作为NoSQL的一个补充。当某些场景下数据模型必须为关系型可以拿它当Memcached使作为后端MySQL/Oracle的一个缓冲层缓存一些不经常变化但需要频繁访问的数据比如字典表、权限表。不过这样系统架构就会比较复杂了。H2的产品优势?纯Java编写不受平台的限制只有一个jar文件适合作为嵌入式数据库使用h2提供了一个十分方便的web控制台用于操作和管理数据库内容功能完整支持标准SQL和JDBC。麻雀虽小五脏俱全支持内嵌模式、服务器模式和集群。什么是JPA和JDBC是什么关系什么是JDBC, ORM, JPA? 之间的关系是什么什么是JDBCJDBCJavaDataBase Connectivity就是Java数据库连接说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库JDBC是用Java语言向数据库发送SQL语句。什么是ORM对象关系映射Object Relational Mapping简称ORM 简单的说ORM是通过使用描述对象和数据库之间映射的元数据将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式具体如下具体映射数据库的表table -- 类class记录record行数据-- 对象object字段field-- 对象的属性attribute什么是JPAJPA是Spring提供的一种ORM首先让我们回顾下Spring runtime体系Spring Data是基于Spring runtime体系的JPA 属于Spring Data, 和JDBC的关系如下案例这里承接上文 使用H2存放用户表并通过JPA操作用户数据。添加H2和JPA的依赖dependencygroupIdcom.h2database/groupIdartifactIdh2/artifactIdscoperuntime/scope
/dependency
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId
/dependency配置H2和JPA注入参数spring:datasource:data: classpath:db/data.sqldriverClassName: org.h2.Driverpassword: saplatform: h2schema: classpath:db/schema.sqlurl: jdbc:h2:mem:dbtestusername: sah2:console:enabled: truepath: /h2settings:web-allow-others: truejpa:hibernate:ddl-auto: updateshow-sql: true其中资源下还需要配置数据库的表结构schema.sqlcreate table if not exists tb_user (
USER_ID int not null primary key auto_increment,
USER_NAME varchar(100)
);以及数据文件 data.sql, 默认插入一条‘赵一’的数据INSERT INTO tb_user (USER_ID,USER_NAME) VALUES(1,赵一);实体关联表给User添加Entity注解和Table注解package tech.pdai.springboot.h2.entity;import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;Entity
Table(name tb_user)
public class User {Idprivate int userId;private String userName;public int getUserId() {return userId;}public void setUserId(int userId) {this.userId userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}
}Dao继承JpaRepositorypackage tech.pdai.springboot.h2.dao;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import tech.pdai.springboot.h2.entity.User;Repository
public interface UserRepository extends JpaRepositoryUser, Integer {}(其它service,App启动类等代码和前文一致)运行程序一些思考这里补充一些H2数据库的知识点特别是如何用H2做单元测试 可以跳过。H2数据库通常如何使用嵌入式模式 上文例子在嵌入式模式下应用程序使用JDBC从同一JVM中打开数据库。这是最快也是最容易的连接方式。缺点是数据库可能只在任何时候在一个虚拟机和类加载器中打开。与所有模式一样支持持久性和内存数据库。对并发打开数据库的数量或打开连接的数量没有限制。服务器模式当使用服务器模式有时称为远程模式或客户机/服务器模式时应用程序使用 JDBC 或 ODBC API 远程打开数据库。服务器需要在同一台或另一台虚拟机上启动或者在另一台计算机上启动。许多应用程序可以通过连接到这个服务器同时连接到同一个数据库。在内部服务器进程在嵌入式模式下打开数据库。服务器模式比嵌入式模式慢因为所有数据都通过TCP/IP传输。与所有模式一样支持持久性和内存数据库。对每个服务器并发打开的数据库数量或打开连接的数量没有限制。混合模式混合模式是嵌入式和服务器模式的结合。连接到数据库的第一个应用程序在嵌入式模式下运行但也启动服务器以便其他应用程序在不同进程或虚拟机中运行可以同时访问相同的数据。本地连接的速度与数据库在嵌入式模式中的使用速度一样快而远程连接速度稍慢。服务器可以从应用程序内使用服务器API启动或停止或自动自动混合模式。当使用自动混合模式时所有想要连接到数据库的客户端无论是本地连接还是远程连接都可以使用完全相同的数据库URL来实现。以上不同的连接方式对应不同的 JDBC URL可以参考如下附录表格中的连接格式。如何使用H2做单元测试为何H2会被用来做单元测试 以及 如何使用H2做单元测试可以参考这篇文章 单元测试 - SpringBoot2Mockito实战H2数据库的兼容性H2会被用作单元测试的模拟库所以必然也需要了解H2数据库的兼容性。h2官网对此有详细的描述示例源码https://download.csdn.net/download/DeveloperFire/87519876