通过上一篇文章,大概了解了Ibatisnet中SqlMap的配置,但仅仅有SqlMap我们还不能进行IBatisnet的操作,我们还需要根据数据库表来编写映射文件.
Ibatisnet的xml映射文件主要包括这几个部分,resultMaps,parameterMaps,下面分别说一下IBatisnet的映射文件中的Elements及其Attributes.
一、Statements
简单的说,这一部分里放的是对数据库操作的SQL语句及存储过程等,它包括以下子元素:
| Statement Element | Attributes | Child Elements | Methods |
|---|---|---|---|
| <statement> |
id
parameterClass
resultClass
listClass
parameterMap
resultMap
cacheModel
|
All dynamic elements |
Insert
Update
Delete
All query methods
|
| <insert> |
id
parameterClass
parameterMap
|
All dynamic elements
<selectKey>
<generate>
|
Insert
Update
Delete
|
| <update> |
id
parameterClass
parameterMap
extends
|
All dynamic elements
<generate>
|
Insert
Update
Delete
|
| <delete> |
id
parameterClass
parameterMap
extends
|
All dynamic elements
<generate>
|
Insert
Update
Delete
|
| <select> |
id
parameterClass
resultClass
listClass
parameterMap
resultMap
cacheModel
extends
|
All dynamic elements
<generate>
|
All query methods |
| <procedure> |
id
parameterMap
resultClass
resultMap
cacheModel
|
All dynamic elements |
Insert
Update
Delete
All query methods
|
然后说一下,这些Statement Element的Attributes
1、id
statement的标识,每个statement必须的attribute,还需注意的是,在所有的sqlmap中,它都是唯一的。
2、parameterMap
parameterMap的值会按照顺序匹配statement中的sql语句中的?(占位符)。如下:
上面代码中的parameterMap中我们定义了两个参数id,empcode,而在下面的statement中的insert语句的第一个?就会被id的值所取代,第二个?的值为empcode的值。当然IBatisnet中并不是这样一种参数的定义方式,另外还有两种inline,named方式。
3、parameterClass
还是看上面的例子,如果我们没有对statement指定parameterMap,我们还可以通过指定parameterClass并使用inline parameter来完成同样的目的。如下:
parameterClass也可以直接写成Employees。
4、resultMap
通过设置resultMap,我们可以控制如何从查询的结果集中提取数据。比如我们只需要结果集中的某几列就可以来设置resultMap中的result来完成。
上面这个statement的查询结果就返回Employees的所有列,如果你只想返回其中几列,只需要更改resultMap就可以了。
5、resultClass
对于控制查询结果的返回值,我们也可以通过设置resultClass来代替resultMap。指定的resultClass将自动对应到查询结果的列。
Employees.cs应包括Id,EmpCode,EmpPassword,EmpName,EmpSex,EmpAge,EmpMail,EmpPhoneNo,Description,IsAdmin,IsDelete这些属性。
6、listClass
为了提供返回IList of Objects的能力,statement中可以使用强类型的自定义集合类来做为listClass Attribute的值。这个类必须实现System.Collections.CollectionBase。当然statement还需指定resultClass,使得DataMapper知道如何在集合中处理这种类型。使用方法如下:
7、cacheModel
如果你希望将查询结果集装入缓存,你可以通过设置statement的cacheModel来实现。首先需要配置缓存的模式,如下:
在statement中使用缓存:
8、extends
继承的属性也非常的有用,有很多SQL的操作的主题都一样,只是,Where子句不同,或Order By的内容不同等等,我们都可以将主体独立出来,作为BASE,然后写不同的条件或排序规则来继承它。如下:
OK,先写到这里。