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