这篇文章介绍了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);