iBatis学习第一天
一、iBatis简单介绍
iBatis是又一个O/R Mapping解决方案,j2ee的O/R方案真是多,和Hibernate相比,iBatis最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能,iBatis是能满足你的要求又足够灵活的最简单的解决方案。
iBatis简单灵活,上手容易,代码很少,配置稍嫌复杂。不足之处一是没有方便的工具来自动生成xml配置文件,二是不管是query还是insert都只能传入一个参数,有时不得不把两个参数包装成一个类传进去。另外对常见的1:1,1:N关系的支持不如Hibernate。不过,大多数时候iBatis已经完全可以满足我们的需求。Spring很好的集成了iBatis,你可以参考Spring的JPetStore示例。需要注意的是使用iBatis 2.0和1.0有较大区别,主要体现在配置文件上,iBatis 2.0新增了DAO框架,不需要Spring提供的DAO也能很方便地实现DAO模式。
iBATIS与普通的OO/RM的不同:它不是直接把类映射为数据库表或者说把类的字段映射为数据库列,而是把SQL语句的参数与结果(也即输入和输出)映射为类。正如你在本书的剩余部分中将会学到的,iBATIS在类和数据库表之间建立了一个额外的间接层,这就为如何在类和数据库表之间建立映射关系带来了更大的灵活性,使得在不用改变数据模型或者对象模型的情况下改变它们的映射关系成为可能。其实我们这里讨论的这个间接层就是SQL。SQL这个额外的间接层使得iBATIS能够更好地隔离数据库设计和应用中使用的对象模型。这就使得它们两者之间的相关性能够降至最少。图2-2展示了iBATIS如何使用SQL映射数据。
[img]http://qingfeng825.iteye.com/upload/picture/pic/10994/b2621326-84c2-3aee-bd32-946fb5fe0881.gif [/img]
正如你在上图中所看到的,iBATIS的映射层其实就是SQL。iBATIS让你自己写SQL语句,iBATIS负责在类的字段和数据库表的列之间映射参数和结果。基于这个原因,也考虑到与其他各种各样的映射方式的区分,为避免混淆,iBATIS小组通常将所谓的“数据映射器”称为SQL映射器(SQL mapper)
二、映射SQL语句
任何一条SQL语句都可以看作是一个函数,有输入输出集合。输入即参数(parameter),通常可以在SQL语句的WHERE子句中找到。输出则是SELECT子句中指定的那些列。图2-3描述了这个思想。
[img]http://qingfeng825.iteye.com/upload/picture/pic/10994/b2621326-84c2-3aee-bd32-946fb5fe0881.gif[/img]
图2-3 SQL语句可以被看作一个包含输入输出的函数
这种方式的最大优点就在于SQL语句使得开发者能够自己把握巨大的灵活性。他可以在不改变数据模型的前提下轻易地操纵数据以适应对象模型。甚至,开发者还可以通过数据库内建的函数和存储过程引入多表和结果集。总之,他们可以随心所欲地利用SQL的强大能力。
iBATIS使用一个简单的XML描述文件来映射SQL语句的输入和输出。代码清单2-1给出了一个这样的例子。
[img]http://qingfeng825.iteye.com/upload/picture/pic/10998/a1207e30-46ce-3944-b461-db7b851db237.gif[/img]
代码清单2-1 一个SQL映射的例子
从以上代码中我们看到了一条SELECT语句,它返回address表中的数据。从<select>元素的parameterClass属性中我们可以看出该语句使用一个Integer对象作为参数,该参数是通过WHERE子句中的#id#符号标记的;从<select>元素的resultClass属性我们还可以看出该语句的结果是一个Address类的实例,假设Address类的所有字段名与SELECT语句中指定的各个列的别名(通过as关键字)相同。例如,ADR_ID列别名为id,故会映射到Address类中名为id的字段上。不论你是否相信,要映射一个SQL语句使其接受一个Integer作为参数并返回一个Address对象作为结果,你要做的就是这些了。用于执行以上语句的Java代码如下:
Address address = (Address) sqlMap.queryForObject("getAddress",
new Integer(5));
SQL映射这个概念具有很好的可移植性,可应用于任何一个功能完备的编程语言。例如,基于iBATIS.NET的C#代码就与之前的Java代码几乎是一模一样的:
Address address = (Address) sqlMap.QueryForObject("getAddress", 5);
当然,iBATIS针对SQL映射还有许多高级选项,特别是针对映射的返回结果。
三、配置iBATIS
最简单的iBATIS应用中的SQL映射配
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"><sqlMapConfig><transactionManager type="JDBC"><dataSource type="SIMPLE"><property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/><property name="JDBC.Username" value="root"/><property name="JDBC.Password" value="blah"/></dataSource></transactionManager><sqlMap resource="SqlMap.xml"/></sqlMapConfig>
由于这是一个XML文件,我们需要提供doctype和DTD用于验证(1)。SIMPLE是一个iBATIS内置事务处理器的别名(2)。我们需要为这个事务处理器提供JDBC驱动的名称、JDBC URL、以及允许你连接到数据库的用户名(username)和密码(password)。然后你将提供你的SQL映射文件(3)。
四、执行SQL语句
String resource="SqlMapConfig.xml";Reader reader=Resouces.getResouceAsReader(resource);SqlMapClient sqlMap=SqlMapClentBuilder.builderSqlMapClient(reader);List list=sqlMap.queryForList("getAllUsers","EMPLOYEE");
五、iBatis配置文件有了,指定的连接的数据库URL,用户名,密码,指定的映射文件的地址;映射文件也说明了;怎么执行SQL语句也有了;接下就少怎么构造应用了,很简单,只需
在classpath上添加两个JAR文件:ibatis-common-2.jar和ibatis-sqlmap-2.jar
iBatis学习第一天相关推荐
- Ibatis学习随笔
Ibatis学习随笔 < person > < id > 1 </ id > < firstName > Clinton </ ...
- JavaEE的学习第一部分
重点从第四章和第五章开始应用举例学习,前面三章都是叙述和介绍,真正应用上,只有第五章的MyBatis和Spring的框架整合是需要用的到的.建议结合Java web的数据库操作 和第五章的应用举例一起 ...
- Android学习第一书
大家好,我是一名Facebook的工程师,同时也是<第一行代码--Android>的忠实读者. 虽然我最近几年是在国外读书和工作的,但是和很多人一样,我也非常喜欢郭霖的博客以及他写的< ...
- MongoDB学习第一篇 --- Mac下使用HomeBrew安装MongoDB
2019独角兽企业重金招聘Python工程师标准>>> MongoDB学习第一篇 --- Mac下使用HomeBrew安装MongoDB 0.确保mac已经安装了HomeBrew ( ...
- jQuery框架学习第一天:开始认识jQuery
jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQu ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第一周
java学习第一周 本周是新学期的开端,也是新的学习进程的开端,第一次接触java这门课程,首先书本的厚度就给我一种无形的压力,这注定了,这门课程不会是轻松的,同时一种全新的学习方 ...
- React 学习第一天-2018-07-21
React 学习第一天 1.Dom 和虚拟Dom Dom 是浏览器中实际存在的,虚拟Dom是框架中的,是利用JS代码来模拟DOM. 虚拟Dom 是实现页面的实时更新. Dom树,一个网页的呈现过程, ...
- MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.5 Adding a raster layer...
MapServer Tutorial--MapServer7.2.1教程学习--第一节用例实践:Example1.5 Adding a raster layer 一.前言 MapServer不仅支持 ...
- linux操作系统学什么,Linux学习-第一天-什么是操作系统
Linux学习--第一天--什么是操作系统? 第一章 什么是Linux 1.1 什么是Linux 1.1.1 计算机:计算的辅助工具 计算机必须要有的组件: 输入单元:如鼠标.键盘.卡片阅读器机,等等 ...
最新文章
- 九爷带你了解 nginx 日志配置指令详解
- 安卓天天练练(十一)用list绑数据
- pandas入门(1)
- 记一次 @Transactional不生效的问题
- honeywell新风系统控制面板说明_新风系统——不开窗也能清新呼吸
- 大数据相关知识点收集
- OpenGL与shader区别(三十一)
- Spring Cloud 微服务架构图
- Windows安装Qt教程
- eclipse访问限制
- 老鱼Python数据分析——篇十四:读取“选股宝”的热点板块信息并存为excel文件
- 基于MATLAB的分子动力学自编程序—300K下Ar的分子运动
- word自动生成目录 页码不能右对齐问题
- Advanced控制理论
- 网络 :基础——路由器、交换机
- 关于“无法读取 KSR data-disk 1 扇区。。”蓝屏问题
- Linux系统 运行小花仙游戏(针对2021年Flash停止维护的情况)
- 遥感数据集Million-AID介绍及数据预处理
- linux 磁盘压测工具 fps,荣耀MagicBook Pro锐龙版性能评测,可媲美MX150 2GB核心显卡...
- 中英文文本分类的区别
热门文章
- Vue 2.x + Webpack 4.x的那些事---萌新必备
- asp.net 获得域名,端口,虚拟目录[转]
- 设计模式C++实现——组合模式
- 【初码干货】关于.NET玩爬虫这些事
- jquery和zepto的扩展方法extend
- java学习笔记(4)
- 如何在 DB2 Universal Database 中暂时禁用触发器(转)
- 国际化的Struts的开发步骤简介
- 基于OMAPL138的字符驱动_GPIO驱动AD9833(三)之中断申请IRQ
- SQL Server DATEDIFF() 函数计算时间差