介绍iBATIS的SQL Map的简单例子

原创 2004年10月29日 21:58:00

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

ibatis使用HashMap传递SQL参数

虽然ibatai sql map可以配置多个参数,但sqlMap只能传入一个参数,我们有两种方式,一是把我们的参数封装成一个类,通过set/get取值的方式给sql map注入参数,二是通过hashM...
  • daryl715
  • daryl715
  • 2007年07月17日 11:08
  • 8401

ibatis中返回Map类型

今天试了下在ibatis中返回Map类型的结果     select name  from tab where colname=#code#  将会报错,但是将resultClass="java.ut...
  • wuzhao008
  • wuzhao008
  • 2006年12月06日 23:35
  • 8956

Ibatis使用Map作为映射结果,进行多表连接查询

第一步:XML文件ResultMap和查询语句的编写 1、resultMap内容 ...
  • u011450110
  • u011450110
  • 2016年03月09日 14:55
  • 2183

ibatis中sql-map-config.xml的settings配置

ibatis中sql-map-config.xml的settings配置 cacheModelsEnabled="true" lazyLoadingEnabled="false" enhan...
  • hsgao_water
  • hsgao_water
  • 2016年08月11日 10:02
  • 706

Ibatis/mybatis中,查询SQL参数和返回都是Map的情况

在实际开发中,经常需要SQL查询的参数为map,而返回的结果集也是map的情况,不用去写繁琐的ResultMap. 其DAO接口代码如下:...
  • simon_xu_sh
  • simon_xu_sh
  • 2015年02月02日 17:49
  • 880

ibatis中直执行sql,返回存储Map的List类型

ibatis作为一个轻量级的orm工具现在非常流行,我在使用中发现,有时仅仅希望返回一个类型为map的list就可以了, 比如简单的查询统计之类的,没有必要定义太多的pojo,因此想能不能在ibati...
  • hereyouare
  • hereyouare
  • 2009年12月16日 11:45
  • 6589

ibatis通过Map封装参数调用存储过程

ibatis调用存储过程
  • tongge01uuu
  • tongge01uuu
  • 2013年07月17日 14:15
  • 2976

Ibatis中sqlmap参数map中还需要套list的情况如何写?

原文地址:http://hittyt.iteye.com/blog/1518665 原始需求: 有若干个参数,需要作为ibatis拼装sql的参数传入,但是有个参数的值比较特殊,是若干...
  • majian_1987
  • majian_1987
  • 2015年06月03日 09:37
  • 4339

ibatis 使用动态查询时,定制结果集键值的大小写

最近在使用ibatis动态查询时,常常遇到返回的集合Map 里面的键值时而大写时而小写,让我们很苦恼,最后直接修改了ibatis组装结果集这段代码com.ibatis.sqlmap.engine.ma...
  • zwhfyy
  • zwhfyy
  • 2007年03月05日 20:23
  • 4867

项目备份--ibatis中查询返回一个MAP

SELECT qid , SUM(exp_reg) AS totalExp FROM t_ruanko_ke_user_experience WHERE cid = #cid# AND NAME ...
  • wocaonima123987
  • wocaonima123987
  • 2012年09月13日 10:54
  • 4513
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:介绍iBATIS的SQL Map的简单例子
举报原因:
原因补充:

(最多只允许输入30个字)