1. 程式人生 > >通用財經數據傳輸與監控平臺1.0(泛型,接口與基類,Sql,Ibatis,Awt,Swing)

通用財經數據傳輸與監控平臺1.0(泛型,接口與基類,Sql,Ibatis,Awt,Swing)

自動 構造 sea 獲得 doc stat dup per hot

技術分享

技術分享

導言

本系統通過訪問url接口,實現財經數據的獲取以及實時的更新到用戶本地數據庫的功能,並且配備了實時的數據傳輸的監控平臺。通過本系統,用戶可以的得到並保存所需的財經數據(超過200張表),並能實時的查看數據傳輸是否正常以及傳輸中的過程。

目錄結構

一、相關技術總結

1、通用DAO、Service、Action的設計與實現:(VERY IMPORTMANT)

面向對象設計:接口、基類、繼承;泛型

(如通用類BaseObject、接口BaseDao與實現類BaseDaoImp的設計)

2、樹Tree結構的使用(樹監聽)、表格Table用於顯示時刻刷新的數據

樹目錄接口的建立、監聽;給單元格賦值、表格化數據的輸出格式控制、自動刷新

3、使用ibatis實現對象關系映射,並控制sql語句;動態sql的生成與使用

4、部署與安裝程序:打jar包註意事項、讀取相對路徑的XML

5、異常處理:catch與throws的使用經驗

當使用了catch處理後,在更高級層就不能進行處理了;而throws不對異常進行處理,向上拋,讓上級處理。

6、Json與Java對象的相互轉化:Json包日期轉化時的Bug的處理

二、功能描述

1、財經數據傳輸平臺

調用url,根據動態查詢條件--->獲得json數組---->將其解析為對象集合(List)--->根據業務邏輯的不同,將數據插入或更新到本地數據庫中,並記錄必須的運行數據到數據庫中--->如有數據,不斷重復以上,直到更新完所有數據。

2。數據傳輸平臺的監控平臺

a.界面:可以使用可視化的桌面程序開發工具,如JFormDesigner生成主要的靜態界面。

b.數據展示:通過監聽獲取用戶的點擊操作,執行相應的方法,查詢到所需的數據,動態的顯示在表格中並實時刷新。

三、系統架構

開發流程、系統框架、 代碼的目錄結構

開發流程:建立於服務器端相對應的數據庫及表,並設定主鍵

--->生成實體類(也可選用服務器端的實體類,即導入實體類所在的jar包)

--->利用實體關系映射框架ibatis實現數據訪問(撰寫大量的sql)

--->設計通用的Dao接口和DaoImp基類,實現Dao組件

--->根據業務邏輯,設計通用的Service接口和SerivceImp基類,並調用Dao組件,實現Service組件

--->設計通用的Action接口和ActionImp基類,並調用Service組件,實現Action組件

--->利用工具設計桌面程序的界面

--->在監控平臺中,調用Action組件並訪問數據庫,獲得數據傳輸過程中的相關信息。

(--->運行Action組件中的類,實現數據傳輸。在監控平臺中你將可以看到相應的數據。)

四、表、關系和基礎類

ibatis框架下的四個配置文件:

database.properties(數據庫連接所需參數)、

Object.xml(對象與表、屬性與字段的映射、SQL語句)、

sql-map-config.xml(數據庫連接、包含的映射文件)、

dao.xml(調用sql-map-config.xml訪問數據庫,並指定數據操作類與接口的的對應關系)

五、邏輯視圖

技術分享

六、重點難點與要點

要點:通過運用泛型,設計接口和基類,實現通用的Dao組件和Service組件。

七、收獲體會

八、核心示範代碼

核心提示:

8.1、設計通用接口BaseDao和baseDaoImp抽象基類,實現Dao組件;

8.2、設計通用接口BaseService和BaseServiceImp抽象基類,實現Service組件。

8.3 設計通用接口BaseAction和BaseActionImp抽象基類,實現Action組件。

//通用DAO層

8.1.1 BaseDao接口

作用:指定Dao組件所需的通用方法。
public interface BaseDao<T extends BaseObject, Q extends BaseQuery> {

8.1.2抽象類BaseDaoImp

實現接口中定義的方法;實現所有實體類所需的數據庫訪問方法,其他類只需要繼承本類,並實現BaseDao接口,便可以有相關功能。

8.1.3 接口HKComBInfoDao:

是實體類公司基本信息類ComBInfo對應的Dao接口,用於定義數據訪問操作所需要的方法。
public interface HKComBInfoDao extends BaseDao<HKComBInfo,HKComBInfoQuery>{}

8.1.4 類HKComBInfoDaoImp:

繼承了基礎抽象類,實現了與自身對應的特定接口。
//這樣類HKComBInfoDaoImp就具有了保存、更新與查找的更能,而無需寫實現代碼。

//通用SERVICE層

8.2.1 接口BaseService

作用:該接口使用了泛型,它指定了業務邏輯層需要的方法。

public interface BaseService<T extends BaseDao<B, Q>, B extends BaseObject, Q extends BaseQuery> {
public String findMaxGid(T bd, B obj, String tableName);
public void saveOrUpdateGidToTable(HKGidTname hKGidTname);
public void saveOrUpdate(B obj);
public List<?> getTableObjectNew(Q bq, String param);
public Integer getUpdatedNumber();
public Integer getSavedNumber();
public Integer getErroredNumber();
}

8.2.2 抽象類BaseServiceImp

它實現了業務層的基礎接口並使用了泛型,通過調用Dao組件,它實現了其他實際的業務類的所有的方法。其他業務類只需要繼承它,並實現相應接口,便可以用它的所有方法。

public abstract class BaseServiceImp<T extends BaseDao<B, Q>, B extends BaseObject, Q extends BaseQuery> implements BaseService<T, B, Q> {

}

8.2.3 接口HKComBInfoService

這是一個與實體HKComBInfo類對應的業務類,它繼承了業務層的基礎接口,並使用了泛型。

public interface HKComBInfoService
extends BaseService<HKComBInfoDao,HKComBInfo,HKComBInfoQuery>{
}

8.2.4 類HKComBInfoServiceImp

該類具有業務層所需的所有實際方法;這個類繼承了業務層的抽象類,實現了與自身對應的接口。

public class HKComBInfoServiceImp
extends BaseServiceImp<HKComBInfoDao,HKComBInfo,HKComBInfoQuery>
implements HKComBInfoService{

//通用ACTION層

8.3.1接口BaseAction

作用:該接口使用了泛型,它指定了ACTION層需要的方法名、參數列表以及返回值。

public interface BaseAction<S extends BaseService<T , B , Q>,T extends BaseDao<B, Q>,
B extends BaseObject, Q extends BaseQuery>{
public boolean startDataTranscation(S s,T t,B b,Q q) ;
}

8.3.2抽象類BaseActionImp

它實現了ACTION層的基礎接口並使用了泛型,通過調用Service組件,它實現了其他實際的Action類的所有的方法。其他Action類只需要繼承它,並實現相應接口,便可以用它的所有方法。

public abstract class BaseActionImp<S extends BaseService<T, B, Q>, T extends BaseDao<B, Q>,
B extends BaseObject,Q extends BaseQuery>
implements BaseAction<S, T, B, Q> { }

8.3.3接口HKBdCodeAction

public interface HKBdCodeAction extends BaseAction<
HKBdCodeService, HKBdCodeDao, HKBdCode, HKBdCodeQuery>{

}

8.3.3類HKBdCodeActionImp

這是一個與實體HKComBInfo類對應的ACTION類,它繼承了ACTION層的基礎接口,並使用了泛型。

public class HKBdCodeActionImp extends
BaseActionImp<HKBdCodeService, HKBdCodeDao, HKBdCode, HKBdCodeQuery>implements HKBdCodeAction2 {

public HKBdCodeAction2Imp(HKBdCodeService s, HKBdCodeDao t, HKBdCode b,
HKBdCodeQuery q) { super(s, t, b, q);}
public static void main(String[] args) {
new HKBdCodeAction2Imp(new HKBdCodeServiceImp() , new HKBdCodeDaoImp(), new HKBdCode(),

new HKBdCodeQuery());}
}

------------------------------------------------------------------------------------------

##################################以上為目錄,以下為實體內容###############################

------------------------------------------------------------------------------------------

一、相關技術總結

1.5 異常處理:

當使用了catch處理後,在更高級層就不能進行處理了;而throws不對異常進行處理,向上拋,讓上級處理。

如:

public void save(Object o){

try{ this.insert(o);

}catch(Exception e){e.printStackTrace();}}

public void saveAndUpdate(Object o){

try{save(o);}catch(Exception e){

update(o);

e.printStackTrace();}}

則saveAndUpdate方法將不能捕捉到save(Object o)的異常。因此應將save(Object )改為:

public void save(Object o) throws exception{

this.insert(o);}

5.2、樹Tree結構的使用(樹監聽)、表格Table用於顯示時刻刷新的數據

樹目錄接口的建立、監聽;給單元格賦值、表格化數據的輸出格式控制、自動刷新

四、表、關系和基礎類

ibatis框架下的四個配置文件:

database.properties(數據庫連接所需參數)、

Object.xml(對象與表、屬性與字段的映射、SQL語句)、

sql-map-config.xml(數據庫連接、包含的映射文件)、

dao.xml(調用sql-map-config.xml訪問數據庫,並指定數據操作類與接口的的對應關系)
a、database.properties

driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=HKStockNew
username=sa
password =shuguang

b、Object.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >

<sqlMap namespace="Message">
<typeAlias alias="message" type="com.jrj.genius.api.client.entity.Message" />
<typeAlias alias="messageQuery"
type="com.jrj.genius.api.client.entity.MessageQuery" />
<resultMap id="messageResult" class="message">
<result property="tableName" column="tablename" />
<result property="interfaceName" column="interfacename" />
<result property="date" column="date" />
<result property="insertedNumber" column="insertednumber" />
<result property="updatedNumber" column="updatednumber" />
<result property="errorNumber" column="errornumber" />
<result property="isNormal" column="isnormal" />
</resultMap>
<insert id="save" parameterClass="message">
INSERT INTO HK_MESSAGE
VALUES
(#tableName#,#interfaceName#,#date#,#insertedNumber#,
#updatedNumber#,#errorNumber#,#isNormal#)
</insert>
<select id="findByTableName" parameterClass="java.lang.String"
resultClass="message">
select *
from HK_MESSAGE
where
TABLENAME=#tableName#
order by date desc
</select>
<select id="countTotalNumber" parameterClass="java.lang.String"
resultClass="message">
select
sum(insertedNumber),sum(updatedNumber),sum(errorNumber)
from HK_MESSAGE
where TABLENAME=#tableName#
</select>
</sqlMap>


c、sql-map-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd" >
<sqlMapConfig>
<properties resource="database.properties" />
<settings cacheModelsEnabled="true" enhancementEnabled="false"
maxSessions="64" maxTransactions="8" maxRequests="128"
useStatementNamespaces="true" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property value="${driver}" name="JDBC.Driver" />
<property value="${url}" name="JDBC.ConnectionURL" />
<property value="${username}" name="JDBC.Username" />
<property value="${password}" name="JDBC.Password" />
</dataSource>
</transactionManager>
<sqlMap resource="HkBdCode.xml" />
<sqlMap resource="HKGidTname.xml" />
<sqlMap resource="HKMessage.xml" />
<sqlMap resource="HKIdxDMK.xml" />
<sqlMap resource="HKStkCode.xml" />
<sqlMap resource="HKStkDMK.xml" />
<sqlMap resource="HKComBInfo.xml" />
</sqlMapConfig>


d、dao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE daoConfig
PUBLIC "-//ibatis.apache.org//DTD DAO Configuration 2.0//EN"
"http://ibatis.apache.org/dtd/dao-2.dtd" >
<daoConfig>
<context>
<transactionManager type="SQLMAP">
<property name="SqlMapConfigResource" value="sql-map-config.xml" />
</transactionManager>
<dao interface="com.jrj.genius.api.client.dao.HKGidTnameDao"
implementation="com.jrj.genius.api.client.dao.HKGidTnameDaoImp" />
<dao interface="com.jrj.genius.api.client.dao.HKMessageDao"
implementation="com.jrj.genius.api.client.dao.HKMessageDaoImp" />
</context>
</daoConfig>

五、邏輯視圖

技術分享

六、重點難點與要點

要點:通過運用泛型,設計接口和基類,實現通用的Dao組件和Service組件。

七、收獲體會

八、核心示範代碼

核心提示:

8.1、計通用接口BaseDao和baseDaoImp抽象基類,實現Dao組件;

8.2、設計通用接口BaseService和BaseServiceImp抽象基類,實現Service組件。

//DAO層

//8.1.1 BaseDao接口的作用:

指定Dao組件所需的通用方法。
public interface BaseDao<T extends BaseObject, Q extends BaseQuery> {
//BaseDao<T extends BaseObject, Q extendss BaseQuery>
//保存數據

public void save(T t);

//更新數據
public void update(T t);
// 查找最大gid
public String findMaxGID();
//保存批處理中最大的gid

//public void saveMaxGID(HKGidTname hKGidTname);
//更新批處理中最大的gid

//public void updateMaxGID(HKGidTname hKGidTname);

}

//8.1.2 抽象類BaseDaoImp的作用:

實現接口中定義的方法;實現所有實體類所需的數據庫訪問方法,其他類只需要繼承本類,並實現BaseDao接口,便可以有相關功能。

public abstract class BaseDaoImp<T extends BaseObject, Q extends BaseQuery>
implements BaseDao<T, Q> {
private static final long SQL_EXEC_TIME = 1000;
protected SqlMapClient sqlMapClient;
private Logger log = Logger.getLogger(this.getClass());
private String nameSpace;

public BaseDaoImp(String nameSpace) {
this.nameSpace = nameSpace;
sqlMapClient = SqlMapClientFactory.getSqlMapClient();
}

public void save(T t) {
sqlMapClient.insert(nameSpace + ".save", t);
}

public void update(T t) {
try {
long startTime = System.currentTimeMillis();
sqlMapClient.update(nameSpace + ".update", t);
long endTime = System.currentTimeMillis();
if (endTime - startTime > SQL_EXEC_TIME) {
log.error("Bad Sql " + nameSpace + ".update" + ","
+ "Sql Execute used " + (endTime - startTime) + " ms");
if (t != null) {
log.error("Sql Query is " + t.toString());
} else {
log.error("Sql Query is Null");
}
}
} catch (SQLException e) {
log.error(e);
}
}

public String findMaxGID() {
try {
String res = (String) sqlMapClient.queryForObject(nameSpace
+ ".findMaxGID", null);
if (res == null)
return " ";
else return res;
}

}

//8.1.3 口HKComBInfoDao:

實體類公司基本信息類ComBInfo對應的Dao接口,用於定義數據訪問操作所需要的方法。
public interface HKComBInfoDao extends BaseDao<HKComBInfo,HKComBInfoQuery>{
}

//8.1.4 類HKComBInfoDaoImp:

繼承了基礎抽象類,實現了與自身對應的特定接口。
//這樣類HKComBInfoDaoImp就具有了保存、更新與查找的更能,而無需寫實現代碼。

public class HKComBInfoDaoImp extends BaseDaoImp<HKComBInfo,HKComBInfoQuery> implements HKComBInfoDao {
public HKComBInfoDaoImp(String nameSpace) {
super(nameSpace);
}
public HKComBInfoDaoImp( ) {
super("HKComBInfo");
}
}


//SERVICE層

8.2.1 接口BaseService

作用:該接口使用了泛型,它指定了業務邏輯層需要的方法。

public interface BaseService<T extends BaseDao<B, Q>, B extends BaseObject, Q extends BaseQuery> {
public String findMaxGid(T bd, B obj, String tableName);
public void saveOrUpdateGidToTable(HKGidTname hKGidTname);
public void saveOrUpdate(B obj);
public List<?> getTableObjectNew(Q bq, String param);
public Integer getUpdatedNumber();
public Integer getSavedNumber();
public Integer getErroredNumber();
}

8.2.2 抽象類BaseServiceImp

它實現了業務層的基礎接口並使用了泛型,通過調用Dao組件,它實現了其他實際的業務類的所有的方法。其他業務類只需要繼承它,並實現相應接口,便可以用它的所有方法。

作用:根據實際的業務需要,通過調用Dao組件,實現Service組件的功能。

public abstract class BaseServiceImp<T extends BaseDao<B, Q>, B extends BaseObject, Q extends BaseQuery> implements BaseService<T, B, Q> {
private int runTimes = 1;
private Logger log = Logger.getLogger(this.getClass());
private T t;
private HKGidTnameDao tGeniusDao;
private Integer updatedNumber = 0;
private Integer savedNumber = 0;
private Integer erroredNumber = 0;
private String max_genius_uid = " ";
// 1 find max gid.
@SuppressWarnings("unchecked")
public String findMaxGid(T bd, B obj, String tableName) {
t = (T) ProviderManager.getDao("genius", obj.getClass().getSimpleName()
+ "Dao");
// T tGeniusDao = (T) ProviderManager.getDao("genius",
// "HKGidTnameDaoImp");
DaoManager daoManager = null;
Reader reader = null;
try {
reader = new FileReader(
"E:\\work\\workSpace\\datamart-demo2\\src\\main\\resources/dao.xml");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
daoManager = DaoManagerBuilder.buildDaoManager(reader);
// System.out.println("reader: "+reader +"daoManager: "+daoManager);
tGeniusDao = (HKGidTnameDao) daoManager.getDao(HKGidTnameDao.class);

max_genius_uid = tGeniusDao.findMaxGID(tableName);
runTimes++;
return max_genius_uid;
}

// 2 set query parameter, before search.
// public void SetQueryGid(BaseQuery query) {
// query.setGenius_uid(max_genius_uid);
// }

// get object list from json array.
public List<?> getTableObjectNew(Q bq, String param) {
return GetTableObjectUtil.getTableObject(bq, param);
}

// 4 save or update object into database.
public void saveOrUpdate(B obj) {
try {
t.save(obj);
savedNumber++;
log.info("records saved: " + savedNumber);
} catch (Exception e1) {
try {
t.update(obj);
updatedNumber++;
log.info("recrods updated: " + updatedNumber);
} catch (Exception e2) {
erroredNumber++;
log.error("save or update error. +Entity info: " + obj);
e2.printStackTrace();
}
}

}

// 5 save or update max_Gid to the table(HK_GIDTNAME).
public void saveOrUpdateGidToTable(HKGidTname hKGidTname) {
try {
tGeniusDao.saveMaxGID(hKGidTname);
} catch (Exception exc) {
tGeniusDao.update(hKGidTname);
// exc.printStackTrace();
}

}

8.2.3 接口HKComBInfoService

這是一個與實體HKComBInfo類對應的業務類,它繼承了業務層的基礎接口,並使用了泛型。

public interface HKComBInfoService
extends BaseService<HKComBInfoDao,HKComBInfo,HKComBInfoQuery>{
}

8.2.4 類HKComBInfoServiceImp

該類具有業務層所需的所有實際方法;這個類繼承了業務層的抽象類,實現了與自身對應的接口。

public class HKComBInfoServiceImp
extends BaseServiceImp<HKComBInfoDao,HKComBInfo,HKComBInfoQuery>
implements HKComBInfoService{
}

//通用ACTION層

8.3.1接口BaseAction

作用:該接口使用了泛型,它指定了ACTION層需要的方法名、參數列表以及返回值。

public interface BaseAction<S extends BaseService<T , B , Q>,T extends BaseDao<B, Q>,
B extends BaseObject, Q extends BaseQuery>{
public boolean startDataTranscation(S s,T t,B b,Q q) ;
}

8.3.2抽象類BaseActionImp

它實現了ACTION層的基礎接口並使用了泛型,通過調用Service組件,它實現了其他實際的Action類的所有的方法。其他Action類只需要繼承它,並實現相應接口,便可以用它的所有方法。

//抽象類,定義了業務流程。
//當具體的類繼承該抽象類後,便能完成對特定API的數據調用以及更新數據到用戶數據庫。
public abstract class BaseActionImp<S extends BaseService<T, B, Q>,
T extends BaseDao<B, Q>,
B extends BaseObject,
Q extends BaseQuery>
implements BaseAction<S, T, B, Q> {
private static int EACH_TIME_RECORDS = 100;
int runTime = 0;
String max_genius_uid = " ";
String tb = null;
Map<String, String> LinkTableNamemap = new HashMap<String, String>();
boolean flag = true;

//構造方法,有數據的話,循環查詢,得到去完所有數據
public BaseActionImp(S s, T t, B b, Q q) {
boolean myflag = true;
long start = new Date().getTime();
for (;;) {
myflag = startDataTranscation(s, t, b, q);
if (myflag == false) {
long end = new Date().getTime();
System.out.println("time spent: " + (end - start));
return;
}
}
}

//根據業務邏輯和流程循環查詢數據,更新到用戶數據庫。
@SuppressWarnings("unchecked")
public boolean startDataTranscation(S s, T t, B b, Q q) {
// 在這裏先調用配置文件得到路徑(link)和表名(tb)
LinkTableNamemap = gainLinkAndTableName(b);
tb = LinkTableNamemap.get("link.hk." + b.getClass().getSimpleName());
// 1 find max gid.
// if max_genius_uid==" ",stand for no data transaction records.
// don‘t set max_genius_uid in query.
// otherwise,set this max_genius_uid in query.

// 2 set gid & size in query.
// 如果最大gid不為空,說明程序不是第一次運行,設置以該gid為起始查詢時間。
max_genius_uid = s.findMaxGid(t, b, tb);// 1
if (!" ".equals(max_genius_uid)) {
q.setGenius_uid(max_genius_uid);// 2
// 如果是第一次運行
} else {
// q.setOrder(desc);//還未實現
// q.setSortfield(genius_uid);
}
q.setRecordsize(EACH_TIME_RECORDS);
// 3 get list of object
List<B> al = (List<B>) GetTableObjectUtil.getTableObject(q,
LinkTableNamemap.get("link.hk."+ b.getClass().getSimpleName()));
if (al == null || al.size() == 0) {
return false;
}
System.out.println("接口 " + b.getClass().getName() + ",查詢到的記錄數: "
+ al.size() + "這批數據的第一條: " + al.get(0) + "===getSeq"
+ al.get(0).getSeq());
// get max_genius_uid of this list,so later can save it to table of
if (al.size() >= 1) {
max_genius_uid = al.get(0).getGenius_uid();
}
// 4 save or update objects into database,
// and get insert update error number.
for (int i = 0; i < al.size(); i++) {
try {
s.saveOrUpdate((B) al.get(i));
} catch (Exception ee) {

}
}
// 5 write inserted updated errorNumber into table of HK_MESSAGE.
Message message = new Message();
message.setDate(new Date().getTime());
message.setInterfaceName(b.getClass().getSimpleName());
if (s.getErroredNumber() > 0) {
message.setIsNormal("n");
} else {
message.setIsNormal("y");
}
HKMessageDao daomsg = new HKMessageDaoImp();
if ((message.getErrorNumber() + message.getInsertedNumber() + message
.getUpdatedNumber()) > 1) {
message.setTableName(tb);
message.setUpdatedNumber(s.getUpdatedNumber());
daomsg.save(message);
}

// 6 save or update max gid into table HK_GIDTNAME.
if (!" ".equals(max_genius_uid)) {
HKGidTname hKGidTname = new HKGidTname();
hKGidTname.setGenius_uid(max_genius_uid);
if (al.size() < 100) {
// 0 stand for no records.
hKGidTname.setHasmore(0);
} else {
hKGidTname.setHasmore(1);
}
hKGidTname.setTable_name(tb);
s.saveOrUpdateGidToTable(hKGidTname);
}
System.out.println("-----------------------------" + runTime);
runTime++;
return flag;
}

//調用配置文件,通過實體名取得URL以及對應得表名
public Map<String, String> gainLinkAndTableName(B b) {
String link, tb;
Map<String, String> map = new HashMap<String, String>();
// ---------------------------
Properties p = new Properties();
InputStream inputFile;
File file = new File("src\\main\\resources", "link.properties");
try {
inputFile = new FileInputStream(file.getAbsoluteFile());
try {
p.load(inputFile);
inputFile.close();
System.out.println("b.getClass().getName(): "
+ b.getClass().getSimpleName());
link = p.getProperty("link.hk." + b.getClass().getSimpleName());
map.put("link.hk." + b.getClass().getSimpleName(), link);
tb = p.getProperty("tb.hk." + b.getClass().getSimpleName());
map.put("tb.hk." + b.getClass().getSimpleName(), tb);
System.out.println("link: "
+ map.get("link.hk." + b.getClass().getSimpleName())
+ " ;table name: "
+ map.get("link.hk." + b.getClass().getSimpleName()));
return map;

} catch (IOException e) {
e.printStackTrace();
}

} catch (FileNotFoundException e) {
e.printStackTrace();
}
return map;
}

}

8.3.3接口HKBdCodeAction

public interface HKBdCodeAction extends BaseAction<
HKBdCodeService, HKBdCodeDao, HKBdCode, HKBdCodeQuery>{

}

8.3.3類HKBdCodeActionImp

這是一個與實體HKComBInfo類對應的ACTION類,它繼承了ACTION層的基礎接口,並使用了泛型。

public class HKBdCodeActionImp extends
BaseActionImp<HKBdCodeService, HKBdCodeDao, HKBdCode, HKBdCodeQuery>implements HKBdCodeAction2 {

public HKBdCodeAction2Imp(HKBdCodeService s, HKBdCodeDao t, HKBdCode b,
HKBdCodeQuery q) { super(s, t, b, q);}
public static void main(String[] args) {
new HKBdCodeAction2Imp(new HKBdCodeServiceImp() , new HKBdCodeDaoImp(), new HKBdCode(),

new HKBdCodeQuery());}
}

通用財經數據傳輸與監控平臺1.0(泛型,接口與基類,Sql,Ibatis,Awt,Swing)