iBatis学习第一天
生活随笔
收集整理的这篇文章主要介绍了
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是又一个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学习第一天的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Oracle Discover产品简介
- 下一篇: 内置的struts Action 类--