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

|