SpringBoot + SpringDataJPAはH2データベースを統合します

序文

  • H2データベースはオープンソースのリレーショナルデータベースです。H2はJava言語で記述されており、プラットフォームに制限されず、オンラインバージョンと組み込みバージョンの両方をサポートし、互換性が高く、かなり標準的なSQL標準をサポートしています。
  • JDBC、ODBCアクセスインターフェイスを提供し、非常に使いやすいWebベースのデータベース管理インターフェイスを提供します

公式サイト:http ://www.h2database.com/

Mavenの依存関係

<!--jpa-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--web-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--h2-->
<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>runtime</scope>
</dependency>
<!--lombok-->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>

コントローラー

@RestController
public class UserController {
    
    

    @Autowired
    UserRepository userRepository;

   @RequestMapping("/list")
    public List<User> findAll(){
    
    
       List<User> userList = userRepository.findAll();
       return userList;
   }

   @RequestMapping("/save")
   public String save(User user){
    
    
       userRepository.save(user);
       return "保存成功";
   }

   @RequestMapping("/update")
   public String update(User user){
    
    
       userRepository.save(user);
       return "更新成功";
   }

   @RequestMapping("/delete")
   public String delete(Integer id){
    
    
       userRepository.deleteById(id);
       return "删除成功";
   }

}

エンティティクラス

@AllArgsConstructor
@NoArgsConstructor
@Entity
@Data
@Table(name = "user")
public class User {
    
    

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private Integer age;

    private Integer gender;

}

リポジトリ

@Repository
public interface UserRepository extends JpaRepository<User,Integer> {
    
    

}

データベーススクリプトファイル

スキーマ(DDL)スクリプトリソースリファレンス
schema.sql

drop table if exists user;
create table user(
    `id` int primary key auto_increment,
    `name` varchar(255) not null,
    `age` int not null,
    `gender` int not null
);

データ(DML)スクリプトリソースリファレンス

insert into user (id,name,age,gender) values (null, '张三',18,1);
insert into user (id,name,age,gender) values (null, '李四',19,1);
insert into user (id,name,age,gender) values (null, '王五',20,1);
insert into user (id,name,age,gender) values (null, '李六',21,1);

構成ファイル

#---------服务器配置-----------
server.port=8080

#---------数据源配置-----------
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:file:./data;AUTO_SERVER=TRUE
spring.datasource.username=sa
spring.datasource.password=
#架构 (DDL) 脚本资源引用
spring.datasource.schema=classpath:db/schema.sql
#数据 (DML) 脚本资源引用
spring.datasource.data=classpath:db/data.sql
#SQL脚本编码
spring.datasource.sql-script-encoding=UTF-8
#初始化模式
spring.datasource.initialization-mode=ALWAYS
#如果在初始化数据库时发生错误,是否停止
spring.datasource.continue-on-error=true

#---------JPA配置-------------
#要操作的目标数据库
spring.jpa.database=h2
#控制台显示SQL语句
spring.jpa.show-sql=true
#更新或者创建数据表结构
spring.jpa.hibernate.ddl-auto=update
#物理命名策略的完全限定名称
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#是否在启动时初始化架构
spring.jpa.generate-ddl=true

#----------H2配置--------------
#http://localhost:8080/h2-console
spring.h2.console.path=/h2-console
#启用控制台
spring.h2.console.enabled=true

スタートアッププロジェクト

H2データベースにアクセスする

訪問:http:// localhost:8080 / h2-console

すべてのデータを表示

データベーススクリプトが設定されているため、SpringBootプロジェクトは起動するたびにSQLファイルを実行します

#架构 (DDL) 脚本资源引用
spring.datasource.schema=classpath:db/schema.sql
#数据 (DML) 脚本资源引用
spring.datasource.data=classpath:db/data.sql
#SQL脚本编码
spring.datasource.sql-script-encoding=UTF-8
#初始化模式
spring.datasource.initialization-mode=ALWAYS
#如果在初始化数据库时发生错误,是否停止
spring.datasource.continue-on-error=true

H2データベースファイル

データベースファイルの場所spring.datasource.urlは、によって指定されます

spring.datasource.url=jdbc:h2:file:./data;AUTO_SERVER=TRUE

動作モード

1.メモリ内で実行
データベースはメモリ内でのみ実行されます。接続を閉じると、データベースは空になります。これは、テスト環境に適しています
。接続文字列:

jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1

2.組み込み
データベースは、単一のファイル
接続文字列として永続的に保存されます。

jdbc:h2:file:~/.h2/DBName;AUTO_SERVER=TRUE

3.サービスモード
H2は、次の3つのサービスモードをサポートしています。

  • Webサーバー:この操作モードは、ブラウザーを使用してH2コンソールにアクセスすることをサポートします
  • TCPサーバー:クライアント/サーバー接続をサポート
  • PGサーバー:PostgreSQLクライアントをサポート

tcpサービスを開始するための接続文字列の例:

jdbc:h2:tcp://localhost/~/test 使用用户主目录
jdbc:h2:tcp://localhost//data/test 使用绝对路径

4.接続文字列パラメータ

  • DB_CLOSE_DELAY:最後の接続接続が切断された後、データベースを閉じないように要求する

  • MODE=MySQL:互換モード、H2は複数のデータベースと互換性があり、値は次のようになります:DB2、Derby、HSQLDB、MSSQLServer、MySQL、Oracle、PostgreSQL

  • AUTO_RECONNECT=TRUE:接続が失われた後、自動的に再接続します

  • AUTO_SERVER=TRUE:自動ミキシングモードを有効にして、複数の接続を開くことができるようにします。このパラメーターは、メモリ内の実行モードをサポートしていません

  • TRACE_LEVEL_SYSTEM_OUT、TRACE_LEVEL_FILE:トレースログをコンソールまたはファイルに出力します。値は、OFFの場合は0、ERROR(デフォルト)の場合は1、INFOの場合は2、DEBUGの場合は3です。

  • SET TRACE_MAX_FILE_SIZE mb:トレースログファイルのサイズを設定します。デフォルトは16Mです。

おすすめ

転載: blog.csdn.net/qq_31762741/article/details/122967384
おすすめ