30.6使用jOOQ Java面向对象查询(jOOQ)是Data Geekery的一个流行产品, 它从您的数据库生成Java代码,并允许您通过其流畅的API构建类型安全的SQL 查询。...商业版和开源版都可以与Spring Boot一起使用。 30.6.1代码生成 要使用jOOQ类型安全查询,您需要从数据库模式生成Java类。您可以按照jOOQ用户手册中的说明进行 操作。...您还可以 使用Spring引导定义的版本变量(例如 h2.version )来声明插件的数据库依赖性。...方言 除非已配置 spring.jooq.sql-dialect 属性,否则Spring Boot将确定用于数据源的SQL方言。...30.6.4自定义jOOQ 通过定义自己的 @Bean 定义可以实现更高级的自定义,这些定义在创建jOOQ Configuration 时使用。
本文将会演示如何在Spring Boot项目中使用mysql数据库。...当spring boot在classpath下发现某个数据库依赖存在且在代码中有关于Datasource Bean的定义时,就会自动创建一个数据库连接。...PS:在生产环境中不要使用create-drop,这样会在程序启动时先删除旧的,再自动创建新的,最好使用update;还可以通过设置spring.jpa.show-sql = true来显示自动创建表的...语句,也没有在代码中涉及到数据库连接、建立查询等方面的内容。...中可以增加findBookByIsbn(String isbn)函数,JPA会自动创建对应的SQL查询——根据isbn查询图书,这种将方法名转换为SQL语句的机制十分方便且功能强大,例如你可以增加类似findByNameIgnoringCase
h2dabase 基于内存的数据库,更常见于嵌入式数据库的使用场景,依赖小,功能齐全;一般来讲,正常的商业项目用到它的场景不多,但是在一些特殊的 case 中,还是比较有用的,比如用于单元测试,业务缓存...属性配置 既然是连接数据库,当然少不了数据库的相关配置,在项目的资源路径下,新建配置文件application.properties # 数据库的相关配置 spring.datasource.url=jdbc...=org.h2.Driver 上面的配置方式,和我们的 mysql 数据库配置没有什么特别的,这里的 url 请注意一下 jdbc:h2:~/h2-db: 嵌入式使用姿势,会在用户根目录下生成一个名为h2...-db.mv.db的文件(数据库的 schema 和 d column 就存在里面) jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1: 内存模式,应用重启之后数据库会清空,所以在测试用例中...=/h2 #进行该配置,程序开启时就会启动h2 web consloe spring.h2.console.enabled=true 最好开启一下 jpa 的 sql 语句 spring.jpa.show-sql
,但是在一些特殊的 case 中,还是比较有用的,比如用于单元测试,业务缓存,一些简单的示例 demo 等;本文将手把手教你创建一个继承 h2dabase 的项目,并支持从 sql 中导入预定好的 schema...属性配置 既然是连接数据库,当然少不了数据库的相关配置,在项目的资源路径下,新建配置文件application.properties # 数据库的相关配置 spring.datasource.url=jdbc...=org.h2.Driver 上面的配置方式,和我们的 mysql 数据库配置没有什么特别的,这里的 url 请注意一下 jdbc:h2:~/h2-db: 嵌入式使用姿势,会在用户根目录下生成一个名为h2...-db.mv.db的文件(数据库的 schema 和 d column 就存在里面) jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1: 内存模式,应用重启之后数据库会清空,所以在测试用例中...=/h2 #进行该配置,程序开启时就会启动h2 web consloe spring.h2.console.enabled=true 最好开启一下 jpa 的 sql 语句 spring.jpa.show-sql
30.3.3创建和删除JPA数据库 默认情况下,仅当您使用嵌入式数据库(H2,HSQL或Derby)时,才会自动创建JPA数据库。您可以使用 spring.jpa.* 属性显式配置JPA设 置。...⇐ 立即查看 Spring数据包括JDBC的存储库支持,并将自动为 CrudRepository 上的方法生成SQL。对于更高级的查询,提供了 @Query 注释。...当必要的依赖项在类路径上时,Spring Boot将自动配置Spring数据的JDBC存储库。可以使用 spring-boot-starter-data-jdbc 上的单个依 赖项将它们添加到项目中。...30.5使用H2的Web控制台 该H2数据库提供了一个 基于浏览器的控制台是Spring Boot可以自动为您配置。满足以下条件时,将自动配置控制台: 您正在开发基于servlet的Web应用程序。...com.h2database:h2 在类路径上。 您正在使用Spring Boot的开发人员工具。
传统的XML配置方式 2.1 引入依赖 首先,在pom.xml文件中添加MyBatis和数据库驱动的依赖: <!...MyBatis动态SQL 4.1 使用XML配置方式 动态SQL是MyBatis的一个强大特性,可以根据不同条件拼接SQL语句,从而实现更加灵活的查询。...通过@SelectProvider注解指定了使用的Provider类和方法,Provider类中动态生成SQL语句。...在需要优化查询性能时,可以考虑使用MyBatis的缓存机制。 6.2 批量操作 MyBatis支持批量插入、更新和删除操作,通过批量操作可以减少数据库交互次数,提高性能。...在实际项目中,根据具体需求选择合适的集成方式和优化策略,能够更好地发挥Spring Boot和MyBatis的优势,提升开发效率和系统性能。
配置 Spring Data JPA添加依赖首先,在 Maven 的 pom.xml 文件中添加 Spring Data JPA 和数据库驱动的依赖: findByEmail(String email);或者使用 @Query 注解自定义查询:import
为了测试我们的代码,我们编写了单元测试,并且用H2内存数据库来生成我们的测试数据。通过该项目,我们希望读者可以快速掌握现代化Java Web开发的技巧以及最佳实践。...至此,我们已经成功地在项目中集成了Mybatis,增添了与数据库交互的能力。但是这还不够,一个现代化的Web项目,肯定会上缓存加速我们的数据库查询。...这里我们使用H2作为我们测试场景中使用的数据库。 要使用H2也很简单,只需要跟使用mysql时配置一下即可。...这样当我们测试时,h2就会读取这两个文件,初始化我们所需要的表结构以及数据,然后在测试结束时销毁,不会对我们的mysql数据库产生任何影响。这就是内存数据库的好处。...另外,别忘了在pom.xml中将h2的依赖的scope设置为test。 使用Spring Boot就是这么简单,无需修改任何代码,轻松完成数据库在不同环境下的切换。
升级完毕之后,执行所有现存的集成测试,发现有部分OffsetDateTime类型入参的查询方法出现异常,于是进行源码层面的DEBUG找到最终的问题并且解决。 ?...,当MyBatis版本升级为3.5.5后再次执行,在SQL执行日志输出正确的前提下返回了一个空集合,具体的内容如下: 查询订单列表:[] 虽然上帝视角是确认了入参解析有问题,但是基于第一次发生异常的日志...中的doQuery()方法中执行,使用了占位符参数的查询会经由doQuery()方法中的prepareStatement()方法然后调用PreparedStatementHandler#parameterize...同样的问题在h2数据库中不会出现,于是稍微DEBUG了一下h2数据库驱动进行参数设置的源码,最终定位到org.h2.value.DataType(驱动包的版本为com.h2database:h2:1.4.200...本文的demo项目仓库: Github:https://github.com/zjcscut/spring-boot-guide/tree/master/ch9-mybatis-mysql (本文完 c
我们建议仅在创建非浏览器客户端使用的服务时才完全禁用CSRF保护。...30.使用SQL数据库 在Spring框架提供用于使用 JdbcTemplate 完成“对象关系映射”的技术,如休眠使用SQL数据库,从直接JDBC访问广泛的支持。...Spring数据 提供了更多级别的功能:直接从接口创建 Repository 实现,并使用约定从方法名称生成查询。...Spring Boot可以自动配置嵌入式H2, HSQL和Derby数据库。您无需提供任何连接URL。您只需要包含要使用的嵌入式数据库的构建依赖项。...禁用数据库的自动关闭允 许Spring Boot控制数据库何时关闭,从而确保在不再需要访问数据库时发生这种情况。
升级完毕之后,执行所有现存的集成测试,发现有部分OffsetDateTime类型入参的查询方法出现异常,于是进行源码层面的DEBUG找到最终的问题并且解决。...,当MyBatis版本升级为3.5.5后再次执行,在SQL执行日志输出正确的前提下返回了一个空集合,具体的内容如下: 查询订单列表:[] 虽然上帝视角是确认了入参解析有问题,但是基于第一次发生异常的日志...中的doQuery()方法中执行,使用了占位符参数的查询会经由doQuery()方法中的prepareStatement()方法然后调用PreparedStatementHandler#parameterize...[m-u-e-10.png] 同样的问题在h2数据库中不会出现,于是稍微DEBUG了一下h2数据库驱动进行参数设置的源码,最终定位到org.h2.value.DataType(驱动包的版本为com.h2database...:h2:1.4.200)的第1333行有对应JSR310.OFFSET_DATE_TIME的解析逻辑,所以h2数据库驱动可以支持所有JSR310引入的参数类型的参数值设置。
这两个项目在简化数据访问方面发挥着至关重要的作用,但它们之间有什么区别,什么时候应该使用其中一个而不是另一个?...当您的项目依赖于 JPA 并且主要涉及关系数据库时,Spring Data JPA 是理想的选择。...、从方法名称自动生成查询以及定义自定义 JPQL 或本机 SQL 查询的能力等功能。这些功能显着减少了数据库操作所需的样板代码量。...: 除了自动生成查询之外,您还可以使用 Spring Data JPA 的方法命名约定定义自定义查询方法,或者使用 JPQL(Java 持久性查询语言)或本机 SQL 查询。...: Spring Data JPA 允许您使用规范和标准查询创建复杂的查询,提供灵活的方式来定义查询谓词。
为了测试我们的代码,我们编写了单元测试,并且用H2内存数据库来生成我们的测试数据。通过该项目,我们希望读者可以快速掌握现代化Java Web开发的技巧以及最佳实践。...然后在你的mysql中插入几条product的信息,就可以运行该项目看看是否能够查询成功了。 至此,我们已经成功地在项目中集成了Mybatis,增添了与数据库交互的能力。...这里我们使用H2作为我们测试场景中使用的数据库。 要使用H2也很简单,只需要跟使用mysql时配置一下即可。在application.yml文件中: ?...这样当我们测试时,h2就会读取这两个文件,初始化我们所需要的表结构以及数据,然后在测试结束时销毁,不会对我们的mysql数据库产生任何影响。这就是内存数据库的好处。...另外,别忘了在pom.xml中将h2的依赖的scope设置为test。 使用Spring Boot就是这么简单,无需修改任何代码,轻松完成数据库在不同环境下的切换。
什么是h2数据库? H2是一个Java编写的关系型数据库,它可以被嵌入Java应用程序中使用,或者作为一个单独的数据库服务器运行。...data: classpath:db/data.sql ##h2 web console设置 #表明使用的数据库平台是h2 platform: h2 # 进行该配置后,h2 web...enabled: true 生成内存数据库H2 启动H2数据库有两种方式 第一种: 自动执行.sql文件,每次重新启动项目是,都会去运行一次操作文件 DROP TABLE IF EXISTS `student...,借用Spring Data Jpa的注解,启动时自动创建内存数据库 @Entity @Data @Accessors(chain = true) @Table(name = "student") @AllArgsConstructor...使用配置的账号密码进行登录,别的不说,先跑起来最要紧 (注意:这时对数据库中的数据进行任何的改变都将是无效的,需要对数据做持久化才能保存数据) 持久化 修改yaml配置 # windows本地数据库地址
项目依赖 关于如何创建一个 SpringBoot 的项目工程,不再本文的描述范围内,如有兴趣可以到文末的个人站点获取 在这个示例工程中,我们的选用 h2dabase 作为数据库(方便有兴趣的小伙伴直接获取工程源码之后...数据库初始化 我们借助jooq-codegen-maven插件来自动生成数据库相关的代码,对这一段逻辑感兴趣的小伙伴可以参考博文:【DB 系列】Jooq 代码自动生成 后文中使用的表结构如下 DROP...=/h2 #进行该配置,程序开启时就会启动h2 web consloe spring.h2.console.enabled=true II....InsertQuery 方式 上面两种写法比较常见,而直接使用 InsertQuery 的方式,在实际的业务开发中可能并没有上面的优雅,但某些特殊场景下还是很有用的 /** * 不使用自动生成的代码来原生插入数据...,重点在上面的实现中,并没有利用自动生成的代码,如 table: DSL.table(表名) field: DSL.field(列名,类型) 通过上面的的 case,我们可以知道在不自动生成 DB 对应的代码前提下
第一次访问会进入如下界面: 2.2 使用H2 Console与DataGrip执行数据库操作 2.2.1 执行SQL语句 H2 Console中,用户可直接输入和执行SQL语句,如创建表、插入数据、查询数据等...在大型数据仓库或更密集的应用中,PostgreSQL可能会有其限制。 功能 H2是一个全功能的关系数据库管理系统,支持SQL,并且可以嵌入到Java应用程序中或者作为数据库服务器使用。...Java中的H2应用(Spring Boot和Spring Data JPA) 在Java项目中,Spring Boot和Spring Data JPA已经成为了主流的开发框架和技术。...H2数据库与这些技术的集成也非常简单和直观。在本章中,我们将深入探讨如何在基于Spring Boot的项目中使用H2数据库,并借助Spring Data JPA进行数据操作。...4.1 在Spring Boot项目中集成H2 4.1.1 添加依赖 要在Spring Boot项目中集成H2数据库,只需在项目的pom.xml文件中添加以下依赖: <
H2 H2是一个超轻量级的数据库,引入一个 1.5M 的 jar 就可以运行使用,同时支持 JDBC,内嵌,内存和服务三种模式,这样引入 H2 以后我们就可以方便的在本地调试项目了。...答案是不需要的,我们使用 MyBatisGenerator 自动生成。怎么生成?看下文。 Flyway Flyway 是一个数据库 Migration 工具,为什么引入这个工具呢?...flyway 是执行 migrate 的入口。 最后需要在 sqlSessionFactory 添加一个 depends-on="flyway" 这样便可以在创建工厂的时候执行数据库脚本了。...MyBatis-Generator MyBatis-Generator 的目的就是通过创建好的数据库,逆向生成 model、 mapper 和 xml 的工具,这样可以大大减少我们的工作量。...UserExample.createCriteria 的方法是 generator 提供的可以组装 sql 的工具,上面的逻辑是先通过 openid 查询数据库中是否已经存在,如果存在就更新,否则创建。
支持路径名中的空格。不得引用设置。 使用H2控制台 H2控制台应用程序有三个主要面板:顶部的工具栏,左侧的树和右侧的查询/结果面板。数据库对象(例如,表)列在左侧。...在查询面板中键入SQL命令,然后单击[运行]。结果显示在命令下方。 插入表名称或列名称 要将表和列名称插入脚本,请单击树中的项目。如果在查询为空时单击表,则会SELECT * FROM ...添加。...在键入查询时,使用的表在树中展开。例如,如果键入,SELECT * FROM TEST T WHERE T.则会扩展表TEST。...在NetBeans中使用H2 使用Netbeans SQL执行窗口时存在一个已知问题:在执行查询之前,SELECT COUNT(*) FROM 运行表单中的另一个查询。...使用H2和jOOQ jOOQ在JDBC之上添加了一个薄层,允许类型安全的SQL构造,包括高级SQL,存储过程和高级数据类型。jOOQ将您的数据库模式作为代码生成的基础。
领取专属 10元无门槛券
手把手带您无忧上云