ibatis 快速上手
2009-04-11 17:42
176 查看
简介
iBATIS Data Mapper framework 使JACA和。NET应用程序在使用数据库上变的更容易。
IBATIS通过XML描述把对象(Hashtable、java/.NET object int 、string等)作为输入或者输出跟SQL语句或者存储过程联系起来。
iBATIS Data Mapper 最大的优势是把相关联的对象映射起来.使用iBATIS Data Mapper,你只要知道对象、XML、SQL,你只需要学习很少的东西便可以上手。 使用iBATIS Data Mapper,你可以把你的精力放在SQL和存储过程上面。
例子
现在我们我们通过一个简单的案例,了解如何通过iBATIS解决数据访问问题。
现在有有一个数据库,数据库里面有一张人员信息表
需求是这样:
“通过一个WEB应用程序显示人员信息表里面的信息,并且可以添加、修改、删除人员记录”
一个并不复杂的案例,但是它覆盖所有开发首先要学习的内容。
第1步:The SQL
我们从案例中的数据表开始,为了简单起见,我们假设数据是ACCESS数据库。表的定义如下:
第2步 The.NET Class
Person.cs
第3步 The Nunit test
这里测试案例的第一个需求,显示人员列表。
PersonTest.cs
Assert是NUnit的一个类,如此编译,我们只需要MAPPER对象和QueryForList方法。Mapper是 iBATIS 框架里面的一个类,所以我们只需要调用它们。QueryForList方法执行我们的SQL语句(或者储存过程)并且返回一个list类型的结果。
结果中的每一行成为列表中条目。除了QueryForList,这里还有Delete, Insert, Select, QueryForObject等方法在iBATIS API中。
通过PersonTest类,可以看到 QueryForList 方法的输入参数里面有我们想要运行的SQL语句(或者存储过程)的映射值的Key(我们假设这个映射分为Key和Value)和SQL语句(或者存储过程)需要的运行参数。因为"SelectAll" 不需要任何任何运行参数,我们输入的是null值.
足够简单吧!但是这是我们有一个问题!iBATIS是怎么获取"SelectAll"这个键对应的值(值为sql语句或者储存过程)的呢?
这里就要提到iBATIS的特色数据映射,不需要把SQL写在代码里面。这个任务可以是我们的,也可以是管理数据库。现在我们把这些映射的的描述写在XML元素里面,如下:
Step 4 :The mapping file
Person.xml
iBATIS映射文档可以包含多个象上面一样关联元素集,如果需要还可以写多个映射文档。多映射文档方便多个开发者同时开发一个工程。
就这样,框架通过解析映射文档获得了SQL语句并放进准备好的环境中。但是,这里又有一个问题! iBATIS怎么找到数据源的。
这里,你可以为你的应用程序用到的每一个数据源定义一个配置文件。下面是为我们的ACCESS数据库定义的一个配置文件。
Step 5 :The configuration file
SqlMap.Config - A configuration file for our Access database
当然,除了Access,还支持ADO.NET的其他providers包括 SqlServer, Oracle, MySQL, PostgreSQL, DB2 and generic OLEDB, ODBC providers.
配置文件的最后一部分("sqlMaps")描述了映射文档(第4部对映射有所描述)所在位置。这里我们可以列举多个我们需要的映射文档,在解析配置文件的时候它们都会被读到。
怎么解析配置文件呢?
回过去看第3部的PersonTest类。代码的重点放在"Mapper"对象上面,"Mapper"对象是一个单件。在它第一次被调用之前,读取配置文件创建Mapper对象。Mapper的一系列调用过程及一系列的重用过程。所以在一系列调用过程除非配置文件改不会多次读取。
ibatis框架携带了多个不同的Mapper类。如果你想用一个不同名字的配置文件,或者需要多个数据库,你同样可以用过复制修改标准版本的Mapper类拥有你自定义的Mapper类。
下面是框架里面标准Mapper类的代码。
Mapper.cs
你可以根据需要访问多个不同的数据配置,通过设置附加的Mapper类。每一个Mapper的配置对应一个数据库,对我们的应用程序来说,MAPPER就是数据库。透过Mapper门户,你可以在不修改应用程序代码的情况下 修改数据库的位置和完成SQL语句和储存过程的转换
Step 5 :Running the test
如果我们上面的所有代码和配置文件映射文件放进解决方案。我们可以"蓝色进度条"我们的测试。
iBATIS Data Mapper framework 使JACA和。NET应用程序在使用数据库上变的更容易。
IBATIS通过XML描述把对象(Hashtable、java/.NET object int 、string等)作为输入或者输出跟SQL语句或者存储过程联系起来。
iBATIS Data Mapper 最大的优势是把相关联的对象映射起来.使用iBATIS Data Mapper,你只要知道对象、XML、SQL,你只需要学习很少的东西便可以上手。 使用iBATIS Data Mapper,你可以把你的精力放在SQL和存储过程上面。
例子
现在我们我们通过一个简单的案例,了解如何通过iBATIS解决数据访问问题。
现在有有一个数据库,数据库里面有一张人员信息表
需求是这样:
“通过一个WEB应用程序显示人员信息表里面的信息,并且可以添加、修改、删除人员记录”
一个并不复杂的案例,但是它覆盖所有开发首先要学习的内容。
第1步:The SQL
我们从案例中的数据表开始,为了简单起见,我们假设数据是ACCESS数据库。表的定义如下:
Name | Type | Size |
PER_ID | Long Integer | 4 |
PER_FIRST_NAME | Text | 40 |
PER_LAST_NAME | Text | 40 |
PER_BIRTH_DATE | Date/Time | 8 |
PER_WEIGHT_KG | Double | 8 |
PER_HEIGHT_M | Double | 8 |
Person.cs
using System; namespace iBatisTutorial.Model { public class Person { private int _id; private string _firstName; private string _lastName; private DateTime _birthDate; private double _weightInKilograms; private double _heightInMeters; public int Id { get{ return _id; } set{ _id = value; } } // Other public properties for the private fields ... } }
第3步 The Nunit test
这里测试案例的第一个需求,显示人员列表。
PersonTest.cs
using System.Collections; using IBatisNet.DataMapper; using NUnit.Framework; namespace iBatisTutorial.Model { [TestFixture] public class PersonTest { [Test] public void PersonList () { // try it IList people = Mapper.Instance().QueryForList("SelectAll",null); // test it Assert.IsNotNull(people,"Person list not returned"); Assert.IsTrue(people.Count>0,"Person list is empty"); Person person = (Person) people[0]; Assert.IsNotNull(person,"Person not returned"); } } }
Assert是NUnit的一个类,如此编译,我们只需要MAPPER对象和QueryForList方法。Mapper是 iBATIS 框架里面的一个类,所以我们只需要调用它们。QueryForList方法执行我们的SQL语句(或者储存过程)并且返回一个list类型的结果。
结果中的每一行成为列表中条目。除了QueryForList,这里还有Delete, Insert, Select, QueryForObject等方法在iBATIS API中。
通过PersonTest类,可以看到 QueryForList 方法的输入参数里面有我们想要运行的SQL语句(或者存储过程)的映射值的Key(我们假设这个映射分为Key和Value)和SQL语句(或者存储过程)需要的运行参数。因为"SelectAll" 不需要任何任何运行参数,我们输入的是null值.
足够简单吧!但是这是我们有一个问题!iBATIS是怎么获取"SelectAll"这个键对应的值(值为sql语句或者储存过程)的呢?
这里就要提到iBATIS的特色数据映射,不需要把SQL写在代码里面。这个任务可以是我们的,也可以是管理数据库。现在我们把这些映射的的描述写在XML元素里面,如下:
Step 4 :The mapping file
Person.xml
<alias> <typeAlias alias="Person" type="iBatisTutorial.Model.Person, iBatisTutorial.Model" /> </alias> <resultMap id="SelectAllResult" class="Person"> <result property="Id" column="PER_ID" /> <result property="FirstName" column="PER_FIRST_NAME" /> <result property="LastName" column="PER_LAST_NAME" /> <result property="BirthDate" column="PER_BIRTH_DATE" /> <result property="WeightInKilograms" column="PER_WEIGHT_KG" /> <result property="HeightInMeters" column="PER_HEIGHT_M" /> </resultMap> <select id="SelectAll" resultMap="SelectAllResult"> select PER_ID, PER_FIRST_NAME, PER_LAST_NAME, PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M from PERSON </select>
iBATIS映射文档可以包含多个象上面一样关联元素集,如果需要还可以写多个映射文档。多映射文档方便多个开发者同时开发一个工程。
就这样,框架通过解析映射文档获得了SQL语句并放进准备好的环境中。但是,这里又有一个问题! iBATIS怎么找到数据源的。
这里,你可以为你的应用程序用到的每一个数据源定义一个配置文件。下面是为我们的ACCESS数据库定义的一个配置文件。
Step 5 :The configuration file
SqlMap.Config - A configuration file for our Access database
<?xml version="1.0" encoding="UTF-8" ?> <sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <database> <provider name="OleDb1.1"/> 4000 <dataSource name="iBatisTutorial" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=./Resources/iBatisTutorial.mdb"/> </database> <sqlMaps> <sqlMap resource="Resources/Person.xml" /> </sqlMaps> </sqlMapConfig>
当然,除了Access,还支持ADO.NET的其他providers包括 SqlServer, Oracle, MySQL, PostgreSQL, DB2 and generic OLEDB, ODBC providers.
配置文件的最后一部分("sqlMaps")描述了映射文档(第4部对映射有所描述)所在位置。这里我们可以列举多个我们需要的映射文档,在解析配置文件的时候它们都会被读到。
怎么解析配置文件呢?
回过去看第3部的PersonTest类。代码的重点放在"Mapper"对象上面,"Mapper"对象是一个单件。在它第一次被调用之前,读取配置文件创建Mapper对象。Mapper的一系列调用过程及一系列的重用过程。所以在一系列调用过程除非配置文件改不会多次读取。
ibatis框架携带了多个不同的Mapper类。如果你想用一个不同名字的配置文件,或者需要多个数据库,你同样可以用过复制修改标准版本的Mapper类拥有你自定义的Mapper类。
下面是框架里面标准Mapper类的代码。
Mapper.cs
using IBatisNet.Common.Utilities; using IBatisNet.DataMapper; namespace IBatisNet.DataMapper { public class Mapper { private static volatile SqlMapper _mapper = null; protected static void Configure (object obj) { _mapper = (SqlMapper) obj; } protected static void InitMapper() { ConfigureHandler handler = new ConfigureHandler (Configure); _mapper = SqlMapper.ConfigureAndWatch (handler); } public static SqlMapper Instance() { if (_mapper == null) { lock (typeof (SqlMapper)) { if (_mapper == null) // double-check InitMapper(); } } return _mapper; } public static SqlMapper Get() { return Instance(); } } }
你可以根据需要访问多个不同的数据配置,通过设置附加的Mapper类。每一个Mapper的配置对应一个数据库,对我们的应用程序来说,MAPPER就是数据库。透过Mapper门户,你可以在不修改应用程序代码的情况下 修改数据库的位置和完成SQL语句和储存过程的转换
Step 5 :Running the test
如果我们上面的所有代码和配置文件映射文件放进解决方案。我们可以"蓝色进度条"我们的测试。
相关文章推荐
- Ibatis快速上手案例解析
- iBATIS学习01:iBATIS概览+iBATIS十分钟快速上手操练
- Bootstrap框架快速上手攻略
- 快速上手MySql && MySql GUI工具 SQLyog Community
- 快速上手 Kotlin 的 11 招
- ERP销售人员快速上手
- 快速上手Spring--6. Singleton的使用与否
- 【转】.Net程序员玩转Android系列之三~快速上手
- Jmock快速上手教程
- 快速上手Spring--6. Singleton的使用与否
- 快速上手Spring--2.HelloWorld(2)
- JDOM快速上手
- Android开发必备武器,处理XML的利器--SAX快速上手【转】
- python编程快速上手--控制流(二)
- Python编程快速上手-第七章实践
- JDOM处理XML快速上手
- JavaScript快速上手之6:比较和逻辑运算符
- 『转载』Debussy快速上手(Verdi相似)
- 快速上手使用CXF
- JavaScript快速上手之8:for 循环