你的位置:首页 > ASP.net教程

[ASP.net教程]ibatisnet框架使用说明


ibatis配置文件主要包括三个 sqlmap.config,providers.config,database.config,注意所有文件生成操作都为嵌入的资源。其中database.config主要是配置数据库参数的一个config文件

<?"1.0" encoding="utf-8" ?><settings>  <!--  User application and configured property settings go here.-->  <!-- To run tests, create a file named DataBase.config     with your own value for datasource.     (don't included it in the solution and don't commit it in SVN)  -->  <add key="userid" value="sa" /> <!--数据库连接登录名 -->  <add key="password" value="sa" /><!--数据库连接密码 -->  <add key="database" value="person" /><!--数据库名字 -->  <add key="datasource" value="." /><!--服务器名-->  <add key="selectKey" value="select @@IDENTITY as value" />  <add key="directory" value="Maps" />  <add key="useStatementNamespaces" value="false" /></settings>

其次 providers.config 这个主要存放连接数据库的驱动程序 主要有 oracle sqlserver等等。
最后讲解 sqlmap.config这个配置比较重要。

<?"1.0" encoding="utf-8"?><sqlMapConfig "http://ibatis.apache.org/dataMapper" "http://www.w3.org/2001/" > <!-- Rem : If used via a DataAccess context, properties tag will be ignored <properties resource="../../database.config"/> --> <!--加载配置文件注意命名空间IBatisNetDemo--> <properties embedded="database.config, IBatisNetDemo"/> <settings>  <setting useStatementNamespaces="${useStatementNamespaces}"/>  <setting cacheModelsEnabled="true"/>  <setting validateSqlMap="false"/> </settings>  <!-- Optional if resource --> <providers embedded="providers.config,IBatisNetDemo"/>  <!--加载配置文件注意命名空间IBatisNetDemo--> <!-- ==== SqlClient configuration =========  --> <!-- Rem : If used via a DataAccess context, database tag will be ignored --> <database>  <!-- Optional ( default ) -->  <!--加载数据库连接字符串这里连接sqlserver数据库-->  <provider name="sqlServer1.1"/>  <dataSource name="test" connectionString="data source=${datasource};database=${database};user id=${userid};password=${password};connection reset=false;connection lifetime=5; min pool size=1; max pool size=50"/> </database> <sqlMaps>  <!-- user via embedded-->  <!--加载配置文件注意命名空间IBatisNetDemo-->  <sqlMap embedded="Map.SqlClient.Dep."/>  <sqlMap embedded="Map.SqlClient.Person."/> </sqlMaps></sqlMapConfig>

其次讲解

<?"1.0" encoding="utf-8" ?><sqlMap namespace="Person" "http://ibatis.apache.org/mapping"="http://www.w3.org/2001/" > <alias>  <typeAlias alias="Person" type="IBatisNetDemo.Domain.Person,IBatisNetDemo" /> <!--加载实体类,这里主要指下面要调用的实体类--> </alias> <resultMaps> <!--返回数据解析的实体-->  <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" />   <result property="depid" column="DepID" />  </resultMap> </resultMaps> <statements><!-- 这里主要写sql语句和存储过程-->  <select id="SelectPersonByDepId" resultMap="SelectAllResult">   select   PER_ID,   PER_FIRST_NAME,   PER_LAST_NAME,   PER_BIRTH_DATE,   PER_WEIGHT_KG,   PER_HEIGHT_M,   DepID   from PERSON where DepID=#DepID#  </select>  <select id="SelectAllPerson" resultMap="SelectAllResult">   select   PER_ID,   PER_FIRST_NAME,   PER_LAST_NAME,   PER_BIRTH_DATE,   PER_WEIGHT_KG,   PER_HEIGHT_M,   DepID   from PERSON  </select>  <select id="SelectByPersonId" resultMap="SelectAllResult" parameterClass="Hashtable">   select   PER_ID,   PER_FIRST_NAME,   PER_LAST_NAME,   PER_BIRTH_DATE,   PER_WEIGHT_KG,   PER_HEIGHT_M,   DepID   from PERSON   <dynamic prepend="where"><!--动态添加sql语句条件-->    <isParameterPresent>     <isNotEmpty prepend="and" property="id" >      PER_ID = '$id$'     </isNotEmpty>     <isNotEmpty prepend="and" property="name" >      PER_FIRST_NAME LIKE '%$name$%'     </isNotEmpty>    </isParameterPresent>   </dynamic>  </select>  <insert id="InsertPerson" parameterclass="Person" >   <selectKey property="Id" type="post" resultClass="int">    ${selectKey}   </selectKey>   insert into Person   ( PER_FIRST_NAME,   PER_LAST_NAME,   PER_BIRTH_DATE,   PER_WEIGHT_KG,   PER_HEIGHT_M)   values   (#FirstName#,#LastName#,#BirthDate#, #WeightInKilograms#, #HeightInMeters#)  </insert>  <update id="UpdatePerson"          parameterclass="Person">   <![CDATA[ update Person set   PER_FIRST_NAME =#FirstName#,   PER_LAST_NAME =#LastName#,   PER_BIRTH_DATE =#BirthDate#,   PER_WEIGHT_KG=#WeightInKilograms#,   PER_HEIGHT_M=#HeightInMeters#   where   PER_ID = #Id# ]]>  </update>  <delete id="DeletePerson" parameterclass="Person">   delete from Person   where   PER_ID = #Id#  </delete> </statements></sqlMap>

第二个

<?"1.0" encoding="utf-8" ?><sqlMap namespace="Dep" "http://ibatis.apache.org/mapping"="http://www.w3.org/2001/" > <alias>  <typeAlias alias="Dep" type="IBatisNetDemo.Domain.Dep,IBatisNetDemo" />  </alias> <resultMaps>  <resultMap id="SelectAllResultDep" class="Dep">   <result property="DepId" column="DepID" />   <result property="DepName" column="DepName" />   <result property="list" column="DepID" select="SelectPersonByDepId" /><!--配置一对多关系,这里的select选择id为person.select id="SelectDepById" resultMap="SelectAllResultDep">   select DepID,DepName from Dep where DepId=#DepID#  </select> </statements></sqlMap>

其中一个为部门,一个为人员,两个之间关系为一对多的关系

配置文件讲解完过后我们来讲解怎么调用这个框架,首先要引用IBatisNet.Common.dll,IBatisNet.DataMapper.dll 两个文件

其实加载sqlmap对象

代码如下:

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;using System.Text;using IBatisNet.DataMapper;using IBatisNet.DataMapper.Configuration;using IBatisNetDemo.Domain;namespace IBatisNetDemo{  public class BaseDao<T> where T : class  {    private ISqlMapper sqlMap;    //private string fileName = "sqlMap.Config";    public BaseDao()    {      Assembly assembly = Assembly.Load("IBatisNetDemo");      Stream stream = assembly.GetManifestResourceStream("IBatisNetDemo.sqlmap.config");      DomSqlMapBuilder builder = new DomSqlMapBuilder();      sqlMap = builder.Configure(stream);    }    public ISqlMapper SqlMap    {      get      {        return sqlMap;      }    }    public IList<T> GetAllList(string key)    {            return SqlMap.QueryForList<T>(key, null);          }    public T GetModel(string key, object id)    {      return SqlMap.QueryForObject<T>(key, id);    }    public object Insert(string key, T model)    {      object o = null;      o = sqlMap.Insert(key, model);      return o;    }  }}
源码数据库下载地址:下载