標籤: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—介面設計