前段时间写了一篇关于配置文件的,由于最近太忙了,一直没接着往下写,现在抽出时间来继续写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,先写到这里。

相关文章:

  • 2021-12-07
  • 2021-11-28
  • 2021-08-07
  • 2021-09-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-17
  • 2021-06-03
  • 2021-10-21
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案