🎨
Andy開發紀錄
  • 關於
    • 自介
  • 設計模式
    • 觀察者模型
    • 有限狀態機
    • 裝飾器模式
  • 其他
    • Scrum敏捷式開發
    • SOLID設計
    • TDD驅動測試開發
    • Event Driven Architecture
    • CQRS命令查詢職責分離
    • Concurrent並行相關
      • Single Thread Execution
      • 共用元件設計
        • CountDownLatchWorkPool
        • IForkWorkService
      • Pattern
        • THREAD-PER-MESSAGE
        • PRODUCER CONSUMER
        • SINGLE THREAD
        • Guarded Suspension 守衛模式
      • IQueue
        • ListQueue
        • BlockQueue
        • OrderBlockQueue
  • 元件設計
    • Sql Help
      • SQL Help Generate
      • StringBuilderGenerator
      • SQL Generate
    • excel工具
    • BDD行為驅動開發
    • 多工設計
      • 多工自動調整Thread數量
    • 常用Design Patten實作
    • Telegram Bot元件
    • 代碼元件
    • HCP API元件
    • 文字解析元件
    • MockitObject
    • 資料驗證元件
    • Zip壓縮工具
    • Sql Code Generate
  • 讀書心得
    • Clean code第一章
  • side project
    • 後端服務
  • IDEA
    • IDEA 外掛推薦
    • IDEA 外掛開發
Powered by GitBook
On this page

Was this helpful?

  1. 元件設計

Sql Code Generate

透過native 產生相關物件

PreviousZip壓縮工具NextClean code第一章

Last updated 2 years ago

Was this helpful?

目的

通常複雜查詢對於ORM資料庫工具,常常不容易使用, 因此常常需要使用複雜sql 產生 po 與 mapper程式, 透過該程式可簡化物件產生

PO

/**
 *  2023-03-23 generate 說明SQL:select s.*,to_char(sysdate,'HH24') time, sysdate  from syscode s where 
 *  type_id=?
 */
public class SampleDTO
    implements Serializable
{
    private String typeId;
    private String codeId;
    private String codeData1;
    private String codeData2;
    private String codeData3;
    private String codeData4;
    private String time;
    private Timestamp sysdate;

    public void setTypeId(String typeId) {
        this.typeId = typeId;
    }

    public String getTypeId() {
        return typeId;
    }

    public void setCodeId(String codeId) {
        this.codeId = codeId;
    }

    public String getCodeId() {
        return codeId;
    }

    public void setCodeData1(String codeData1) {
        this.codeData1 = codeData1;
    }

    public String getCodeData1() {
        return codeData1;
    }

    public void setCodeData2(String codeData2) {
        this.codeData2 = codeData2;
    }

    public String getCodeData2() {
        return codeData2;
    }

    public void setCodeData3(String codeData3) {
        this.codeData3 = codeData3;
    }

    public String getCodeData3() {
        return codeData3;
    }

    public void setCodeData4(String codeData4) {
        this.codeData4 = codeData4;
    }

    public String getCodeData4() {
        return codeData4;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getTime() {
        return time;
    }

    public void setSysdate(Timestamp sysdate) {
        this.sysdate = sysdate;
    }

    public Timestamp getSysdate() {
        return sysdate;
    }
}
public class SampleMapper {
    private final JdbcOperations jdbcOperations;

    public SampleMapper(JdbcOperations jdbcOperations) {
        this.jdbcOperations = jdbcOperations;
    }

    private static io.github.h8000572003.domain.SampleDTO to(ResultSet rs, int index) {
        io.github.h8000572003.domain.SampleDTO po = new io.github.h8000572003.domain.SampleDTO();
        try {
            po.setTypeId(rs.getString(SampleMapper.SampleDTOColumn.TYPE_ID.name()));
            po.setCodeId(rs.getString(SampleMapper.SampleDTOColumn.CODE_ID.name()));
            po.setCodeData1(rs.getString(SampleMapper.SampleDTOColumn.CODE_DATA1 .name()));
            po.setCodeData2(rs.getString(SampleMapper.SampleDTOColumn.CODE_DATA2 .name()));
            po.setCodeData3(rs.getString(SampleMapper.SampleDTOColumn.CODE_DATA3 .name()));
            po.setCodeData4(rs.getString(SampleMapper.SampleDTOColumn.CODE_DATA4 .name()));
            po.setTime(rs.getString(SampleMapper.SampleDTOColumn.TIME.name()));
            po.setSysdate(rs.getTimestamp(SampleMapper.SampleDTOColumn.SYSDATE.name()));
            return po;
        } catch (final SQLException ex) {
            throw new RuntimeException("error", ex);
        }
    }

    private String getSql() {
        final StringBuilder builder = new StringBuilder();
        builder.append("select s.*,to_char(sysdate,'HH24') time, sysdate  from syscode s where  ");
        builder.append(" type_id=? ");
        return builder.toString();
    }

    public List<io.github.h8000572003.domain.SampleDTO> query() {
        final List<Object> list = new ArrayList();
        list.add("//TODO");
        return jdbcOperations.query(getSql(), list.toArray(), SampleMapper::to);
    }

    public enum SampleDTOColumn {
        TYPE_ID,
        CODE_ID,
        CODE_DATA1,
        CODE_DATA2,
        CODE_DATA3,
        CODE_DATA4,
        TIME,
        SYSDATE;
    }
}