前段时间写了一篇关于配置文件的,由于最近太忙了,一直没接着往下写,现在抽出时间来继续写IBatisNet1.5学习及使用经历. 
       通过上一篇文章,大概了解了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语句中的?(占位符)。如下:

学习IBatisNet1.5 -- 映射文件--Statements<parameterMaps>
学习IBatisNet1.5 -- 映射文件--Statements    
<parameterMap id="simpleinsert" class="Employees">
学习IBatisNet1.5 -- 映射文件--Statements        
<parameter property="id"/>
学习IBatisNet1.5 -- 映射文件--Statements        
<parameter property="empcode"/>
学习IBatisNet1.5 -- 映射文件--Statements    
</parameterMap>
学习IBatisNet1.5 -- 映射文件--Statements
</parameterMaps> 
学习IBatisNet1.5 -- 映射文件--Statements
学习IBatisNet1.5 -- 映射文件--Statements
<statement id="insertEmployee" parameterMap="simpleinsert">
学习IBatisNet1.5 -- 映射文件--Statements      insert into Employees (Id, EmpCode) values (?,?);
学习IBatisNet1.5 -- 映射文件--Statements
</statement>

上面代码中的parameterMap中我们定义了两个参数id,empcode,而在下面的statement中的insert语句的第一个?就 会被id的值所取代,第二个?的值为empcode的值。当然IBatisnet中并不是这样一种参数的定义方式,另外还有两种inline,named 方式。

3、parameterClass
      还是看上面的例子,如果我们没有对statement指定parameterMap,我们还可以通过指定parameterClass并使用inline parameter来完成同样的目的。如下:

学习IBatisNet1.5 -- 映射文件--Statements<statement id="insertEmployee" parameterClass="OPS.Domain.Employees,OPS.Domain">
学习IBatisNet1.5 -- 映射文件--Statements      insert into Employees (Id, EmpCode) values (#Id#,#EmpCode#);
学习IBatisNet1.5 -- 映射文件--Statements
</statement>

parameterClass也可以直接写成Employees。

学习IBatisNet1.5 -- 映射文件--Statements<statement id="insertEmployee" parameterClass="Employees">
学习IBatisNet1.5 -- 映射文件--Statements      insert into Employees (Id, EmpCode) values (#Id#,#EmpCode#);
学习IBatisNet1.5 -- 映射文件--Statements
</statement>

4、resultMap
      通过设置resultMap,我们可以控制如何从查询的结果集中提取数据。比如我们只需要结果集中的某几列就可以来设置resultMap中的result来完成。

学习IBatisNet1.5 -- 映射文件--Statements<resultMaps>
学习IBatisNet1.5 -- 映射文件--Statements        
<resultMap id="SelectResult" class="Employees">
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="Id" column="id" />
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="EmpCode" column="empcode" />
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="EmpPassword" column="emppassword" />
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="EmpName" column="empname" />
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="EmpSex" column="empsex" />
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="EmpAge" column="empage" />
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="EmpMail" column="empmail" />
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="EmpPhoneNo" column="empphoneno" />
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="Description" column="description" />
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="IsAdmin" column="isadmin" />
学习IBatisNet1.5 -- 映射文件--Statements            
<result property="IsDelete" column="isdelete" />
学习IBatisNet1.5 -- 映射文件--Statements        
</resultMap>
学习IBatisNet1.5 -- 映射文件--Statements
</resultMaps>

 

学习IBatisNet1.5 -- 映射文件--Statements<statement id="SelectEmployees" resultMap="Employees">
学习IBatisNet1.5 -- 映射文件--Statements      select * from Employees
学习IBatisNet1.5 -- 映射文件--Statements
</statement>

上面这个statement的查询结果就返回Employees的所有列,如果你只想返回其中几列,只需要更改resultMap就可以了。

5、resultClass
      对于控制查询结果的返回值,我们也可以通过设置resultClass来代替resultMap。指定的resultClass将自动对应到查询结果的列。

学习IBatisNet1.5 -- 映射文件--Statements<select id="SelectEmployees" parameterClass="int" resultClass="Employees">
学习IBatisNet1.5 -- 映射文件--Statements            Select 
学习IBatisNet1.5 -- 映射文件--Statements                  id as Id,
学习IBatisNet1.5 -- 映射文件--Statements                  empcode as EmpCode,
学习IBatisNet1.5 -- 映射文件--Statements                  emppassword as EmpPassword,
学习IBatisNet1.5 -- 映射文件--Statements                  empname as EmpName,
学习IBatisNet1.5 -- 映射文件--Statements                  empsex as EmpSex,
学习IBatisNet1.5 -- 映射文件--Statements                  empage as EmpAge,
学习IBatisNet1.5 -- 映射文件--Statements                  empmail as EmpMail,
学习IBatisNet1.5 -- 映射文件--Statements                  empphoneno as EmpPhoneNo,
学习IBatisNet1.5 -- 映射文件--Statements                  description as Description,
学习IBatisNet1.5 -- 映射文件--Statements                  isadmin as IsAdmin,
学习IBatisNet1.5 -- 映射文件--Statements                  isdelete as IsDelete
学习IBatisNet1.5 -- 映射文件--Statements            From Employees
学习IBatisNet1.5 -- 映射文件--Statements
</select>

 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知道如何在集合中处理这种类型。使用方法如下:

 

学习IBatisNet1.5 -- 映射文件--Statements<select id="SelectEmployees" parameterClass="int" resultClass="Employess" listClass="EmployeeCollection">
学习IBatisNet1.5 -- 映射文件--Statements            Select 
学习IBatisNet1.5 -- 映射文件--Statements                  id 
as Id,
学习IBatisNet1.5 -- 映射文件--Statements                  empcode 
as EmpCode,
学习IBatisNet1.5 -- 映射文件--Statements                  emppassword 
as EmpPassword,
学习IBatisNet1.5 -- 映射文件--Statements                  empname 
as EmpName,
学习IBatisNet1.5 -- 映射文件--Statements                  empsex 
as EmpSex,
学习IBatisNet1.5 -- 映射文件--Statements                  empage 
as EmpAge,
学习IBatisNet1.5 -- 映射文件--Statements                  empmail 
as EmpMail,
学习IBatisNet1.5 -- 映射文件--Statements                  empphoneno 
as EmpPhoneNo,
学习IBatisNet1.5 -- 映射文件--Statements                  description 
as Description,
学习IBatisNet1.5 -- 映射文件--Statements                  isadmin 
as IsAdmin,
学习IBatisNet1.5 -- 映射文件--Statements                  isdelete 
as IsDelete
学习IBatisNet1.5 -- 映射文件--Statements            From Employees
学习IBatisNet1.5 -- 映射文件--Statements
</select>


7、cacheModel
      如果你希望将查询结果集装入缓存,你可以通过设置statement的cacheModel来实现。首先需要配置缓存的模式,如下:

学习IBatisNet1.5 -- 映射文件--Statements<cacheModel id="employee-cache" implementation="LRU">
学习IBatisNet1.5 -- 映射文件--Statements  
<flushInterval hours="24"/>
学习IBatisNet1.5 -- 映射文件--Statements  
<flushOnExecute statement="insertEmployee"/>
学习IBatisNet1.5 -- 映射文件--Statements  
<flushOnExecute statement="updateEmployee"/>
学习IBatisNet1.5 -- 映射文件--Statements  
<flushOnExecute statement="deleteEmployee"/>
学习IBatisNet1.5 -- 映射文件--Statements  
<property name="size" value="1000" />
学习IBatisNet1.5 -- 映射文件--Statements
</cacheModel>
学习IBatisNet1.5 -- 映射文件--Statements
关于缓存模式,后面会专门介绍。
在statement中使用缓存:
学习IBatisNet1.5 -- 映射文件--Statements<statement id="selectAllEmployees" cacheModel="employee-cache">
学习IBatisNet1.5 -- 映射文件--Statements  select * from Employees
学习IBatisNet1.5 -- 映射文件--Statements
</statement>

8、extends
      继承的属性也非常的有用,有很多SQL的操作的主题都一样,只是,Where子句不同,或Order By的内容不同等等,我们都可以将主体独立出来,作为BASE,然后写不同的条件或排序规则来继承它。如下:
学习IBatisNet1.5 -- 映射文件--Statements    <select id="SelectEmployees" parameterClass="int" resultMap="SelectResult">
学习IBatisNet1.5 -- 映射文件--Statements            Select 
学习IBatisNet1.5 -- 映射文件--Statements                  id,
学习IBatisNet1.5 -- 映射文件--Statements                  empcode,
学习IBatisNet1.5 -- 映射文件--Statements                  emppassword,
学习IBatisNet1.5 -- 映射文件--Statements                  empname,
学习IBatisNet1.5 -- 映射文件--Statements                  empsex,
学习IBatisNet1.5 -- 映射文件--Statements                  empage,
学习IBatisNet1.5 -- 映射文件--Statements                  empmail,
学习IBatisNet1.5 -- 映射文件--Statements                  empphoneno,
学习IBatisNet1.5 -- 映射文件--Statements                  description,
学习IBatisNet1.5 -- 映射文件--Statements                  isadmin,
学习IBatisNet1.5 -- 映射文件--Statements                  isdelete
学习IBatisNet1.5 -- 映射文件--Statements            From Employees
学习IBatisNet1.5 -- 映射文件--Statements        
</select>
学习IBatisNet1.5 -- 映射文件--Statements
学习IBatisNet1.5 -- 映射文件--Statements    
<!--员工列表-->
学习IBatisNet1.5 -- 映射文件--Statements    
<select id="EmployeeList" parameterClass="int" resultMap="SelectResult" extends="SelectEmployees">
学习IBatisNet1.5 -- 映射文件--Statements      Where isdelete='n'
学习IBatisNet1.5 -- 映射文件--Statements    
</select>
学习IBatisNet1.5 -- 映射文件--Statements
学习IBatisNet1.5 -- 映射文件--Statements    
<!--员工明细-->
学习IBatisNet1.5 -- 映射文件--Statements    
<select id="EmployeeDetail" parameterClass="int" resultMap="SelectResult" extends="SelectEmployees">
学习IBatisNet1.5 -- 映射文件--Statements      Where id=#Id#
学习IBatisNet1.5 -- 映射文件--Statements    
</select>
学习IBatisNet1.5 -- 映射文件--Statements
学习IBatisNet1.5 -- 映射文件--Statements    
<!--登录验证-->
学习IBatisNet1.5 -- 映射文件--Statements    
<select id="Login" parameterClass="int" resultMap="SelectResult" extends="SelectEmployees">
学习IBatisNet1.5 -- 映射文件--Statements      Where empcode=#EmpCode# and emppassword=#EmpPassword# and isdelete='n'
学习IBatisNet1.5 -- 映射文件--Statements    
</select>
学习IBatisNet1.5 -- 映射文件--Statements
学习IBatisNet1.5 -- 映射文件--Statements    
<!--判断员工编号是否重复-->
学习IBatisNet1.5 -- 映射文件--Statements    
<select id="CheckEmpCode" parameterClass="String" resultMap="SelectResult" extends="SelectEmployees">
学习IBatisNet1.5 -- 映射文件--Statements      Where empcode=#EmpCode# and isdelete='n'
学习IBatisNet1.5 -- 映射文件--Statements    
</select>

OK,先写到这里。

相关文章:

  • 2022-12-23
  • 2022-02-17
  • 2022-01-30
  • 2022-02-18
  • 2022-12-23
  • 2022-12-23
  • 2021-08-24
  • 2022-12-23
猜你喜欢
  • 2022-02-17
  • 2021-06-03
  • 2021-10-21
  • 2022-01-22
  • 2021-12-26
相关资源
相似解决方案