String tableName = "sample_table";
DSLContext create = DSL.using(SQLDialect.MYSQL);
Table<Record> table = DSL.tableByName(tableName);
String sql1 = create.insertInto(table, Arrays.asList(
DSL.fieldByName("id"),
DSL.fieldByName("roll_no"),
DSL.fieldByName("name"),
DSL.fieldByName("date_enrolled"),
DSL.fieldByName("sex")
))
.values(
"1",
12,
"Raman",
new DateTime(),
Sex.Male
)
.getSQL(ParamType.INLINED);
insert into `sample_table` (`id`, `roll_no`, `name`, `date_enrolled`, `sex`) values ('1', 12, 'Raman', '2016-04-03T03:55:37.940+05:30', 'Male')
MySQL不接受此处生成的datetime值。我探索并发现jOOQ转换器可以用于自定义转换。我可以找到如何在获取数据时使用转换的示例,但无法弄清楚如何在查询时使用转换器。如何使用jOOQ转换器生成SQL而不生成代码?或者是否有更好的方法为SQL生成此查询。
(在这个答案中,我假设您的datetime
类型实际上是org.joda.time.datetime
)
这里最简单的方法是手动将datetime
数据类型转换为JDBCtimestamp
new Timestamp(new DateTime().getMillis());
在不使用代码生成器时,使用转换器和数据类型绑定要乏味得多。我个人建议不要这样做。
// This will be your converter
class DateTimeConverter implements Converter<Timestamp, DateTime> { ... }
// This is how you create a new data type:
public static final DataType<DateTime> DATETIME =
SQLDataType.TIMESTAMP.asConvertedDataType(new DateTimeConverter);
Field<DateTime> value = DSL.val(new DateTime(), DATETIME);
与始终显式地用DSL.val()
调用包装单个绑定值相比,您可以像下面这样声明表中的单个字段:
Field<Integer> id = field(name("id"), Integer.class);
Field<Integer> rollNo = field(name("roll_no"), Integer.class);
Field<String> name = field(name("name"), String.class);
Field<DateTime> dateEnrolled = field(name("date_enrolled"), DATETIME);
Field<Object> sex = field(name("sex")); // Don't know what this type is in your code
现在,您可以使用转换器使用上述字段插入数据:
create.insertInto(table,
id, rollNo, name, dateEnrolled, sex)
.values(
"1",
12,
"Raman",
new DateTime(),
Sex.Male)
.getSQL(ParamType.INLINED);
正如您所看到的,在这样做了一段时间之后,您将通过使用代码生成器来节省大量时间······
问题内容: 我使用jOOQ 3.11.11生成了这样的SQL模板。 SQL模板: 将存储SQL模板,并根据实时查询条件确定参数。 实时SQL: order by子句有问题。 所以。如何用 “ id desc” 或 “ name asc” 用param 排序 替换订单并消除引号? 问题答案: 创建一个绑定变量,该绑定变量的生成方式与SQL一样,或者您选择使用命名参数,或者选择内联绑定变量。有关绑定变
有时,当函数具有这样的签名时,它可能会变得毛茸茸的: 对于编译器来说,所有UUID都是相同的,因此希望在运行时被数据库捕获。 我喜欢jOOQ在编译时捕获许多问题的方式,我也想解决这个问题。我的目标是让每个表的每个键都有自己的类,并让这些字段正确生成pojos。 实现这一目标的最佳方法是什么?我想出了以下几点: 全面的JavaGenerator实现 具有大量强制类型映射的转换器,以及手动创建的键类
我是ORM的忠实粉丝,特别是当涉及到。NET和实体框架时,使用LINQ使您的数据访问不那么乏味,更令人愉快。 然而,我目前正在研究Java,尤其是ORMS。我在SQL Server数据库中尝试了nHybernate--由于某些表中没有键(唯一约束),我开始查看Jooq。 不过,我已经设法使用JOOQ(V3.2.0)从SQL Server数据库生成了Java类--并非没有错误。 对于未找到类的异常,
我使用的项目使用JOOQ及其生成器从Postgres数据库生成类。数据库进化由播放进化管理。我们还使用git作为版本控制系统。当从git获取新的evolutions/jooq代码时,这组工具会导致某种自引用问题: 由于缺少从这些表中生成的类而导致编译问题,因此无法应用由其他团队成员创建的新表的演变。 我在考虑以下解决方案: 应用sbt的演变-创建sbt任务-到目前为止未能实现, 堆栈: PlayF
我正在尝试JOOQ生成数据库模式,以便在spring boot中使用它。我使用以下maven配置: 这适用于具有单键的实体。它为表tbladdservice生成这样的代码: 但对于具有复合键的表(称为tbladdservicecon),它只生成: 这个问题(据我所知):缺少@Id。如果我打电话 我收到此错误(应用程序无法启动): 有没有办法说服JOOQ生成@Id语句? 非常感谢您的帮助。 为了更清
在我的Oracle数据库中,我有存储为VARCHAR的数量值。从数据库中检索记录时,我希望将它们映射到一个POJO,其中金额值表示为double。不幸的是,我不能使用强制类型,因为在数据库中,所有内容都存储为VARCHAR,并且没有模式将列标识为包含金额值的列。 我正在查看jOOQ转换器,这似乎是我想要的。因此,我为此创建了一个jOOQ转换器: 然而,每当我想使用将数据库记录映射到我的POJO时,