【问题标题】:Is there any methods to insert more jooq like way?有什么方法可以插入更多类似 jooq 的方法吗?
【发布时间】:2018-03-08 13:21:56
【问题描述】:

我有这样的 Postgresql 插入语句..

INSERT INTO users (user_id, pswd, name, email, email_use_yn)
VALUES (#{userId}, ENCODE(digest(#{newPswd}, 'sha256'), 'HEX'), #{name}, #{email}, 
COALESCE(IFCOND(#{email} IS NULL, 'N'::char, #{emailUseYn}::char), 'N'))

这里的 IFCOND 是用户定义的函数,如 mysql 的 IF 函数。 并且插入可以由jooq完成

dsl.insertInto(USERS, 
            USERS.USER_ID, USERS.PSWD, USERS.NAME, USERS.EMAIL, USERS.EMAIL_USE_YN)
    .values(user.getUserId(), 
            hex(SHA256(user.getPswd())), 
            user.getName(), 
            user.getEmail(),
            user.getEmail() == null ? "N" : 
                (user.getEmailUseYn() == null ? "N" : user.getEmailUseYn()))
    .execute();

但我很好奇它可以像 jooq 那样做得更多吗? 有吗?

【问题讨论】:

    标签: java sql postgresql insert jooq


    【解决方案1】:

    我假设“不像 jOOQ”,您的意思是您在 Java 中使用了条件运算符,而不是 SQL CASE 表达式。那么,就用the SQL CASE expression with jOOQ吧。

    这个 SQL 片段:

    COALESCE(IFCOND(#{email} IS NULL, 'N'::char, #{emailUseYn}::char), 'N'))
    

    可以这样写:

    coalesce(
        choose().when(val(user.getEmail()).isNull(), inline("N"))
                .otherwise(user.getEmailUseYn()), 
        inline("N")
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多