是否有任何方法可以插入更多的jooq方式?

时间:2018-03-08 13:21:57

标签: java sql postgresql insert jooq

我有像这样的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一样做得更好吗? 有没有?

1 个答案:

答案 0 :(得分:0)

我假设" not-so-jOOQ-like",你的意思是你在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")
);
相关问题