ibatis配置文件主要包括三个 sqlmap.config,PRoviders.config,database.config,注意所有文件生成操作都为嵌入的资源。其中database.config主要是配置数据库参数的一个config文件
<?xmlversion="1.0"encoding="utf-8"?>
<settings>
<!-- Userapplicationand configured property settings go here.-->
<!--To run tests, create a file named DataBase.config
with your own valuefordatasource.
(don't included it in the solution and don't commit itinSVN)-->
<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 这个主要存放连接数据库的驱动程序 主要有Oraclesqlserver等等。
最后讲解 sqlmap.config这个配置比较重要。
<?xml version="1.0"encoding="utf-8"?>
<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!--Rem : If used via a Dataaccesscontext, 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>
<!-- Optionalifresource -->
<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.xml,IBatisNetDemo"/>
<sqlMap embedded="Map.SqlClient.Person.xml,IBatisNetDemo"/>
</sqlMaps>
</sqlMapConfig>
其次讲解xml文件 这里主要讲解两个xml文件,第一个Person.xml
<?xml version="1.0"encoding="utf-8"?>
<sqlMapnamespace="Person"xmlns="http://ibatis.apache.org/mapping"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<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语句和存储过程-->
<selectid="SelectPersonByDepId"resultMap="SelectAllResult">selectPER_ID,
PER_FIRST_NAME,
PER_LAST_NAME,
PER_BIRTH_DATE,
PER_WEIGHT_KG,
PER_HEIGHT_M,
DepIDfromPERSONwhereDepID=#DepID#</select>
<selectid="SelectAllPerson"resultMap="SelectAllResult">selectPER_ID,
PER_FIRST_NAME,
PER_LAST_NAME,
PER_BIRTH_DATE,
PER_WEIGHT_KG,
PER_HEIGHT_M,
DepIDfromPERSON</select>
<selectid="SelectByPersonId"resultMap="SelectAllResult"parameterClass="Hashtable">selectPER_ID,
PER_FIRST_NAME,
PER_LAST_NAME,
PER_BIRTH_DATE,
PER_WEIGHT_KG,
PER_HEIGHT_M,
DepIDfromPERSON<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 PersonsetPER_FIRST_NAME=#FirstName#,
PER_LAST_NAME=#LastName#,
PER_BIRTH_DATE=#BirthDate#,
PER_WEIGHT_KG=#WeightInKilograms#,
PER_HEIGHT_M=#HeightInMeters#wherePER_ID= #Id#]]>
</update>
<delete id="DeletePerson"parameterclass="Person">deletefromPersonwherePER_ID=#Id#</delete>
</statements>
</sqlMap>
第二个xml文件 Dep.xml
<?xml version="1.0"encoding="utf-8"?>
<sqlMapnamespace="Dep"xmlns="http://ibatis.apache.org/mapping"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<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.xml文件的id,注意这里id都是公用-->
</resultMap>
</resultMaps>
<statements>
<selectid="SelectDepById"resultMap="SelectAllResultDep">selectDepID,DepNamefromDepwhereDepId=#DepID#</select>
</statements>
</sqlMap>
其中一个为部门,一个为人员,两个之间关系为一对多的关系
配置文件讲解完过后我们来讲解怎么调用这个框架,首先要引用IBatisNet.Common.dll,IBatisNet.DataMapper.dll 两个文件
其实加载sqlmap对象
代码如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Reflection;usingSystem.Text;usingIBatisNet.DataMapper;usingIBatisNet.DataMapper.Configuration;usingIBatisNetDemo.Domain;namespaceIBatisNetDemo
{publicclassBaseDao<T>whereT :class{privateISqlMapper sqlMap;//private string fileName = "sqlMap.Config";publicBaseDao()
{
Assembly assembly= Assembly.Load("IBatisNetDemo");
Stream stream= assembly.GetManifestResourceStream("IBatisNetDemo.sqlmap.config");
DomSqlMapBuilder builder=newDomSqlMapBuilder();
sqlMap=builder.Configure(stream);
}publicISqlMapper SqlMap
{get{returnsqlMap;
}
}publicIList<T> GetAllList(stringkey)
{returnSqlMap.QueryForList<T>(key,null);
}publicT GetModel(stringkey,objectid)
{returnSqlMap.QueryForObject<T>(key, id);
}publicobjectInsert(stringkey, T model)
{objecto =null;
o=sqlMap.Insert(key, model);returno;
}
}
}
源码数据库下载地址:下载