?

?

1.查詢
(1)聯(lián)合查詢:使用一個(gè)sql查詢
(2)子查詢:對(duì)于每個(gè)表使用一個(gè)sql查詢
基本的原則是,如果您需要訪問(wèn)相關(guān)的對(duì)象,則使用聯(lián)合查詢。否則,使用延遲加載和字節(jié)碼增強(qiáng)選項(xiàng)的子查詢。

?


2.配置文件分析
?<resultMap id="UserResult" class="User">
??<result property="id" column="id"/>
??<result property="name" column="name"/>
??<result property="sex" column="sex"/>
??<result property="addresses" column="id" select="selectAddressByUserId"/>
?</resultMap>
?
使用的preparedstatement來(lái)處理sql,得到記錄,如何設(shè)置對(duì)象
?a. user.setId(id)? -->id:? column
?b. 如果有select屬性,則column 作為查詢條件插入
?
?


?
?
3.集合
讓SQL Map架構(gòu)裝入復(fù)雜類型集合(List)的業(yè)務(wù)對(duì)象的屬性必須是java.util.List或java.util.Collection類型。?
為什么set,hashset報(bào)錯(cuò)???

?

4.
重要提示!目前SQL Map架構(gòu)無(wú)法自動(dòng)解決resultMap之間的雙向關(guān)系。這在處理“父/子” 雙向關(guān)系的resultMap時(shí)尤其要注意。
一個(gè)簡(jiǎn)單的辦法是,為其中一種情況再定義一個(gè)不裝入父對(duì)象的resultMap(反之亦然)。

?

?



代碼例子
例子1:執(zhí)行update(insert,update,delete)
sqlMap.startTransaction();
Product product = new Product();
product.setId (1);
product.setDescription (“Shih Tzu”);
int rows = sqlMap.insert (“insertProduct”, product);
sqlMap.commitTransaction();


例子2:查詢成對(duì)象(select)
sqlMap.startTransaction();
Integer key = new Integer (1);
Product product = (Product)sqlMap.queryForObject (“getProduct”, key);
sqlMap.commitTransaction();


例子3:用預(yù)賦值的結(jié)果對(duì)象查詢成對(duì)象(select)
sqlMap.startTransaction();
Customer customer = new Customer();
sqlMap.queryForObject(“getCust”, parameterObject, customer);
sqlMap.queryForObject(“getAddr”, parameterObject, customer);
sqlMap.commitTransaction();


例子4:查詢成對(duì)象List(select)
sqlMap.startTransaction();
List list = sqlMap.queryForList (“getProductList”, null);
sqlMap.commitTransaction();


例子5:自動(dòng)提交
//當(dāng)沒(méi)調(diào)用startTransaction的情況下,statements會(huì)自動(dòng)提交。
//沒(méi)必要commit/rollback。
int rows = sqlMap.insert (“insertProduct”, product);


例子6:用結(jié)果集邊界查詢成對(duì)象List(select)
sqlMap.startTransaction();
List list = sqlMap.queryForList (“getProductList”, null, 0, 40);
sqlMap.commitTransaction();


例子7:用RowHandler執(zhí)行查詢(select)
public class MyRowHandler implements RowHandler {
public void handleRow (Object object, List list) throws SQLException {
Product product = (Product) object;
product.setQuantity (10000);
sqlMap.update (“updateProduct”, product);
// Optionally you could add the result object to the list.
// The list is returned from the queryForList() method.
}
}
sqlMap.startTransaction();
RowHandler rowHandler = new MyRowHandler();
List list = sqlMap.queryForList (“getProductList”, null, rowHandler);
sqlMap.commitTransaction();


例子8:查詢成Paginated List(select)
PaginatedList list =
sqlMap.queryForPaginatedList (“getProductList”, null, 10);
list.nextPage();
list.previousPage();


例子9:查詢成Map(select)
sqlMap.startTransaction();
Map map = sqlMap.queryForMap (“getProductList”, null, “productCode”);
sqlMap.commitTransaction();
Product p = (Product) map.get(“EST-93”);

?