介绍iBATIS的SQL Map的简单例子

类别:Java 点击:0 评论:0 推荐:

这篇文章介绍了iBATIS的SQL Map的简单例子。它是一个免费的开放源代码软件。
具有以下优点:
10、知道怎样操作10种以上的数据库
9 、可配置的caching(包括从属)
8、支持DataSource、local transaction managemen和global transaction
7、简单的XML配置文档
6、支持Map, Collection, List和简单类型包装(如Integer, String)
5、支持JavaBeans类(get/set 方法)
4、支持复杂的对象映射(如populating lists, complex object models)
3、对象模型从不完美(不需要修改)
2、数据模型从不完美(不需要修改)
1、你已经知道SQL,为什么还要学习其他东西

以下内容是http://www.ibatis.com/common/example.html 的中文翻译,翻译的不好,请多多原谅。

<!--
映射语句看上去像什么?

以下是一个简单的SQL Map例子。这个查询语句使用了SQL Map框架的特征,允许数据库字段名自动
映射到JavaBean属性中。假设Address类中有以下几个属性:
id (int),
description (String),
street (String),
city (String),
province (String),
postalCode (String)
在SQL语句(一个标准的SQL特征)中通过使用字段别名和在result-class属性中命名class,在字段
中的值将自动映射到JavaBean中。这就是一个使用SQL Map框架从SQL查询语句中得到一个对象
(JavaBean)的方法。
-->


<select id="getAddress" parameterClass="int"
                        resultClass="examples.domain.Address">
 select
        ADR_ID           as id,
  ADR_DESCRIPTION  as description,
  ADR_STREET       as street,
  ADR_CITY         as city,
  ADR_PROVINCE     as province,
  ADR_POSTAL_CODE  as postalCode
 from ADDRESS
 where ADR_ID = #value#
</select>

我怎样用Java执行它呢?

/*
 * 以下几行代码在以上的语句中将integer 5 传递给#value#参数,来执行映射语句。
 */

Integer pk = new Integer(5);
Address address = (Address)sqlMap.queryForObject("getAddress", pk);

//提示:查看JPetStore 4,它使用了许多的新的特性,它是一个完整的应用实例。同时也有详尽开发指南的完整的文档。
//更多的例子请看下面。

<!--
SQL Map 不只是使用在查询语句中,以下是一个新的Address的插入语句
-->

<insert id="insertAddress" parameterClass="examples.domain.Address">
 insert into ADDRESS (
  ADR_ID,
  ADR_DESCRIPTION,
  ADR_STREET,
  ADR_CITY,
  ADR_PROVINCE,
  ADR_POSTAL_CODE)
   values (
  #id#,
  #description#,
  #street#,
  #city#,
  #province#,
  #postalCode#)
</insert>

//执行这个插入语句就像执行一个查询语句一样方便。
//executeUpdate()方法被用于插入,更新和删除。

Address address = new Address();
address.setId(15);
address.setDescription("Bob's Comic Book Store");
address.setStreet ("16 Somestreet");
...
sqlMap.insert ("insertAddress", address);

<!--
这里是一个返回不止一个结果的例子
-->

 <select id="getProductByCategory" parameterClass="int"
                                   resultClass="examples.domain.Product">     
  select
    PRD_ID           as id,       
    PRD_CATEGORY     as category,
    PRD_DESCRIPTION  as description,
    PRD_RETAIL       as retail,       
    PRD_QUANTITY     as quantity     
  from PRODUCT     
  where PRD_CATEGORY = #value#
</select>


//为一个“dog”类目中获得一个产品列表执行以上语句,就像这样那么简单:

String category = "dog";
List productList = sqlMap.queryForList("getProductByCategory", category);


//太多的结果?那么 完全可导航、惰性加载(lazy-loaded)、用JavaBean来分页列出产品、
//在jsp页面中的易用性 怎么样呢?一页10个行吗?

PaginatedList productList = sqlMap.queryForList("getProductByCategory",
                                                 category,
                                                 10);

productList.nextPage();
productList.previousPage();
productList.isNextPageAvailable();
// etc.


//需要一个来自相同查询的产品ID和描述的映射?

Map descriptionMap = sqlMap.queryForMap ("getProductByCategory",
                                          category,
                                          "id",
                                          "description");

<!--
来自一个遗留系统的复杂的SQL?
例如:也许你需要使用Oracle来解决一个复杂的 parent/child 树。
-->
<select id="getEmployeesByManagerRecursively" parameterClass="int"
                                              resultClass="examples.domain.Employee">     
    SELECT
        emp_id           as id,
        emp_number       as employeeNumber,
        emp_first_name   as firstName,
        emp_last_name    as lastName,
        emp_dept_code    as departmentCode         
    FROM employee
    START WITH emp_id = #value#
    CONNECT BY PRIOR emp_manager_id = emp_id;
</select>

Integer managerId = new Integer(15);
List employeeList = sqlMap.queryForList("getEmployeesByManagerRecursively",
                                         managerId);

本文地址:http://com.8s8s.com/it/it14076.htm