1.查询
(1)联合查询:使用一个sql查询
(2)子查询:对于每个表使用一个sql查询
基本的原则是,如果您需要访问相关的对象,则使用联合查询。否则,使用延迟加载和字节码增强选项的子查询。

 


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来处理sql,得到记录,如何设置对象
 a. user.setId(id)  -->id:  column
 b. 如果有select属性,则column 作为查询条件插入
 
 


 
 
3.集合
让SQL Map架构装入复杂类型集合(List)的业务对象的属性必须是java.util.List或java.util.Collection类型。 
为什么set,hashset报错???

 

4.
重要提示!目前SQL Map架构无法自动解决resultMap之间的双向关系。这在处理“父/子” 双向关系的resultMap时尤其要注意。
一个简单的办法是,为其中一种情况再定义一个不装入父对象的resultMap(反之亦然)。

 

 



代码例子
例子1:执行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:查询成对象(select)
sqlMap.startTransaction();
Integer key = new Integer (1);
Product product = (Product)sqlMap.queryForObject (“getProduct”, key);
sqlMap.commitTransaction();


例子3:用预赋值的结果对象查询成对象(select)
sqlMap.startTransaction();
Customer customer = new Customer();
sqlMap.queryForObject(“getCust”, parameterObject, customer);
sqlMap.queryForObject(“getAddr”, parameterObject, customer);
sqlMap.commitTransaction();


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


例子5:自动提交
//当没调用startTransaction的情况下,statements会自动提交。
//没必要commit/rollback。
int rows = sqlMap.insert (“insertProduct”, product);


例子6:用结果集边界查询成对象List(select)
sqlMap.startTransaction();
List list = sqlMap.queryForList (“getProductList”, null, 0, 40);
sqlMap.commitTransaction();


例子7:用RowHandler执行查询(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”);