千家信息网

SpringBoot如何集成H2内存数据库

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,这篇文章主要为大家展示了"SpringBoot如何集成H2内存数据库",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot如何集成H2内存数据
千家信息网最后更新 2024年09月21日SpringBoot如何集成H2内存数据库

这篇文章主要为大家展示了"SpringBoot如何集成H2内存数据库",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot如何集成H2内存数据库"这篇文章吧。

准备

  • JDK 1.8 或更高版本

  • Maven 3 或更高版本

技术栈

  • Spring Data JPA

  • Spring Boot

目录结构

pom.xml

            jpa-example        cn.merryyou        1.0-SNAPSHOT        4.0.0     h3-webconsole             UTF-8        1.8                             org.springframework.boot            spring-boot-starter-data-jpa                             com.h3database            h3            1.4.196                             org.projectlombok            lombok                             org.springframework.boot            spring-boot-starter-test            test                            org.springframework.boot            spring-boot-starter-web                                                     org.springframework.boot                spring-boot-maven-plugin                                        org.apache.maven.plugins                maven-compiler-plugin                3.6.1                                    1.8                    1.8                                         

实体类 User

@Entity@Table(name = "t_user")@Datapublic class User {     @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;     private String name;     private String url;     @Override    public String toString() {        return "User{" +                "id=" + id +                ", name='" + name + '\'' +                ", url='" + url + '\'' +                '}';    }}
  • @Table声明此对象映射到数据库的数据表,通过它可以为实体指定表(talbe),目录(Catalog)和schema的名字。该注释不是必须的,如果没有则系统使用默认值(实体的短类名)。

  • @Id 声明此属性为主键。该属性值可以通过应该自身创建,但是Hibernate推荐通过Hibernate生成

  • @GeneratedValue 指定主键的生成策略。

    • TABLE:使用表保存id值

    • IDENTITY:identitycolumn

    • SEQUENCR :sequence

    • AUTO:根据数据库的不同使用上面三个

@Column 声明该属性与数据库字段的映射关系。

AddressRepository

public interface UserRepository extends JpaRepository {}

Spring Data JPA包含了一些内置的Repository,实现了一些常用的方法:findonefindallsave等。

application.yml

spring:  datasource:    url: jdbc:h3:mem:h3test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE    platform: h3    username: sa    password:    driverClassName: org.h3.Driver  jpa:    database-platform: org.hibernate.dialect.H2Dialect    hibernate:      ddl-auto: update    properties:      hibernate:        show_sql: true        use_sql_comments: true        format_sql: true  h3:    console:      enabled: true      path: /console      settings:        trace: false        web-allow-others: falselogging:  level: debug

连接配置

application.yml文件中对数据库进行连接配置

  • spring.datasource.url=jdbc:h3:mem:h3test,配置h3数据库的连接地址

  • spring.datasource.driver-class-name=org.h3.Driver,配置JDBC Driver

  • spring.datasource.username=sa,配置数据库用户名

  • spring.datasource.password=,配置数据库密码

当你完成依赖和连接配置这两步之后,你就可以在程序种使用h3了。spring会自动帮你完成DataSource的注入。

数据初始化配置

如果你需要在程序启动时对数据库进行初始化操作,则在application.properties文件中对数据库进接配置

  • spring.datasource.schema=classpath:db/schema.sql,进行该配置后,每次启动程序,程序都会运行resources/db/schema.sql文件,对数据库的结构进行操作。

  • spring.datasource.data=classpath:db/data.sql,进行该配置后,每次启动程序,程序都会运行resources/db/data.sql文件,对数据库的数据操作。

该配置非常适合开发环境,我会把数据库的结构构建sql放在resources/db/schema.sql,数据sql放在resources/db/data.sql中。这样每次运行程序我都可以得到一个新的数据库。这样就不需要我每次为了测试而修改数据中的内容了。

h3 web consloe配置

h3 web consloe是一个数据库GUI管理应用,就和phpMyAdmin类似。程序运行时,会自动启动h3 web consloe。当然你也可以进行如下的配置。

  • spring.h3.console.settings.web-allow-others=true,进行该配置后,h3 web consloe就可以在远程访问了。否则只能在本机访问。

  • spring.h3.console.path=/h3-console,进行该配置,你就可以通过YOUR_URL/h3-console访问h3 web consloeYOUR_URL是你程序的访问URl

  • spring.h3.console.enabled=true,进行该配置,程序开启时就会启动h3 web consloe。当然这是默认的,如果你不想在启动程序时启动h3 web consloe,那么就设置为false。

UserRepositoryTest

@SpringBootTest@RunWith(SpringRunner.class)@Slf4jpublic class UserRepositoryTest {     @Autowired    private UserRepository userRepository;     @Test    public void saveTest() throws Exception {        User user = new User();        user.setName("郑龙飞");        user.setUrl("http://merryyou.cn");        User result = userRepository.save(user);        log.info(result.toString());        Assert.assertNotNull(user.getId());    }     @Test    public void findOneTest() throws Exception{        User user = userRepository.findOne(1l);        log.info(user.toString());        Assert.assertNotNull(user);        Assert.assertTrue(1l==user.getId());    }}

h3 web consloe

以上是"SpringBoot如何集成H2内存数据库"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0