- 浏览: 931970 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (251)
- WebService (17)
- IBatis (22)
- Hibernate (1)
- SpringMVC - 基础篇 (32)
- Spring (15)
- Java (11)
- JVM及调优 - 基础篇 (4)
- 集群 (14)
- 数据库 (17)
- WebSphere (5)
- 多线程 (4)
- 集合、容器 (2)
- DB Pool (1)
- Power Designer (5)
- Maven基础 (5)
- JS (14)
- WEB 前端 (5)
- 实用小工具 (17)
- 社会、人 (2)
- 乱七八糟 (18)
- ASM&CGLIB - 基础篇 (12)
- 缓存 (1)
- 性能 (1)
- 设计之殇 (1)
- 分布式事务 (1)
- 单点登录 (11)
- 分布式 Session (4)
- Memcached - 基础篇 (6)
最新评论
-
一笑_奈何:
楼主写的还真行不错。
扫盲贴 - J2EE集群之JNDI集群实现 -
xuezhongyu01:
博主写的很详细,但最后还是没明白,最后调用BasicDataS ...
Spring中的destroy-method方法 -
Mr梁:
commons-fileupload.jar commons- ...
SpringMVC 中文件上传 MultipartResolver -
Eywa:
总结的很不错
ORACLE CASE WHEN 及 SELECT CASE WHEN的用法 -
TryRelax:
fastjson 比 jackson 好用吧?
Spring MVC Jackson DateFormat
转载:http://sarin.iteye.com/blog/726029
iBatis并不是真正意义上的ORM,官方文档中称其为dataMapper,是数据映射器,也就是一种映射查询工具。iBatis不是万能的,在某些它不能处理的问题时,不能放弃使用JDBC API,那才是根本中的根本。
在iBatis中,建议使用JavaBean,因为我们是面向对象的设计,那么在系统设计时肯定创建了很多刻画具体对象的类,使用JavaBean就可以
直接操作getter方法来获取内容。就像是Hibernate中的PO一样。下面来说一种如何获取Bean中属性名称和属性类型的方法,这在开发时可能
会用到。
先定义一个JavaBean,刻画用户模型吗,如下:
- package ibatis.model;
- public class User implements java.io.Serializable {
- private Integer userId;
- private String userName;
- private String password;
- private String mobile;
- private String email;
- public User() {
- super();
- }
- public User(Integer userId, String userName, String password,
- String mobile, String email) {
- super();
- this.userId = userId;
- this.userName = userName;
- this.password = password;
- this.mobile = mobile;
- this.email = email;
- }
- // 省略getter和setter方法
- @Override
- public String toString() {
- return "User [email=" + email + ", mobile=" + mobile + ", password="
- + password + ", userId=" + userId + ", userName=" + userName
- + "]";
- }
- }
写一个方法来测试,如下:
- public static void main(String[] args) {
- try {
- PropertyDescriptor[] pd = Introspector.getBeanInfo(User.class).getPropertyDescriptors();
- for (int i = 0; i < pd.length; i++) {
- System.out.println(pd[i].getName() + " ("
- + pd[i].getPropertyType().getName() + ")");
- }
- } catch (IntrospectionException e) {
- e.printStackTrace();
- }
- }
在控制台,我们获得如下输出:
- class (java.lang.Class)
- email (java.lang.String)
- mobile (java.lang.String)
- password (java.lang.String)
- userId (java.lang.Integer)
- userName (java.lang.String)
在定位BUG时,这是很好的一种手段。
接下来,我们来说一下三个常用的查询方法,它们的命名和Spring的JdbcTemplate/SqlMapClientTemplate很像,但是要区分开。
首先是queryForObject()方法,它返回数据库查询的一条结果,并放入到Java对象中,这里的一条记录可以是一个
JavaBean,也可以是Java的集合类型。它可以根据<select>标签中配置的resultClass属性来确定的,如果不指定
resultClass属性,那么查询结果就是null了,因为iBatis不知道怎么处理这个结果,而且我们也没有配置结果映射
(resultMap)。
首先我们根据上面的User类型,将resultClass设置为User,代码如下:
- <sqlMap namespace="User">
- <typeAlias alias="User" type="ibatis.model.User" />
- <select id="getUserByName" parameterClass="java.lang.String"
- resultClass="User">
- select *
- from users
- where USERNAME=#VARCHAR#
- </select>
- </sqlMap>
这时要求User类中必须要有一个默认的构造方法,否则将不能实例化这个对象,抛出异常,这一点不能忘记(如果重载了构造方法的话)。我们写一个程序:
- System.out
- .println(sqlMap.queryForObject("User.getUserByName", "sarin").getClass().getName());
此时,输出内容为:ibatis.model.User,这就很清楚的看到了,查询的结果类型是由<select>中的resultClass来确定的。
queryForObject()的另外一个重载方法是Object queryForObject(String id,
Object parameter, Object resultObject) throws
Exception,这种方法是为对象不能轻易创建的情况使用的(如没有默认的构造方法的对象),那么使用前面那种格式就会抛出异常,就需要使用这种方
法,看下面代码:(这里去掉User类中的默认构造方法)
- User user=new User(null, null, null, null, null);
- user = (User) sqlMap.queryForObject("User.getUserByName", "sarin",
- user);
- System.out.println(user);
这样才能获得user对象。
第二个方法是queryForMap()方法,返回结果可以是一条,也可以是多条。
它的方法签名有两种形式:
第一种是Map queryForMap(String id, Object parameter, String key) throws SQLException,
第二种是再多一个参数String value。
前面两个参数好理解,就是select标签的id和传入的参数,而后面的key和value是什么意思呢?
key指定了Map中存储的键,而 value确定了存储的值,不设置value时则存储查询的一个对象,
如下面代码(此时已经将select的resultClass设置为hashmap 了):
- Map map = sqlMap.queryForMap("User.getAllUsers", null,"userId");
- System.out.println(map);
正如你所想,这段代码的输出为:
- {1={email=gmail@gmail.com, userId=1, userName=sarin, password=123, mobile=15940912345}, 2={email=gmail@gmail.com, userId=2, userName=sarin, password=123, mobile=15940912345}}
这里的1和2就是key,是键,那么它们是什么类型的呢?我们使用如下代码来看看:
- System.out.println(map.keySet().iterator().next().getClass());
得到结果:class java.lang.Integer,说明这是字段相对应的,因为这里我们没有将查询结果和JavaBean相关联。那么HashMap中存储的value是什么类型呢?我们来看,代码如下:
- System.out.println(map.get(1).getClass());
打印得到:class java.util.HashMap,说明存储的还是HashMap。而queryForMap()的第二个重载方法则是指定了value的内容,我们来看:
- Map map = sqlMap.queryForMap("User.getAllUsers", null, "userId",
- "mobile");
- System.out.println(map);
这将打印:{1=15940912345, 2=15940912345},这回就清楚了吧,而且得到的mobile的类型是String,也就容易理解了。
记住一点,queryForMap()方 法返回的可以是一条也可以是多条记录。但是在实践中往往用它来获取一条完整的记录,那么使用Map的get()方法就能获取到其中的值了,非常方便。
下面来看queryForList()方法,同样,该方法的方法签名也有两类形式:
第一类是queryForList(String id, Object parameter) throws SQLException,或者不需要参数,这很好理解了。看个例子:(SqlMap中的resultClass设置为hashmap)
- List users = sqlMap.queryForList("User.getAllUsers");
- System.out.println(users);
打印的结果是:
- [{email=gmail@gmail.com, userId=1, userName=sarin, password=123, mobile=15940912345}, {email=gmail@gmail.com, userId=2, userName=sarin, password=123, mobile=15940912345}]
就是List中装入的是HashMap对象,在SqlMap中将hashmap换为User,那么得到:
- [User [email=gmail@gmail.com, mobile=15940912345, password=123, userId=1, userName=nanlei], User [email=gmail@gmail.com, mobile=15940912345, password=123, userId=2, userName=sarin]]
第二类方法是queryForList(String id, Object parameter,
int skip, int max) throws
SQLException,可以看出后面多了两个int类型的参数,那么SQL中使用两个int类型的参数能干什么?分页,没错,这是主要应用。
iBatis在queryForList()中提供了为分页提供支持的方法。记着skip是从0开始计算的,而max就是取出的条数,那么取前10条就是
(0,10),取11~20条就是(10,10),以此类推。
一家之言,仅供参考。欢迎交流。
发表评论
-
iBATIS缓存
2011-12-12 21:33 1163为了提高应用程序性 ... -
iBatis批处理(batch)
2011-09-05 23:47 6956spring集成了ibatis的批量提交的功能,我们只要调用A ... -
一个Spring+iBatis框架进行batch处理的问题
2011-09-05 23:23 1621在使用org.springframework.jdbc.dat ... -
ibatis 注意点
2011-08-08 19:28 1381insert,update,delete 返回值 inser ... -
ibatis 之 动态SQL查询(dynamic )
2011-06-12 12:13 2287映射文件: <select id=" ... -
ibatis 之 复杂类型集合的属性
2011-06-12 12:10 2146Result Map还可以装入代表复杂类型对象集合(List) ... -
ibatis 之 复杂类型属性(即自定义类型的属性)
2011-06-12 11:54 3448复杂类型用以表示在数 ... -
ibatis 之 java.util.Map作为parameterClass和resultClass
2011-06-12 11:21 51601.Map作为parameterClass 映射 ... -
ibatis Tips 之 resultMap
2011-05-29 21:04 1209转载:http://xulongfa.iteye.com/bl ... -
ibatis Tips之parameterMap
2011-05-29 21:03 1341转载:http://xulongfa.iteye.com/bl ... -
iBatis查询select详解
2011-05-29 12:20 2216转载:http://sarin.iteye.com/blog/ ... -
ibatis 表与表的关联查询
2011-05-22 15:04 1265ibatis高级特性,处理表与表之间的关联。ibatis中,提 ... -
ibatis 动态映射机制
2011-05-22 14:15 1455对于这个组合查询页 ... -
sqlMapConfig.xml配置文件详解
2011-05-22 13:04 3553sqlMapConfig.xml配置文件详解: X ... -
ibatis缓存
2011-05-22 12:52 1360iBatis的缓存配置比较简单易懂,以我使用的iBati ... -
ibatis resultclass "java.util.hashmap" 缓存问题
2011-05-22 12:13 1522在做ibatis项目过程中遇到如下样式动态查询 <se ... -
ibatis # $区别
2011-05-22 11:55 14361、#可以进行预编译,进行类型匹配,#变量名# 会转化为 j ... -
iBATIS入门示例及注释
2011-05-08 18:20 1796工程的结构: 一、SqlMapConf ... -
iBATIS 三个版本小细节对比
2011-05-08 16:12 1202iBATIS 三个版本小细节对比 sqlMapConfig ... -
深入分析 iBATIS 框架之系统架构与映射原理
2011-05-07 12:48 1220原文:http://www.ibm.com/developer ...
相关推荐
在"Ibatis-api.rar"这个压缩包中,包含了一个名为"Ibatis-api.chm"的文件,这通常是一个Windows的帮助文件格式,里面详细记录了Ibatis的API文档。通过这个文档,我们可以深入理解Ibatis的工作原理和使用方法。 ...
**IBATIS API 帮助文档与IBATIS开发文档详解** IBATIS,一个由iBATIS公司开发的开源持久层框架,是Java世界中广泛使用的数据访问接口(DAO)工具。它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java...
这个“ibatis-api中文(真的中文)”资料集合包含了iBATIS的API文档以及教程,帮助开发者更好地理解和使用iBATIS。 首先,`iBATIS-SqlMaps-2-cn.pdf`是iBATIS SQL Maps 2.0的中文版教程。在该文档中,你可以找到...
ibatis2.3 API CHM 帮助文档 ibatis 开发人员必备
Ibatis 是一个优秀的开源对象关系映射(ORM)框架,主要应用于Java开发中,它使得开发者...Ibatis-api.chm 文件很可能是Ibatis API 的离线帮助文档,包含了详细的API介绍和使用示例,对学习和使用Ibatis 非常有帮助。
6. 缓存:为了提高性能,iBATIS支持本地缓存和二级缓存,可以存储查询结果,避免重复的数据库访问。 "iBATIS_API_DOC.chm"文件很可能是iBATIS API的官方帮助文件,其中包含了详细的API参考、示例和教程。它会涵盖如...
《深入理解iBatis API:全面解析与应用实践》 在软件开发领域,数据库操作是不可或缺的一部分,而iBatis作为一个优秀的持久层框架,为Java开发者提供了强大的SQL映射功能,使得数据库操作更加灵活和高效。本文将...
ibatis-api 英文版本 chm ibatis-api 英文版本 chm ibatis-api 英文版本 chm ibatis-api 英文版本 chm
本篇文章将深入探讨Ibatis API、文档以及说明,帮助你更好地理解和使用这个强大的框架。 Ibatis API是Ibatis的核心接口和类,提供了丰富的功能供开发者进行数据访问。以下是一些关键的API组件: 1. ...
ibatis-api.chm ibatis-api.chmibatis-api.chm
o-r映射 ibatis 2.3.4 api chm 中文版, 支持即时查询,高级查询。
通过阅读提供的中文文档,如`ibatis-api.chm`、`MyBatis 3 User Guide Simplified Chinese.pdf`和`ibatis开发指南(中文版).pdf`,你可以更深入地理解和掌握Ibatis框架,从而在实际项目中更好地利用它进行数据访问...
iBATIS是一个开源的Java框架,它为数据库访问提供了一个简单而强大的解决方案。这个框架的主要目的是将SQL映射到Java代码中,使得开发者能够更直接...总之,掌握iBATIS API是提高Java项目中数据库访问能力的关键步骤。
iBATIS API大全是学习和掌握这一框架的重要参考资料,其中包含了丰富的API信息和技术指南。 《iBATIS_SQL_Maps_guide.pdf》是关于iBATIS SQL Maps的指南,可能涵盖了如何创建和使用SQL映射文件、动态SQL、结果映射...
《ibatis-api 帮助文档》是一份详尽的指南,专为开发者提供关于iBatis框架的API使用和理解。iBatis是一个优秀的持久层框架,它将SQL、Java代码与XML配置文件分离,使得数据库访问更加灵活且易于维护。这份帮助文档是...
Ibatis的主要API包括SqlSession、SqlSessionFactory和SqlSessionFactoryBuilder。SqlSession是Ibatis的基本工作单元,它负责执行SQL查询和操作数据库事务。SqlSessionFactory是创建SqlSession的工厂,而...
自己做得一个ibatis的帮助文档,没啥其他的可以介绍。
**API ibatis2** iBATIS 是一个Java编程语言中的持久层框架,它允许开发者将SQL语句直接集成到Java代码中,简化了数据库访问的复杂性。在iBATIS 2版本中,这个框架提供了强大的数据映射功能,允许程序员以面向对象...
### iBATIS中文API文档概览 #### 一、引言 iBATIS是一个开源的持久层框架,它简化了Java应用程序与关系型数据库之间的交互。通过使用简单的XML配置文件来映射JavaBean到SQL语句,iBATIS提供了一种更加灵活的方式来...