手寫SORM(simple object relation mapping)架構2—介面設計

來源:互聯網
上載者:User

標籤:app   sql語句   tor   封裝資料   row   edm   ams   logs   key   

首先在工程下建立3個包,分別是:core,utils,bean

core:

  Query介面

package com.yf.sorm.core;import java.util.List;/** * 負責查詢(對外提供服務的核心類) * @author yangf * */public interface Query {        /**     * 直接執行一個DML語句     * @param sql sql語句     * @param params 參數     * @return 執行SQL語句後影響記錄的行數     */    public int executeDML(String sql, Object[] params);            /**     * 將一個Object Storage Service到資料庫中     * @param obj 要儲存的對象     */    public void insert(Object obj);        /**     * * 刪除clazz表示類對應的表中的記錄(指定主索引值id的記錄)     * @param clazz 跟表對應的類的class對象     * @param id 主鍵的值     */    public void delete(Class<?> clazz, int id);        /**     * 輸出對象在資料庫中對應的記錄(對象所在的類對應表,對象的主索引值對應記錄)     * @param obj 對象     */    public void delete(Object obj);        /**     * 更新對象對應的記錄,並且只更新指定的欄位的值     * @param obj 所要更新的對象     * @param field 更新的屬性列表     * @return 執行sql語句後影響記錄的行數     */    public int update(Object obj, String[] field);        /**     * 查詢返回多行記錄,並將每行記錄封裝到clazz指定的類的對象中     * @param SQL 查詢語句     * @param clazz 封裝資料的javabean類的class對象     * @param params sql的參數     * @return 查詢到的結果     */    public <T> List<T> queryRows(String sql, Class<?> clazz, Object[] params);        /**     * 查詢返回一行記錄,並將該記錄封裝到clazz指定的類的對象中     * @param SQL 查詢語句     * @param clazz 封裝資料的javabean類的class對象     * @param params sql的參數     * @return 查詢到的結果     */    public <T> T queryUniqueRow(String sql, Class<?> clazz, Object[] params);        /**     * 查詢返回一個值(一行一列),並將該值返回     * @param SQL 查詢語句     * @param params sql參數     * @return 查詢到的結果     */    public <T> T queryValue(String sql, Object[] params);        /**     * 查詢返回一個數字(一行一列),並將該值返回     * @param SQL 查詢語句     * @param params sql的參數     * @return 查詢到的數字     */    public Number queryNumber(String sql, Object[] params);}

  TypeConvertor介面

package com.yf.sorm.core;/** * 負責java資料類型和資料庫資料類型的相互轉換 * @author yangf * */public interface TypeConvertor {        /**     * 將資料庫資料類型轉化為java的資料類型     * @param columnType 資料庫欄位的資料類型     * @return java的資料類型     */    public String databaseTypeToJavaType(String columnType);        /**     * 將java資料類型轉化為資料庫資料類型     * @param javaDataType java資料類型     * @return 資料庫資料類型     */    public String javaTypeTodatabaseType(String javaDataType);}


bean:

  ColumnInfo類

  

package com.yf.sorm.bean;/** * 封裝表中一個欄位的資訊 * @author yangf * */public class ColumnInfo {        /**     * 欄位名稱     */    private String name;        /**     * 欄位的資料類型     */    private String dataType;        /**     * 欄位的鍵類型(0:普通鍵,1:主鍵,2:外鍵)     */    private int keyType;        /**     * 空構造器     */    public ColumnInfo() {    }        /**     * 構造器     * @param name 欄位名稱     * @param dataType 欄位的資料類型     * @param keyType 欄位的鍵類型     */    public ColumnInfo(String name, String dataType, int keyType) {        super();        this.name = name;        this.dataType = dataType;        this.keyType = keyType;    }        /**     * 返回欄位名稱     * @return 欄位名稱     */    public String getName() {        return name;    }        /**     * 設定欄位名稱     * @param name 欄位名稱     */    public void setName(String name) {        this.name = name;    }        /**     * 返回欄位的資料類型     * @return 欄位的資料類型     */    public String getDataType() {        return dataType;    }        /**     * 設定欄位的資料類型     * @param dataType 欄位的資料類型     */    public void setDataType(String dataType) {        this.dataType = dataType;    }        /**     * 返回欄位的鍵類型     * @return 欄位的鍵類型     */    public int getKeyType() {        return keyType;    }    /**     * 設定欄位的鍵類型     * @param keyType 欄位的鍵類型     */    public void setKeyType(int keyType) {        this.keyType = keyType;    }}

  TableInfo:

package com.yf.sorm.bean;import java.util.Map;/** * 儲存表結構的資訊 * @author yangf * */public class TableInfo {        /**     * 表名     */    private String Tname;        /**     * 所有欄位的資訊 key:欄位名稱     */    private Map<String, ColumnInfo> colums;        /**     * 唯一主鍵,本架構只支援表中有且只有一個主鍵的情況     */    private ColumnInfo onlyPriKey;        /**     * 空構造器     */    public TableInfo() {    }    /**     * 構造器     * @param tname 表名     * @param colums 所有欄位的資訊     * @param onlyPriKey 唯一主鍵     */    public TableInfo(String tname, Map<String, ColumnInfo> colums, ColumnInfo onlyPriKey) {        super();        Tname = tname;        this.colums = colums;        this.onlyPriKey = onlyPriKey;    }    /**     * 返回表名     * @return 表名     */    public String getTname() {        return Tname;    }    /**     * 設定表名     * @param tname 表名     */    public void setTname(String tname) {        Tname = tname;    }    /**     * 返回所有欄位的資訊     * @return 所有欄位的資訊     */    public Map<String, ColumnInfo> getColums() {        return colums;    }    /**     * 設定所有欄位的資訊     * @param colums 所有欄位的資訊     */    public void setColums(Map<String, ColumnInfo> colums) {        this.colums = colums;    }    /**     * 返回唯一主鍵     * @return 唯一主鍵     */    public ColumnInfo getOnlyPriKey() {        return onlyPriKey;    }    /**     * 設定唯一主鍵     * @param onlyPriKey 唯一主鍵     */    public void setOnlyPriKey(ColumnInfo onlyPriKey) {        this.onlyPriKey = onlyPriKey;    }}

 

手寫SORM(simple object relation mapping)架構2—介面設計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.