java userdao,Java Web 开发基础------DAO
DAO (Data Access Objects)數(shù)據(jù)訪問對象是第一個面向?qū)ο蟮慕涌?#xff0c;它顯露了 Microsoft Jet數(shù)據(jù)庫引擎(由 Microsoft Access 所使用),并允許 Visual Basic 開發(fā)者通過 ODBC 象直接連接到其他數(shù)據(jù)庫一樣,直接連接到 Access 表。DAO 最適用于單系統(tǒng)應(yīng)用程序或小范圍本地分布使用。
1.訪問接口:
DAO(Data Access Object)是一個數(shù)據(jù)訪問接口,數(shù)據(jù)訪問:顧名思義就是與數(shù)據(jù)庫打交道。夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間。
在核心J2EE模式中是這樣介紹DAO模式的:為了建立一個健壯的J2EE應(yīng)用,應(yīng)該將所有對數(shù)據(jù)源的訪問操作抽象封裝在一個公共API中。用程序設(shè)計的語言來說,就是建立一個接口,接口中定義了此應(yīng)用程序中將會用到的所有事務(wù)方法。在這個應(yīng)用程序中,當(dāng)需要和數(shù)據(jù)源進(jìn)行交互的時候則使用這個接口,并且編寫一個單獨(dú)的類來實現(xiàn)這個接口在邏輯上對應(yīng)這個特定的數(shù)據(jù)存儲。
2.訪問對象:
DAO(數(shù)據(jù)訪問對象)是一種應(yīng)用程序編程接口(API),存在于微軟的Visual Basic中,它允許程序員請求對微軟的Access數(shù)據(jù)庫的訪問。DAO是微軟的第一個面向?qū)ο蟮臄?shù)據(jù)庫接口。DAO對象封閉了Access的Jet函數(shù)。通過Jet函數(shù),它還可以訪問其他的結(jié)構(gòu)化查詢語言(SQL)數(shù)據(jù)庫。
J2EE開發(fā)人員使用數(shù)據(jù)訪問對象(DAO)設(shè)計模式把底層的數(shù)據(jù)訪問邏輯和高層的商務(wù)邏輯分開.實現(xiàn)DAO模式能夠更加專注于編寫數(shù)據(jù)訪問代碼.
3.數(shù)據(jù)訪問對象DAO的功能:
1. DAO:用來封裝Data Source
就比如,Connection conn = DAOFactory.createConnection()..
就可以把Driver. URL. username,passpword這一些放在DAO中
以后要更改數(shù)據(jù)庫的類型.比如要把MSSQL換成Oracle的話..只需要更改DAOFactory里面的getConnection()里面的Driver.URL.之類的..
2. DAO:封裝對數(shù)據(jù)庫的操作(比如最基本的CRUD操作)
比如說你要你要插入一個新的用戶..那么.在DAO中我們只需要提供一個insertUser(User user)這一個方法就可以了..具體的操作是在DAO中實現(xiàn)的...
那么對于要調(diào)用DAO的時候.我們只要知道insertUser(User)是用來插入一個新的用戶...而不需要知道是如何實現(xiàn)的..
一般 DAO是與Abstract Factory模式一起來用的...
Factory來建立數(shù)據(jù)庫和定位具體的DAO(比如說是UserDao..CustomerDao..)..一般將getConnection設(shè)置為static..也可以把HibernateSessionFactory這一個公共類放在這一AbstractFactory類中去...
public class DAOFactory {
private static final SessionFactory sessionFactory;
// 定義一個ThreadLocal .
static Session currentSession().....
public UserDao getUserDAO() { return new UserDaoImpl(sesssion);}
pulbic OtherDao getOtherDAO() { return new OtherDaoImpl(session);}
......
}
public interface UserDao {
public insertUser(FormBean)
public updateUser(FormBean);
}
然后就實現(xiàn)DAO的接口: (Struts的FormBean...VO來的..)
public ?class ?UserDaoImpl implements UserDao {
privateSession session;
public UserDaoImpl(Session session){
this.session = session;
}...
public insertUser(FormBean) {
..//..
session.save(UserPO);
..//..
return FormBean;
}
public FormBean updateUser(FormBean) {
..//..
session.update(UserPO);
..//..
return FormBean;
}
}
最后定義你的PO:
public?class?UserPO {
String firstname,lastname,password..........
}
4.?應(yīng)用DAO編程:
4.1 打開數(shù)據(jù)庫
CDaoWorkspace對象代表一個DAO Workspace對象,在MFC DAO體系結(jié)構(gòu)中處于最高處,定義了一個用戶的同數(shù)據(jù)庫的會話,并包含打開的數(shù)據(jù)庫,負(fù)責(zé)完成數(shù)據(jù)庫的事務(wù)處理。我們可以使用隱含的workspace對象。
CDaoDatabase對象代表了一個到數(shù)據(jù)庫的連接,在MFC中,是通過CDaoDatabase封裝的。
在構(gòu)造CDaoDatabase對象時,有如下兩種方法:
創(chuàng)建一個CDaoDatabase對象,并向其傳遞一個指向一個已經(jīng)找開的CdaoWorkspace對象的指針。
創(chuàng)建一個CDaoDatabase對象,而不明確地指定使用的workspace,此時,MFC將創(chuàng)建一個新的臨時的CDaoWorkspace對象。
如下代碼所示:
CDaoDatabasedb;
db.Open(“test.mdb”,FALSE,FALSE,_T(“”);
其中參數(shù)一包括要打開的文件的全路徑名。
4.2 查詢記錄
一個DAO recordset對象,代表一個數(shù)據(jù)記錄的集合,該集合是一個庫表或者是一個查詢的運(yùn)行結(jié)果中的全部記錄。CDaoRecorset對象有三種類型:表、動態(tài)集、快照。
通常情況下,我們在應(yīng)用程序中可以使用CDaoRecordset的導(dǎo)出類,這一般是通過ClassWizard或AppWizard來生成的。但我們也可以直接使用CDaoRecordset類生成的對象。此時,我們可以動態(tài)地綁定recordset對象的數(shù)據(jù)成員。
如下代碼所示:
COleVariant var;
long id;
CString str;
CDaoRecordset m_Set(&db);
m_Set.Open(“查詢的SQL語句”);
while(!m_Set.IsEOF())
{
/*
處理
m_Set.GetFieldValue(“ID”,var);
id=V_I4(var);
m_Set.GetFieldValue(“Name”,var);
str=var.pbVal;
*/
m_Set.MoveNext();
}
m_Set.Close();
4.3 添加記錄
添加記錄用AddNew函數(shù),此時用SetFieldValue來進(jìn)行賦值。
如下代碼所示:
m_pDaoRecordset->AddNew ();
sprintf(strValue,"%s",>m_UserName );
m_pDaoRecordset->SetFieldValue ("UserName",strValue);
sprintf(strValue,"%d",m_PointId );
m_pDaoRecordset->SetFieldValue ("PointId",strValue);
dataSrc.SetDateTime (m_UpdateTime .GetYear ),m_UpdateTime .GetMonth ),m_UpdateTime .GetDay (),
m_UpdateTime .GetHour (),m_UpdateTime .GetMinute (),m_UpdateTime .GetSecond ());
valValue=dataSrc;
m_pDaoRecordset->SetFieldValue ("UpdateTime",valValue);
sprintf(strValue,"%f",m_pRecordset->m_OldValue );
m_pDaoRecordset->SetFieldValue ("OldValue",strValue);
sprintf(strValue,"%f",m_pRecordset->m_NewValue );
m_pDaoRecordset->SetFieldValue ("NewValue",strValue);
m_pDaoRecordset->Update ();
此時,要注意,日期時間型數(shù)據(jù)要用SetDataTime函數(shù)來賦值,這里面要用到COleVariant類型數(shù)據(jù),具體用法可以參考有關(guān)幫助。
4.4 修改記錄
修改記錄用Edit()函數(shù),把記錄定位到要修改的位置,調(diào)用Edit函數(shù),修改完成后,調(diào)用Update函數(shù)。
如下代碼所示:
m_Set.Edit();
m_Set.SetFieldValue(“列名”,”字符串”);
m_Set.Update();
4.5 刪除記錄
刪除記錄用Delete()函數(shù),使用后不需調(diào)用Update()函數(shù)。
4.6 統(tǒng)計記錄
可以使用如下代碼來統(tǒng)計記錄數(shù):
COleVariant varValue;
CDaoRecordset m_Set(&db);
m_Set.Open(dbOpenDynaset,”SQL語句”);
varValue=m_Set.GetFieldValue(0);
m_lMaxCount=V_I4(&varValue);
m_Set.Close();
如果是統(tǒng)計一張表中總記錄,可以使用CDaoTableDef對象,如下代碼所示:
CDaoTableDefm_Set(&gUseDB);
Count=m_Set.GetRecordCount();
m_Set.Close();
不能用CDaoRecordset對象的GetRecordCount()來取得記錄數(shù)。
總結(jié):
使用DAO技術(shù)可以便我們方便的訪問Microsoft Jet引擎數(shù)據(jù)庫,由于Microsoft Jet不支持多線程,因此,必須限制調(diào)用到應(yīng)用程序主線程的所有DAO。(來源CNET Networks )
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java userdao,Java Web 开发基础------DAO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每日签到html特效,前端这种连续签到的
- 下一篇: shiro 方法级别细粒度权限控制_Sh