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

<?xml version="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这个配置比较重要。

<?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 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.xml,IBatisNetDemo"/>
<sqlMap embedded="Map.SqlClient.Person.xml,IBatisNetDemo"/>
</sqlMaps>
</sqlMapConfig>

其次讲解xml文件 这里主要讲解两个xml文件,第一个Person.xml

<?xml version="1.0" encoding="utf-8" ?>

<sqlMap namespace="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语句和存储过程--> <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>

第二个xml文件 Dep.xml

<?xml version="1.0" encoding="utf-8" ?>

<sqlMap namespace="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>
<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; }
}
}
源码数据库下载地址:下载

ibatisnet框架使用说明的更多相关文章

  1. 分享基于.NET MVC+EF CodeFirst+IOC+EasyUI的框架设计

    **注:要做工,没什么时间,等有空时会上传到GIT,项目结构如上,简单的说一下: **支持IOC及多数据库等,各项目由MVC区域隔离: 主要使用基于接口与抽象类进行高度的抽象与接口隔离,与其它框架比较 ...

  2. Taffy自动化测试框架简介

    Taffy Taffy是基于nosetests的自动化测试框架. Taffy主要用来测试后台服务(包括且不限于Http, Dubbo/hessian, Webservice, Socket等类型接口) ...

  3. 自动化测试框架Taffy

    Taffy Taffy是基于nosetests的自动化测试框架. Taffy主要用来测试后台服务(包括且不限于Http, Dubbo/hessian, Webservice, Socket等类型接口) ...

  4. vs2017 + miniUI 后端框架使用

    vs2017 +  miniUI  后端框架使用 上miniUI官网直接下载框架.http://www.miniui.com/ 此框架使用说明很清楚. 2.1.vs2017创建安装miniUI后端框架 ...

  5. 基于Python3 + appium的Ui自动化测试框架

    UiAutoTest 一.概要 数据驱动的Ui自动化框架 二.环境要求 框架基于Python3 + unittest + appium 运行电脑需配置adb.aapt的环境变量,build_tools ...

  6. 两百条微信小程序跳坑指南(不定时更新)

    微信小程序联盟出品 跳坑textarea<二百二十三>不显示文本及textarea相关问题集合跳坑<二百一十三> background-image无法获取本地资源图片....跳 ...

  7. Android项目实战(三十四):蓝牙4.0 BLE 多设备连接

    最近项目有个需求,手机设备连接多个蓝牙4.0 设备 并获取这些设备的数据. 查询了很多资料终于实现,现进行总结. ------------------------------------------- ...

  8. asp.net MVC 统计在线人数功能实现

    今天开发一个设计一个统计在线人数的统计.实现方式是在MVC 中,用户次执行一个Action请求完成后,向数据表中插入一条用户心跳记录,统计在线人数则是根据该记录,30分钟内有记录的用户则为在线状态. ...

  9. 【项目总结】:怎样做一个牛逼的Team leader?

    随着ITOO高校云平台3.1项目的结束,我们各种各样的总结也被提上了日程. Java版本号的全部开发者和Donet版本号的全部开发者坐在一起进行了关于项目开发管理的头脑风暴,尽管我仅仅是Donet开发 ...

随机推荐

  1. 虚拟机克隆linux系统后需要做的网络设置

    1.vim /etc/sysconfig/network-scripts/ifcfg-eth0删除HWMAC地址行,然后重新分配静态IP/掩码/网关/DNS 2.vim /etc/udev/rules ...

  2. redis主从 哨兵

    entinel是redis高可用的解决方案,sentinel系统(N个sentinel实例,N >= 1)可以监视一个或者多个redis master服务,以及这些master服务的所有从服务: ...

  3. Enable-Migrations 在应用程序配置文件中找不到xx连接字符串

    在解决方案中有多个项目时,使用Enable-Migrations 命令进行数据迁移时,出现以下错误: 尝试在Enable-Migrations 命令中指定-projectName也不行,最后将要操作的 ...

  4. 外观模式-facade实现interface的方式(简单工厂+facade组合使用)

    Façade 外观模式 1.Façade实现为interface的具体过程 在Façade.java 接口 工厂 将构造方法私有  static 方法产生一个工厂 此时 客户端不知道 Façade的存 ...

  5. iOS 关于时间戳的一些细节

    最近遇到一个bug,在iPhone上获取当前的时间戳,没有问题,而用iPad来测试的时候,出现了时间戳不对.当时的代码 (需要精确到毫秒,所以*1000) NSTimeInterval t = [[N ...

  6. iOS_SN_push/pop转场动画封装和一般动画封装

    封装类中的方法: #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface AnimationE ...

  7. Reverse digits of an integer.

    class Solution { public: int reverse(int x) { ;//long 是怕中间过程溢出 <<,max=-min-){ ans=ans*+x%; x=x ...

  8. C和C++的学习过程总结

    总是被同学们问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复. 一家之言,欢迎拍砖哈. 1.可以考虑先学习C. 大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而 ...

  9. Android 之Activity切换动画效果

    在Activity中Android提供了overridePendingTransition(int enterAnim,int exitAnim)这个方法用于设置Activity之间切换的动画效果.o ...

  10. BZOJ 2661 连连看

    http://www.lydsy.com/JudgeOnline/problem.php?id=2661 思路:预处理出每个数字,然后若有x^2=y^2+z^2且z与y互质, s->x 1 ,0 ...