首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

另一种思考:为什么不选JPA、MyBatis,而选择JDBCTemplate?

,查询POJO对象,查询条件是对象属性,不再需要有任何表、字段等关系的概念,这样java程序员就更容易做持久层的操作。...不管是hibernate还是jpa,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有(实现)关联关系,你就不能把两个实体(或者表)join起来查询。...这是很恼火的事情,因为我们很多时候并不需要显式定义两个实体类之间的关联关系就可以实现业务逻辑,如果使用hql,只是为了join我们就必须在两个实体类之间添加代码,而且还不能逆向工程,如果表里面没有定义外键约束的话...,JOOQ还可以用Java代码来编写SQL语句,利用IDE的代码自动补全功能,自动提示表名和字段名,减少程序员记忆负担,还可以在元数据发生变化时发生编译错误,提示程序员修改相应的SQL语句。...但据说Ebean不排斥SQL,可以直接用SQL查询,也可以用类似JOOQ的DSL方式在代码中构造SQL语句(还是JPQL语句?),但没用过Ebean,所以具体细节不清楚。

2.6K20

放弃 MyBatis、JPA,我最终选择了 JDBC Template!真香!!

,查询POJO对象,查询条件是对象属性,不再需要有任何表、字段等关系的概念,这样java程序员就更容易做持久层的操作。...不管是hibernate还是jpa,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有(实现)关联关系,你就不能把两个实体(或者表)join起来查询。...,JOOQ还可以用Java代码来编写SQL语句,利用IDE的代码自动补全功能,自动提示表名和字段名,减少程序员记忆负担,还可以在元数据发生变化时发生编译错误,提示程序员修改相应的SQL语句。...但据说Ebean不排斥SQL,可以直接用SQL查询,也可以用类似JOOQ的DSL方式在代码中构造SQL语句(还是JPQL语句?),但没用过Ebean,所以具体细节不清楚。...另外,关注公众号Java技术栈,在后台回复:面试,可以获取我整理的 Java/ MyBatis 系列面试题和答案,非常齐全。

3.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    我选择 JDBCTemplate!

    ,查询POJO对象,查询条件是对象属性,不再需要有任何表、字段等关系的概念,这样java程序员就更容易做持久层的操作。...不管是hibernate还是jpa,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有(实现)关联关系,你就不能把两个实体(或者表)join起来查询。...,JOOQ还可以用Java代码来编写SQL语句,利用IDE的代码自动补全功能,自动提示表名和字段名,减少程序员记忆负担,还可以在元数据发生变化时发生编译错误,提示程序员修改相应的SQL语句。...但据说Ebean不排斥SQL,可以直接用SQL查询,也可以用类似JOOQ的DSL方式在代码中构造SQL语句(还是JPQL语句?),但没用过Ebean,所以具体细节不清楚。...最终,我决定选择JDBC Template。

    15810

    我选择 JDBCTemplate!

    ,查询POJO对象,查询条件是对象属性,不再需要有任何表、字段等关系的概念,这样java程序员就更容易做持久层的操作。...不管是hibernate还是jpa,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有(实现)关联关系,你就不能把两个实体(或者表)join起来查询。...这是很恼火的事情,因为我们很多时候并不需要显式定义两个实体类之间的关联关系就可以实现业务逻辑,如果使用hql,只是为了join我们就必须在两个实体类之间添加代码,而且还不能逆向工程,如果表里面没有定义外键约束的话...,JOOQ还可以用Java代码来编写SQL语句,利用IDE的代码自动补全功能,自动提示表名和字段名,减少程序员记忆负担,还可以在元数据发生变化时发生编译错误,提示程序员修改相应的SQL语句。...但据说Ebean不排斥SQL,可以直接用SQL查询,也可以用类似JOOQ的DSL方式在代码中构造SQL语句(还是JPQL语句?),但没用过Ebean,所以具体细节不清楚。

    2.8K40

    再见!Mybatis,你好!JDBCTemplate

    ,查询POJO对象,查询条件是对象属性,不再需要有任何表、字段等关系的概念,这样java程序员就更容易做持久层的操作。...不管是hibernate还是jpa,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有(实现)关联关系,你就不能把两个实体(或者表)join起来查询。...,JOOQ还可以用Java代码来编写SQL语句,利用IDE的代码自动补全功能,自动提示表名和字段名,减少程序员记忆负担,还可以在元数据发生变化时发生编译错误,提示程序员修改相应的SQL语句。...但据说Ebean不排斥SQL,可以直接用SQL查询,也可以用类似JOOQ的DSL方式在代码中构造SQL语句(还是JPQL语句?),但没用过Ebean,所以具体细节不清楚。...最终,我决定选择JDBC Template。

    3.9K10

    十步完全理解 SQL

    ,但是并非如此,以 Oracle 等常用数据库为例,数据是从硬盘中抽取到数据缓冲区中进行操作。)...a 可能输如下表的连接: ? 将它放到之前的例子中就变成了: ? 尽管将一个连接表用逗号跟另一张表联合在一起并不是常用作法,但是你的确可以这么做。...CROSS JOIN 这个连接过程就是两个连接的表的乘积:即将第一张表的每一条数据分别对应第二张表的每条数据。我们之前见过,这就是逗号在 FROM 语句中的用法。...一旦你建立起来了表的引用,经过修改、变形,你能够一步一步的将其映射到另一个模型中。 SELECT 语句就像一个“投影仪”,我们可以将其理解成一个将源表中的数据按照一定的逻辑转换成目标表数据的函数。...从概念上来说,他们很好理解: DISTINCT 在映射之后对数据进行去重 UNION 将两个子查询拼接起来并去重 UNION ALL 将两个子查询拼接起来但不去重 EXCEPT 将第二个字查询中的结果从第一个子查询中去掉

    1.7K90

    springboot(3)--持久化

    这里简单描述一下连接池与持久层框架的区别,连接池是简化了我们的程序 连接数据库操作,而持久层框架更多的关注将编程语言映射成sql结构化语言, 两者协同操作,并且后者依赖于前者。...springboot&jpa JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中...对于喜欢写sql的码农来说,JOOQ可以完全满足你控制欲,可以是用Java代码写出sql的感觉来。... 2.编写jooq配置类 jooq中与数据库交互的核心类是DSLContext,将数据源注入DSLContext并暴露bean: @Configuration...总结 经过上边一系列描述,我们实现了springboot与各种持久层框架的融合,并且简单的介绍了其差异和各自的优缺点以及使用场景,大致可以归为三类: 1.偏向原生操作 dbUtils和jdbcTemplate

    1.1K30

    1. Mybatis 简介

    可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录 4) MyBatis 是一个 半自动的ORM...和 JPA 操作简便,开发效率高 程序中的长难复杂 SQL 需要绕过框架 内部自动生产的 SQL,不容易做特殊优化 基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。...Java持久层框架: MyBatis Hibernate(实现了JPA规范) jOOQ Guzz Spring Data(实现了JPA规范) ActiveJDBC ...... 5....ORM: 对象关系映射 ‍ O(Object):Java虚拟机中的Java对象 R(Relational):关系型数据库 M(Mapping):将Java虚拟机中的Java对象映射到数据库表中一行记录...,或是将数据库表中一行记录映射成Java虚拟机中的一个Java对象。

    19910

    JOOQ框架常见SQL注入场景

    1.1 核心接口 通过这两个接口可以执行对应的SQL语句: org.jooq.impl.DSL是生成所有jOOQ对象的主要类。...但是jOOQ并不支持每个数据库中的所有SQL功能,JOOQ还存在很多字符串sql拼接的API,例如如下的and(String s),可以看到JOOQ給对应的API标记了@PlainSQL注解,注释里也提醒了会存在...实际业务中往往有动态表名的需求,例如函数接受一个名为"entityType"的参数,并根据该参数查询表entityType_other_stuff。...同样是上面的例子,修改后具体的查询将tableName用``包裹,此时输入任意内容均会被认为是表名的一部分,从某种程度上避免了SQL注入的风险。 动态列名DSL.field()同理。...} 也就是说,在进行代码审计的时候,可以通过检索 @Allow.PlainSQ 关键字,来查看对应的方法使用是否合理,是否通过 ?

    18210

    5大隐藏的jOOQ功能

    jOOQ的主要价值主张是显而易见的:Java中的类型安全的嵌入式SQL。 当然,积极寻找这样一个SQL构建者的人将不可避免地偶然发现jOOQ并喜欢它。...ASCII图表: 这些功能是普通jOOQ查询的明显补充,但正如我在第1节中所示,您也可以从JDBC结果中获得免费导出!...Result.fetchFromTXT(String)导入到实际的jOOQ Result中,您就可以继续在jOOQ上运行Result(或者如第1节所示,使用JDBC ResultSet!)。...旁注:不要误会我的意思:我认为你不应该因为可以而mock整个数据库层。...我的想法可以在这个推特风暴中找到: 说到合成JDBC连接...... 5.解析连接 jOOQ 3.9引入了一个SQL解析器,其主要用例是为代码生成器解析和反向工程DDL脚本。

    2.6K30

    ORM哪家强?java,c#,php,python,go 逐一对比, 网友直呼:全面客观

    然后依据这两个问题的结论去审视目前主流后端语言java, c#, php, python, go各自的orm库,对比研究下他们的优缺点。最后给出总结和参考文档。...你是否还有勇气说,写出来的sql绝对正确。我估计比例不超过70% 再稍微复杂点,如果是下面的sql?...以至于可以肯定的说,100%的可能性会出现。 要特别注意sql语法 例如你在查询的时候必须写from,绝对不能误写成form,但是在实际开发过程中,很容易就打错了。...我可以将上面OrderModel业务模型建立一张对应表,里面的4个属性,对应数据表里的4个字段,这完全可以。 但是我是电商小白,不是数据库小白啊,这样存储的话,肯定不利于统计订单商品的。...database first 模式下, 系统设计者优先考虑的是数据表order,order_detail,他们中任何一张表都不能完整的描述清楚一个完整业务,只能够描述局部细节,不利于设计者对于系统的整体把控

    2.7K91

    【SpringBoot DB系列】Jooq批量写入采坑记录

    [logo.jpg] 【SpringBoot DB系列】Jooq批量写入采坑记录 前面介绍了jooq的三种批量插入方式,结果最近发现这里面居然还有一个深坑,我以为的批量插入居然不是一次插入多条数据,而是一条一条的插入...日志验证 上面三种写法中,第一种批量插入方式,并不是我们传统理解的一次插入多条记录,相反它是一条一条的插入的,我们可以通过开启jooq的日志来查看一些执行的sql情况 配置文件 application.properties...,添加下面的配置 debug=false trace=false logging.level.org.jooq=DEBUG 如果有自己的logback.xml配置文件,可以调整一下日志级别,将jooq的...// 表结构中,name的字段最大为20,下面插入的第二条数据长度超限 try { this.batchSave(Arrays.asList(new PoetBO(14, "yh"), new...源码分析 上面是从日志以及结果表现来推测实际的执行情况,接下来就需要从源码角度来看一下,是否真的是单个的执行了 省略掉具体的定位过程,直接找到org.jooq.impl.BatchCRUD#execute

    1.2K00

    【SpringBoot DB系列】Jooq批量写入采坑记录

    【SpringBoot DB系列】Jooq批量写入采坑记录 前面介绍了jooq的三种批量插入方式,结果最近发现这里面居然还有一个深坑,我以为的批量插入居然不是一次插入多条数据,而是一条一条的插入.....日志验证 上面三种写法中,第一种批量插入方式,并不是我们传统理解的一次插入多条记录,相反它是一条一条的插入的,我们可以通过开启jooq的日志来查看一些执行的sql情况 配置文件 application.properties...,添加下面的配置 debug=false trace=false logging.level.org.jooq=DEBUG 如果有自己的logback.xml配置文件,可以调整一下日志级别,将jooq的...从上面的sql来看,后面两个确实是一次插入多条,但是第一个,也没有将具体执行的sql打印出来,所有不看源码的话,也没有办法实锤是一条一条插入的 为了验证这个问题,一个简单的解决办法就是批量插入两条数据,...第一条正常,第二条异常,如果第一条插入成功,第二条失败那就大概率是单个插入的了 // 表结构中,name的字段最大为20,下面插入的第二条数据长度超限 try { this.batchSave(

    1.5K10

    Oracle实现主键自增长的几种方式

    使用SQLServer、MySQL时,无论我们使用的是直接JDBC连接数据库,还是通过Hibernate操纵数据库,我们只需要设置一个选项或者一行注解便可以实现主键的自增长。...但Oracle没有直接提供主键自增长的功能,这里我们可以使用两种方式来解决主键自增长的问题。 第一种,通过序列以及触发器实现主键自增长。 这种方式适用于直接使用JDBC连接数据库。...这种方式将主键自增长的任务完全交给数据库,我们无需在代码层面上进行任何控制。 第二种,通过序列以及Hibernate配置实现自增长。 这种方式适用于通过Hibernate连接数据库的方式。...进一步,Hibernate的级联增加也会因为无法获取到主键而无法插入数据到关系表中。...1 9 start with 1; 接着,为相对于的表创建触发器: 1 /* 创建触发器(两个触发器请分开执行) */ 2 --为bitinfo表创建触发器 3 create or replace

    1.7K20

    10种简单的Java性能优化学习

    我在以前的博客中已经对这一点进行了说明,请参考10个精妙的Java编码最佳实践。 在我们对以上几种情况的比较结束后,应该能得出部分结论。...比如jOOQ的 Table.equals() 方法说明是,用来比较两张表是否相同。不论具体实现类型如何,它们必须要有相同的字段名。...在jOOQ中,大多数的表实例是由jOOQ的代码生成器生成的,这些实例的 equals() 方法都经过了深度优化。...而数十种其它的表类型(衍生表 (derived tables)、表值函数(table-valued functions)、数组表(array tables)、连接表(joined tables)、数据透视表...我们今天所研究的是,在调用 INTERSECT 操作之前,更加智能地将两个set自动的转化为 EnumSet 。

    1.3K60

    【SpringBoot DB 系列】Jooq 之新增记录使用姿势

    [logo.jpg] 【SpringBoot DB 系列】Jooq 之新增记录使用姿势 接下来我们开始进入 jooq 的增删改查的使用姿势系列,本篇将主要介绍如何利用 jooq 来实现添加数据 <!...项目依赖 关于如何创建一个 SpringBoot 的项目工程,不再本文的描述范围内,如有兴趣可以到文末的个人站点获取 在这个示例工程中,我们的选用 h2dabase 作为数据库(方便有兴趣的小伙伴直接获取工程源码之后...数据库初始化 我们借助jooq-codegen-maven插件来自动生成数据库相关的代码,对这一段逻辑感兴趣的小伙伴可以参考博文:【DB 系列】Jooq 代码自动生成 后文中使用的表结构如下 DROP...Record 实体类新增方式 在 jooq 中,借助自动生成的 Record 类来实现新增是最简单的 case,如下 private static final PoetTB table = PoetTB.POET...,重点在上面的实现中,并没有利用自动生成的代码,如 table: DSL.table(表名) field: DSL.field(列名,类型) 通过上面的的 case,我们可以知道在不自动生成 DB 对应的代码前提下

    1.1K20

    H2数据库教程_h2数据库编辑数据库

    大家好,又见面了,我是你们的朋友全栈君。 启动和使用H2控制台 H2控制台应用程序允许您使用浏览器访问数据库。这可以是H2数据库,也可以是支持JDBC API的其他数据库。...插入表名称或列名称 要将表和列名称插入脚本,请单击树中的项目。如果在查询为空时单击表,则会SELECT * FROM ...添加。在键入查询时,使用的表在树中展开。...使用H2和jOOQ jOOQ在JDBC之上添加了一个薄层,允许类型安全的SQL构造,包括高级SQL,存储过程和高级数据类型。jOOQ将您的数据库模式作为代码生成的基础。...主页和jOOQ教程的更多详细信息 在Web应用程序中使用数据库 有多种方法可以从Web应用程序中访问数据库。...一个是使用Apache Lucene,另一个(本机实现)将索引数据存储在数据库的特殊表中。

    5.3K30

    【SpringBoot DB 系列】Jooq 之新增记录使用姿势

    接下来我们开始进入 jooq 的增删改查的使用姿势系列,本篇将主要介绍如何利用 jooq 来实现添加数据 I....项目依赖 关于如何创建一个 SpringBoot 的项目工程,不再本文的描述范围内,如有兴趣可以到文末的个人站点获取 在这个示例工程中,我们的选用 h2dabase 作为数据库(方便有兴趣的小伙伴直接获取工程源码之后...数据库初始化 我们借助jooq-codegen-maven插件来自动生成数据库相关的代码,对这一段逻辑感兴趣的小伙伴可以参考博文:【DB 系列】Jooq 代码自动生成 后文中使用的表结构如下 DROP...Record 实体类新增方式 在 jooq 中,借助自动生成的 Record 类来实现新增是最简单的 case,如下 private static final PoetTB table = PoetTB.POET...,重点在上面的实现中,并没有利用自动生成的代码,如 table: DSL.table(表名) field: DSL.field(列名,类型) 通过上面的的 case,我们可以知道在不自动生成 DB 对应的代码前提下

    54610

    【Hibernate】Hibernate框架配置详解

    一般情况下,有两种方式可以进行Hibernate的配置,一种是通过配置文件进行配置,另一种是通过注解进行配置。 我将通过注解简单介绍Hibernate框架的配置。...hibernate-configuration> 不同数据库连接在Hibernate.cfg.xml中的配置不同,这里以MySQL为例。...Hibernate Annotation的知识,你可以阅读我的另一篇博文:Hibernate Annotation注解详解 五、编写测试文件 编写测试文件,自动生成数据库表: 1 package com.basehibernate.test...; 2 3 /** 4 * POJO注解导入数据库测试类 5 * 用于测试Annotation注解的POJO类是否能自动生成数据库表 6 * 时间:2014年6月4日 10:15:06...那么请检查POJO类文件的注解是否正确,重点检查类头@Entity @Table 部分的注解,两个POJO类中@Table 注解中的name属性相同会导致这个错误。

    1.4K30
    领券