欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
使用WebsharpDAO實(shí)現O/R Mapping和持久層
1.         WebsharpDAO能夠做什么
WebsharpDAO封裝了對象同數據庫之間的交互,可以方便的執行一些常用的數據庫和對象交互的任務(wù)。
WebsharpDAO是一個(gè)非常簡(jiǎn)單的框架,他的目的不是設計一個(gè)如JDO、Hibernate一樣的完整的解決方案,而是設計一個(gè)可用的方案,能夠解決開(kāi)發(fā)過(guò)程中的一般問(wèn)題。他比JDO和Hibernate簡(jiǎn)單很多,使用也方便很多。在接口設計上,也參考了JDO的標準,或者,可以把他看成一個(gè)JDO的一個(gè)Mini版本。
可以從以下網(wǎng)址下載全部源代碼和示例工程:
http://www.uml.org.cn/opensource/websharp/
2.         主要接口
PersistenceManager接口,操縱對象同數據庫進(jìn)行交互的主要接口:
public interface PersistenceManager
{
void close() throws SQLException;
boolean isClosed() throws SQLException;
Transaction currentTransaction();
void persistNewObject(PersistenceCapable pc) throws SQLException;
void updateObject(PersistenceCapable pc) throws SQLException;
void deleteObject(PersistenceCapable pc) throws SQLException;
void reload(PersistenceCapable pc) throws SQLException;
PersistenceCapable findObjectByPrimaryKey(Object id, PersistenceCapable pc) throws SQLException;
Query newQuery();
Query newQuery(Class entityType);
Query newQuery(Class entityType, String filter);
Query newQuery(Class entityType,String filter,ArrayList paramColletion);
Connection getConnection();
}
Transaction接口,操縱事務(wù)處理:
public interface Transaction
{
void begin() throws SQLException;
void commit() throws SQLException;
void rollback() throws SQLException;
PersistenceManager getPersistenceManager();
}
Query接口,查詢(xún)對象:
public interface Query
{
Class getEntityType();
void setEntityType(Class entityType);
String getFilter();
void setFilter(String filter);
ArrayList getParameters();
void setParameters(ArrayList array);
void addParameter(Object param);
String getOrdering();
void setOrdering(String ordering);
public boolean IgnoreCache=true;
PersistenceCapable[] queryObject() throws SQLException;
PersistenceManager getPersistenceManager();
boolean isClosed();
void close ();
SqlOperator getSqlOperator();
void setSqlOperator(SqlOperator conn);
}
SqlOperator接口,封裝了一些常用的數據庫操縱功能:
public interface SqlOperator
{
ResultSet executeQuery(String sql) throws SQLException;
ResultSet executeQuery(String sql,ArrayList parameters) throws SQLException;
RowSet executeRowSet(String sql) throws SQLException;
RowSet executeRowSet(String sql,ArrayList parameters) throws SQLException;
int executeUpdate(String sql) throws SQLException;
int executeUpdate(String sql,ArrayList parameters) throws SQLException;
void close() throws SQLException;
boolean isClosed() throws SQLException;
Connection getConnection();
}
PersistenceCapable接口,所有的實(shí)體類(lèi)都必須實(shí)現這個(gè)接口:
public interface PersistenceCapable
{
public String[] getFields();   //字段列表
public String[] getKeyFields();  //關(guān)鍵字
public String getTableName();   //對應的表名
}
3.         實(shí)體類(lèi)的編寫(xiě)規范:
a)       為了方便實(shí)現,實(shí)體類(lèi)同數據庫表是一一對應的。
b)       所有的實(shí)體類(lèi)都必須實(shí)現PersistenceCapable接口。例如,Product類(lèi)可以表示如下:
public class Product implements PersistenceCapable
{
public Product()
{
super();
}
public String[] getFields()
{
return new
String[]{"ProductID" ,"Name" ,"UnitName" ,"Description" ,"Price" ,"CurrentCount" };
}
public String[] getKeyFields()
{
return new String[]{"PRODUCTID"};
}
public String getTableName()
{
return "Product";
}
private String productID = "";
public String getProductID()
{
return productID;
}
public void setProductID(String productID)
{
this.productID = productID;
}
private String name = "";
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
private String unitName = "";
public String getUnitName()
{
return unitName;
}
public void setUnitName(String unitName)
{
this.unitName = unitName;
}
private String description = "";
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description = description;
}
private double price = 0;
public double getPrice()
{
return price;
}
public void setPrice(double price)
{
this.price = price;
}
private double currentCount = 0;
public double getCurrentCount()
{
return currentCount;
}
public void setCurrentCount(double currentCount)
{
this.currentCount = currentCount;
}
}
c)        屬性必須同字段一一對應。例如,有一個(gè)ProductName字段,則必須有相應的get和set方法,注意get和set方法的大小寫(xiě)和getFields()方法中的大小寫(xiě)一致。
4.         使用PersistenceManager存取對象
使用PersistenceManager存取對象的過(guò)程是:
1)  實(shí)例化一個(gè)PersistenceManager對象。要實(shí)例化一個(gè)PersistenceManager對象,請通過(guò)PersistenceManagerFactory的createPersistenceManager方法。下面是一個(gè)例子:
PersistenceManager pm = null;
try
{
pm = PersistenceManagerFactory.instance().createPersistenceManager();
……;
}
2)  實(shí)例化一個(gè)實(shí)體對象:
Product  p = new Product();
p.ProductID = …….
3)  調用PersistenceManager相應的方法:
pm.persistNewObject(p);
或者:
pm.updateObject(dept);
或者
pm.deleteObject(dept);
4)  關(guān)閉PersistenceManager
pm.close();
下面是一個(gè)完整的例子:
ProductForm productForm = (ProductForm)form;
Product p = new Product();
p.setProductID(productForm.getProductID());
p.setName(productForm.getName());
p.setUnitName(productForm.getUnitName());
p.setPrice(productForm.getPrice().doubleValue());
p.setCurrentCount(productForm.getCurrentCount().doubleValue());
p.setDescription(productForm.getDescription());
try
{
PersistenceManager pm =
PersistenceManagerFactory.instance().createPersistenceManager();
pm.persistNewObject(p);
pm.close();
}
catch (Exception e)
{
errors.add("name", new ActionError("id"));
}
5.         使用事務(wù)處理
事務(wù)處理通過(guò)Transaction接口來(lái)進(jìn)行。
try
{
PersistenceManager pm =
PersistenceManagerFactory.instance().createPersistenceManager();
Transaction trans = pm.currentTransaction();
trans.begin();
pm.persistNewObject(p);
trans.commit();
}
catch (Exception e)
{
trans.rollback();
}
finally
{
pm.close();
}
6.         進(jìn)行對象的查詢(xún)
查詢(xún)對象可以通過(guò)兩種方式進(jìn)行:
1)  根據主關(guān)鍵字查詢(xún)單個(gè)對象
可以通過(guò)PersistenceManager的findObjectByPrimaryKey方法來(lái)進(jìn)行。下面是一個(gè)例子:
DEPT dept = new DEPT();
PersistenceManager pm = null;
try
{
pm = PersistenceManagerFactory.instance().createPersistenceManager();
pm.findObjectByPrimaryKey(new Integer(90), dept);
pm.close();
System.out.println(dept.getDEPTNO());
System.out.println(dept.getDNAME());
System.out.println(dept.getLOC());
}
catch (Exception e)
{
System.out.println(e.toString());
}
2)  根據條件查詢(xún)一組對象
可以通過(guò)Query接口來(lái)完成這個(gè)功能。下面是一個(gè)例子:
PersistenceManager pm = null;
try
{
pm = PersistenceManagerFactory.instance().createPersistenceManager();
Query q = pm.newQuery(DEPT.class);
q. setFilter(“DEPTNO > 10”);
PersistenceCapable[] depts = q.queryObject();
for(int i=0;i<depts.length;i++)
{
System.out.print(i);
System.out.print("\t");
System.out.print(((DEPT)depts[i]).getDEPTNO());
System.out.print("\t");
System.out.print(((DEPT)depts[i]).getDNAME());
System.out.print("\t");
System.out.println(((DEPT)depts[i]).getLOC());
}
}
catch (Exception e)
{
System.out.println(e.toString());
}
7.         數據庫連接的獲取
有些時(shí)候,我們也需要直接使用數據庫連接來(lái)進(jìn)行一些對數據庫的操作。在一個(gè)項目中,應該總是通過(guò)ConnectionFactory來(lái)獲取一個(gè)連接。
可以使用如下語(yǔ)句獲取一個(gè)默認的數據庫連接:
Connection conn = ConnectionFactory.getConnection()
也可以通過(guò)指明一個(gè)DataSource名稱(chēng)來(lái)獲取一個(gè)特定的連接:
Connection conn = ConnectionFactory.getConnection(dataSourceName)
獲取連接后,你可以象使用通常的數據庫連接一樣使用得到的連接。
Connection連接的一些參數,必須在A(yíng)pplicationResources.properties文件中設置。其格式是:
db_fromdatasource=false                     是否使用DataSource
db_datasourcename=                         DataSource的名稱(chēng)
db_url=jdbc:oracle:thin:@newtest            數據庫連接的URL
db_driver=oracle.jdbc.driver.OracleDriver   JDBC驅動(dòng)程序
db_user=user                                數據庫用戶(hù)名
db_password=pwd                             數據庫密碼
8.         SqlOperator的使用
也可以通過(guò)ConnectionFactory獲取一個(gè)SqlOperator。SqlOperator的定義見(jiàn)前面的內容。下面是兩種獲取的方法:
SqlOperator operator = ConnectionFactory. getSqlOperator()
SqlOperator operator = ConnectionFactory. getSqlOperator(dataSourceName)
下面通過(guò)SqlOperator執行一個(gè)查詢(xún),返回一個(gè)ResultSet。
String sql = “SELECT * FROM Product WHERE Price > ?” ;
ArrayList parameters = new ArrayList(1);
parameters.add(100);
SqlOperator operator = ConnectionFactory.getSqlOperator()
ResultSet rst = operator.executeQuery(sql, params);
……
operator.close();
也可以通過(guò)SqlOperator返回一個(gè)RowSet。返回RowSet的使用方法同ResultSet一樣。
RowSet同ResultSet一樣,也是一個(gè)數據集,只不過(guò)它是可以斷開(kāi)連接,并且可以前后滾動(dòng)的數據集。當在層之間傳輸數據集的時(shí)候,請盡量使用RowSet,這樣,我們就可以在業(yè)務(wù)邏輯層得到一個(gè)數據集,然后馬上斷開(kāi)數據庫連接,然后把數據集傳遞到界面層。
關(guān)于SqlOperator的其他方法,請參考前面的接口說(shuō)明。
9.         Tomcat數據庫連接池的配置
首先,在項目的web.xml文件中添加一個(gè)名為“Websharp/DataSourceName”的環(huán)境變量,指明使用的DataSource的名稱(chēng)。格式如下:
<web-app>
……
<env-entry>
<env-entry-name>org/websharp/dao/DataSourceName</env-entry-name>
<env-entry-value>jdbc/newtest</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
</web-app>
然后,在Tomcat的Server.xml文件中添加相應的連接池設置:
<Context docBase="daotest" path="/daotest" reloadable="true" source="com.ibm.etools.webtools.server:daotest">
<Resource auth="SERVLET" name="jdbc/newtest" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/newtest">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter><name>username</name><value>scott</value></parameter>
<parameter><name>password</name><value>tiger</value></parameter>
<parameter><name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter><name>url</name>
<value>jdbc:oracle:thin:@newtest </value>
</parameter>
<parameter><name>maxActive</name><value>20</value></parameter>
<parameter><name>maxIdle</name><value>10</value></parameter>
<parameter><name>maxWait</name><value>-1</value></parameter>
</ResourceParams>
</Context>
進(jìn)行如上配置后,就可以使用ConnectionFactory的getConnection方法正確的從連接池中獲取數據庫連接了。
作者Blog:http://blog.csdn.net/sunny_y_m/
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
項目經(jīng)驗分享——Java常用工具類(lèi)集合
簡(jiǎn)單的struts應用開(kāi)發(fā)(1)
Mybatis/Ibatis,數據庫操作的返回值
java項目超市管理系統
Spring:JdbcTemplate使用指南
tree
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久