顯示具有 isIn 標籤的文章。 顯示所有文章
顯示具有 isIn 標籤的文章。 顯示所有文章

2019年5月6日 星期一

Mybatis dynamic sql

這次專案是對既有的DB資料來開發系統,用到 Mybatis的generator 和dynamic sql 產生mapper及sql語法(不用寫任何的xml及欄位對應)  其中selectByExample 是對所有欄位都取出,但條件是依照web UI所輸入的欄位動態產生where condition,isEqualToWhenPresent就是當參數非null才會產生該條件,另外一個需求是需透過程式的if condition來動態加上條件。這些寫法也是透過官網的範例逐一摸索出來的,給有需要的人參考看看。

import static org.mybatis.dynamic.sql.SqlBuilder.isEqualToWhenPresent;
import static org.mybatis.dynamic.sql.SqlBuilder.isIn;
import static org.mybatis.dynamic.sql.SqlBuilder.isNull;
import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter;
import org.mybatis.dynamic.sql.select.QueryExpressionDSL;
...

@Override
 public Optional> searchEmployees(EmployeeCondition byCondition) {
                 QueryExpressionDSL>>.QueryExpressionWhereBuilder dsl =mapper.selectByExample()
               .where(BpsnDynamicSqlSupport.bpeno, isEqualToWhenPresent(byCondition.getBpeno()))
               .and(BpsnDynamicSqlSupport.alias, isEqualToWhenPresent(byCondition.getAlias()))
               .and(BpsnDynamicSqlSupport.bpnme, isEqualToWhenPresent(byCondition.getBpnme()))
               .and(BpsnDynamicSqlSupport.mobile1, isEqualToWhenPresent(byCondition.getMobile1()))
               .and(BpsnDynamicSqlSupport.address, isEqualToWhenPresent(byCondition.getAddress()))
               .and(BpsnDynamicSqlSupport.passportno, isEqualToWhenPresent(byCondition.getPassportno()));
   
    if(EmployeeQuery.ACTIVE.equals(EmployeeQuery.valueOf(byCondition.getWorkType()))) {
     dsl.and(BpsnDynamicSqlSupport.bpedy, isNull());
   }else if(EmployeeQuery.TRANSFER.equals(EmployeeQuery.valueOf(byCondition.getWorkType()))) {
    dsl.and(BpsnDynamicSqlSupport.deptNo, isIn("L","M"));
   }
   
         List list  =  dsl.build().execute();
         return list==null ? Optional.empty() : Optional.of(list);
 }
 

AI 時代的影響(2026-10-24的心得)

  寫了半個世紀程式、 曾出版《Clean Code》教全世界工程師把程式碼寫乾淨的 Robert C. Martin(Uncle Bob), 最近公開表示他已經有超過 95% 的時間不再逐行閱讀 AI 寫的程式碼。 一位一生都在強調「程式碼是寫給人讀的」宗師級人物,何以敢做出...