简介:ibatis 一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目,到后面发展的版本叫MyBatis但都是指的同一个东西。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架,渐渐的也把这种模式转移到了net。相对NHibernate等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现。

下载地址:http://code.google.com/p/mybatisnet/downloads/list?can=3

本文开发Demo环境:IBatis.DataMapper.1.6.2.bin + MsSql 2005 + Vs 2010

使用步骤:

在使用之前,为大家推荐一款代码生成器,也是我专为此框架写的一款代码生成器,生成iBatis的Map配置文件,这样一来,用户不用开任何关于框架的说明文档,即可使用此框架。代码生成器(CodeHelper)下载地址与说明:

http://www.cnblogs.com/stone_w/archive/2011/09/26/2192010.html

第一步:创建数据库与新建网站项目。

创建数据库与表的T-sql:

/*

* iBatisDemo Sql

* Stone (QQ:1370569)

* Date:2011.09.26

*/

create database OrmDB

go

use OrmDB

go

create table People

(

id int primary key identity,

[name] varchar(250),

age int

)

go

打开vs开发工具,新建网站项目。

第二步:为网站添加iBatis框架支持。

为网站添加引用或者直接把下载的iBatis框架中的IBatisNet.Common.dll和IBatisNet.DataMapper.dll复制到Bin目录下。

第三步:添加iBatis配置文件。

iBatis的配置文件只用三种,也必须要有这三种:

1.providers.config[文件名不能修改]此文件为数据库开发商提供的驱动配置集合,是固定不变的,无需修改与配置,复制文件到网站的根目录,代码如下:

providers.config

<?xml version="1.0" encoding="utf-8"?><providersxmlns="http://ibatis.apache.org/providers"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <clear/>    <provider          name="sqlServer1.0"          description="Microsoft SQL Server, provider V1.0.3300.0 in framework .NET V1.0"          enabled="false"          assemblyName="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.SqlClient.SqlConnection"          commandClass="System.Data.SqlClient.SqlCommand"          parameterClass="System.Data.SqlClient.SqlParameter"          parameterDbTypeClass="System.Data.SqlDbType"          parameterDbTypeProperty="SqlDbType"          dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"          commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"          usePositionalParameters="false"          useParameterPrefixInSql="true"          useParameterPrefixInParameter="true"          parameterPrefix="@"          allowMARS="false"  />    <provider          name="sqlServer1.1"          description="Microsoft SQL Server, provider V1.0.5000.0 in framework .NET V1.1"          enabled="false"          assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"          connectionClass="System.Data.SqlClient.SqlConnection"          commandClass="System.Data.SqlClient.SqlCommand"          parameterClass="System.Data.SqlClient.SqlParameter"          parameterDbTypeClass="System.Data.SqlDbType"          parameterDbTypeProperty="SqlDbType"          dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"          commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"          usePositionalParameters="false"          useParameterPrefixInSql="true"          useParameterPrefixInParameter="true"          parameterPrefix="@"          allowMARS="false"  />    <provider        name="sqlServer2.0"        enabled="true"        description="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0"        assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"        connectionClass="System.Data.SqlClient.SqlConnection"        commandClass="System.Data.SqlClient.SqlCommand"        parameterClass="System.Data.SqlClient.SqlParameter"        parameterDbTypeClass="System.Data.SqlDbType"        parameterDbTypeProperty="SqlDbType"        dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"        commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"        usePositionalParameters = "false"        useParameterPrefixInSql = "true"        useParameterPrefixInParameter = "true"        parameterPrefix="@"        allowMARS="false"    />    <provider       name="sqlServer2005"       enabled="false"       description="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0"       assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"       connectionClass="System.Data.SqlClient.SqlConnection"       commandClass="System.Data.SqlClient.SqlCommand"       parameterClass="System.Data.SqlClient.SqlParameter"       parameterDbTypeClass="System.Data.SqlDbType"       parameterDbTypeProperty="SqlDbType"       dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"       commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"       usePositionalParameters = "false"       useParameterPrefixInSql = "true"       useParameterPrefixInParameter = "true"       parameterPrefix="@"       allowMARS="true"    />    <provider name="OleDb1.1"        description="OleDb, provider V1.0.5000.0 in framework .NET V1.1"        enabled="false"        assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"        connectionClass="System.Data.OleDb.OleDbConnection"        commandClass="System.Data.OleDb.OleDbCommand"        parameterClass="System.Data.OleDb.OleDbParameter"        parameterDbTypeClass="System.Data.OleDb.OleDbType"        parameterDbTypeProperty="OleDbType"        dataAdapterClass="System.Data.OleDb.OleDbDataAdapter"        commandBuilderClass="System.Data.OleDb.OleDbCommandBuilder"        usePositionalParameters="true"        useParameterPrefixInSql="false"        useParameterPrefixInParameter="false"        parameterPrefix=""        allowMARS="false"    />    <provider name="OleDb2.0"      description="OleDb, provider V2.0.0.0 in framework .NET V2"      enabled="false"      assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"      connectionClass="System.Data.OleDb.OleDbConnection"      commandClass="System.Data.OleDb.OleDbCommand"      parameterClass="System.Data.OleDb.OleDbParameter"      parameterDbTypeClass="System.Data.OleDb.OleDbType"      parameterDbTypeProperty="OleDbType"      dataAdapterClass="System.Data.OleDb.OleDbDataAdapter"      commandBuilderClass="System.Data.OleDb.OleDbCommandBuilder"      usePositionalParameters="true"      useParameterPrefixInSql="false"      useParameterPrefixInParameter="false"      parameterPrefix=""      allowMARS="false"    />    <provider      name="Odbc1.1"      description="Odbc, provider V1.0.5000.0 in framework .NET V1.1"      enabled="false"      assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"      connectionClass="System.Data.Odbc.OdbcConnection"      commandClass="System.Data.Odbc.OdbcCommand"      parameterClass="System.Data.Odbc.OdbcParameter"      parameterDbTypeClass="System.Data.Odbc.OdbcType"      parameterDbTypeProperty="OdbcType"      dataAdapterClass="System.Data.Odbc.OdbcDataAdapter"      commandBuilderClass="System.Data.Odbc.OdbcCommandBuilder"      usePositionalParameters="true"      useParameterPrefixInSql="false"      useParameterPrefixInParameter="false"      parameterPrefix="@"      allowMARS="false"    />    <provider      name="Odbc2.0"      description="Odbc, provider V2.0.0.0 in framework .NET V2"      enabled="false"      assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"      connectionClass="System.Data.Odbc.OdbcConnection"      commandClass="System.Data.Odbc.OdbcCommand"      parameterClass="System.Data.Odbc.OdbcParameter"      parameterDbTypeClass="System.Data.Odbc.OdbcType"      parameterDbTypeProperty="OdbcType"      dataAdapterClass="System.Data.Odbc.OdbcDataAdapter"      commandBuilderClass="System.Data.Odbc.OdbcCommandBuilder"      usePositionalParameters="true"      useParameterPrefixInSql="false"      useParameterPrefixInParameter="false"      parameterPrefix="@"      allowMARS="false"  />    <provider      name="oracle9.2"      description="Oracle, Oracle provider V9.2.0.401"      enabled="false"      assemblyName="Oracle.DataAccess, Version=9.2.0.401, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection"      commandClass="Oracle.DataAccess.Client.OracleCommand"      parameterClass="Oracle.DataAccess.Client.OracleParameter"      parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType"      parameterDbTypeProperty="OracleDbType"      dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter"      commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder"      usePositionalParameters="false"      useParameterPrefixInSql="true"      useParameterPrefixInParameter="false"      parameterPrefix=":"      useDeriveParameters="false"      allowMARS="false"  />    <provider      name="oracle10.1"      description="Oracle, oracle provider V10.1.0.301"      enabled="false"      assemblyName="Oracle.DataAccess, Version=10.1.0.301, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection"      commandClass="Oracle.DataAccess.Client.OracleCommand"      parameterClass="Oracle.DataAccess.Client.OracleParameter"      parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType"      parameterDbTypeProperty="OracleDbType"      dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter"      commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder"      usePositionalParameters="true"      useParameterPrefixInSql="true"      useParameterPrefixInParameter="true"      parameterPrefix=":"      useDeriveParameters="false"      allowMARS="false"  />    <provider      name="oracleClient1.0"      description="Oracle, Microsoft provider V1.0.5000.0"      enabled="false"      assemblyName="System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.OracleClient.OracleConnection"      commandClass="System.Data.OracleClient.OracleCommand"      parameterClass="System.Data.OracleClient.OracleParameter"      parameterDbTypeClass="System.Data.OracleClient.OracleType"      parameterDbTypeProperty="OracleType"      dataAdapterClass="System.Data.OracleClient.OracleDataAdapter"      commandBuilderClass="System.Data.OracleClient.OracleCommandBuilder"      usePositionalParameters="false"      useParameterPrefixInSql="true"      useParameterPrefixInParameter="false"      parameterPrefix=":"      allowMARS="false"  />    <provider      name="ByteFx"      description="MySQL, ByteFx provider V0.7.6.15073"      enabled="false"      assemblyName="ByteFX.MySqlClient, Version=0.7.6.15073, Culture=neutral, PublicKeyToken=f2fef6fed1732fc1" connectionClass="ByteFX.Data.MySqlClient.MySqlConnection"      commandClass="ByteFX.Data.MySqlClient.MySqlCommand"      parameterClass="ByteFX.Data.MySqlClient.MySqlParameter"      parameterDbTypeClass="ByteFX.Data.MySqlClient.MySqlDbType"      parameterDbTypeProperty="MySqlDbType"      dataAdapterClass="ByteFX.Data.MySqlClient.MySqlDataAdapter"      commandBuilderClass="ByteFX.Data.MySqlClient.MySqlCommandBuilder"      usePositionalParameters="false"      useParameterPrefixInSql="true"      useParameterPrefixInParameter="true"      parameterPrefix="@"      allowMARS="false"  />    <provider      name="MySql"      description="MySQL, MySQL provider 1.0.7.30072"      enabled="false"      assemblyName="MySql.Data, Version=1.0.7.30072, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionClass="MySql.Data.MySqlClient.MySqlConnection"      commandClass="MySql.Data.MySqlClient.MySqlCommand"      parameterClass="MySql.Data.MySqlClient.MySqlParameter"      parameterDbTypeClass="MySql.Data.MySqlClient.MySqlDbType"      parameterDbTypeProperty="MySqlDbType"      dataAdapterClass="MySql.Data.MySqlClient.MySqlDataAdapter"      commandBuilderClass="MySql.Data.MySqlClient.MySqlCommandBuilder"      usePositionalParameters="false"      useParameterPrefixInSql="true"      useParameterPrefixInParameter="true"      parameterPrefix="?"      allowMARS="false"  />    <provider name="SQLite3 Finisar"      description="SQLite, SQLite.NET provider V0.21.1869.3794"      enabled="false"      assemblyName="SQLite.NET, Version=0.21.1869.3794, Culture=neutral, PublicKeyToken=c273bd375e695f9c"      connectionClass="Finisar.SQLite.SQLiteConnection"      commandClass="Finisar.SQLite.SQLiteCommand"      parameterClass="Finisar.SQLite.SQLiteParameter"      parameterDbTypeClass="System.Data.DbType, System.Data"      parameterDbTypeProperty="DbType"      dataAdapterClass="Finisar.SQLite.SQLiteDataAdapter"      commandBuilderClass="Finisar.SQLite.SQLiteCommandBuilder"      usePositionalParameters="false"      useParameterPrefixInSql="true"      useParameterPrefixInParameter="true"      parameterPrefix="@"      setDbParameterPrecision="false"      setDbParameterScale="false"      allowMARS="false"  />    <provider name="SQLite3"      description="SQLite, SQLite.NET provider V1.0.43.0"      enabled="false"      assemblyName="System.Data.SQLite, Version=1.0.43.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"      connectionClass="System.Data.SQLite.SQLiteConnection"      commandClass="System.Data.SQLite.SQLiteCommand"      parameterClass="System.Data.SQLite.SQLiteParameter"      parameterDbTypeClass="System.Data.SQLite.SQLiteType"      parameterDbTypeProperty="DbType"      dataAdapterClass="System.Data.SQLite.SQLiteDataAdapter"      commandBuilderClass="System.Data.SQLite.SQLiteCommandBuilder"      usePositionalParameters="false"      useParameterPrefixInSql="true"      useParameterPrefixInParameter="true"      parameterPrefix="@"      setDbParameterPrecision="false"      setDbParameterScale="false"      allowMARS="false"  />    <provider      name="Firebird1.7"      description="Firebird, Firebird SQL .NET provider V1.7.0.33200"      enabled="false"      assemblyName="FirebirdSql.Data.Firebird, Version=1.7.0.33200, Culture=neutral, PublicKeyToken=fa843d180294369d" connectionClass="FirebirdSql.Data.Firebird.FbConnection"      commandClass="FirebirdSql.Data.Firebird.FbCommand"      parameterClass="FirebirdSql.Data.Firebird.FbParameter"      parameterDbTypeClass="FirebirdSql.Data.Firebird.FbDbType"      parameterDbTypeProperty="FbDbType"      dataAdapterClass="FirebirdSql.Data.Firebird.FbDataAdapter"      commandBuilderClass="FirebirdSql.Data.Firebird.FbCommandBuilder"      usePositionalParameters="false"      useParameterPrefixInSql="true"      useParameterPrefixInParameter="true"      parameterPrefix="@"      allowMARS="false"  />    <provider      name="PostgreSql0.99.1.0"      description="PostgreSql, Npgsql provider V0.99.1.0"      enabled="false"      assemblyName="Npgsql, Version=0.99.1.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"      connectionClass="Npgsql.NpgsqlConnection"      commandClass="Npgsql.NpgsqlCommand"      parameterClass="Npgsql.NpgsqlParameter"      parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType"      parameterDbTypeProperty="NpgsqlDbType"      dataAdapterClass="Npgsql.NpgsqlDataAdapter"      commandBuilderClass="Npgsql.NpgsqlCommandBuilder"      usePositionalParameters="false"      useParameterPrefixInSql="true"      useParameterPrefixInParameter="true"      parameterPrefix=":"      allowMARS="true"  />    <provider      name="iDb2.10"      description="IBM DB2 Provider, V 10.0"      enabled="false"      assemblyName="IBM.Data.DB2.iSeries, Version=10.0.0.0,Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26, Custom=null" connectionClass="IBM.Data.DB2.iSeries.iDB2Connection"      commandClass="IBM.Data.DB2.iSeries.iDB2Command"      parameterClass="IBM.Data.DB2.iSeries.iDB2Parameter"      parameterDbTypeClass="IBM.Data.DB2.iSeries.iDB2DbType"      parameterDbTypeProperty="iDB2DbType"      dataAdapterClass="IBM.Data.DB2.iSeries.iDB2DataAdapter"      commandBuilderClass="IBM.Data.DB2.iSeries.iDB2CommandBuilder"      usePositionalParameters="true"      useParameterPrefixInSql="false"      useParameterPrefixInParameter="false"      parameterPrefix=""      allowMARS="false"  />    <provider      name="Informix"      description="Informix NET Provider, 2.81.0.0"      enabled="false"      assemblyName="IBM.Data.Informix, Version=2.81.0.0, Culture=neutral, PublicKeyToken=7c307b91aa13d208"      connectionClass="IBM.Data.Informix.IfxConnection"      commandClass="IBM.Data.Informix.IfxCommand"      parameterClass="IBM.Data.Informix.IfxParameter"      parameterDbTypeClass="IBM.Data.Informix.IfxType"      parameterDbTypeProperty="IfxType"      dataAdapterClass="IBM.Data.Informix.IfxDataAdapter"      commandBuilderClass="IBM.Data.Informix.IfxCommandBuilder"      usePositionalParameters = "true"      useParameterPrefixInSql = "false"      useParameterPrefixInParameter = "false"      useDeriveParameters="false"      allowMARS="false"    /></providers>

2.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">

<settings>

<!--/是否使用Satement命名空间,这里的命名空间指的是映射文件中sqlMap节点的namespace属性,默认是false-->

<setting useStatementNamespaces="false"/>

<!--是否启用DataMapper的缓存机制,针对全部的SqlMap,默认是true-->

<setting cacheModelsEnabled="true"/>

<!--是否启用SqlMapConfig.xsd schema验证映射文件,默认是false-->

<setting validateSqlMap="false"/>

</settings>

<!--配置数据驱动提供类配置文件的路径和文件名-->

<providers resource="providers.config"/>

<!--如果在providers.config文件中指定了默认的数据库驱动,那么provider节点就不需要设置了,它的作用是在换数据库驱动时不需要修改providers.config文件。datasource节点用于指定ADO.NET Connection String.-->

<database>

<provider name="sqlServer2.0"/>

<dataSource name="mydb" connectionString="data source=127.0.0.1;database=MyBatisDB;user id=sa;password=sa;"/>

</database>

<!--指定映射的文件的位置-->

<sqlMaps>

<sqlMap resource="Maps/PeopleMap.xml"/>

</sqlMaps>

</sqlMapConfig>

3.每个实体类(表)都有一个单独的配置文件类,类型为xml。代码生成器也是生成这个类的,这样一来,用户就可以几秒钟创建开发一个iBatis项目了,实体类的配置文件格式如下,在网站的根目录创建一个Map的文件夹,新建xxxMap.xml格式的配置类,比如:PeopleMap.xml文件,示例代码如下:

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

<!--namespace必须用否者就报错(读取配置文件报:未将对象引用设置到对象的实例)-->

<sqlMap namespace="" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<statements>

<select id="GetPeopleById" parameterClass="string" resultClass="HashTable">

SELECT * FROM People WHERE Id=#Id#

</select>

<insert id="Add" parameterClass="hashtable">

INSERT  dbo.People (name ,age)

VALUES  (#Name# , #Age#)

</insert>

<delete id="Delete" parameterClass="int" restultClass="int">

DELETE FROM dbo.People WHERE Id=#Id#

</delete>

<update id="Update" parameterClass="hashtable" restltClass="int">

UPDATE People SET name=#Name# WHERE Id=#Id#

</update>

<select id="GetAll" resultClass="HashTable">

SELECT * FROM People

</select>

</statements>

</sqlMap>

这三类配置文件必须都要有,与其他orm框架不同的是,web.config什么也不用配置,及时练数据库连接字符串也不是在它的文件中配置的,也就是web.config是没有被用到的。

第四步:iBatis框架语法与使用。

使用之前先来加入一个DB辅助类IBatisHepler.cs,代码如下:

IBatisHepler.cs

using System;using System.Collections.Generic;using System.Text;using IBatisNet.DataMapper.Configuration.Statements;using IBatisNet.DataMapper;using IBatisNet.DataMapper.MappedStatements;using IBatisNet.Common;using IBatisNet.DataMapper.Scope;using System.Data;using IBatisNet.DataMapper.Configuration;using System.Collections;

/// <summary>/// IBatis 使用工具类/// </summary>public class IBatisHepler{    private static ISqlMapper mapper = null;    static IBatisHepler()    {        DomSqlMapBuilder builder = new DomSqlMapBuilder();//其作用是根据配置文件创建SqlMap实例。        mapper = builder.Configure("SqlMap.config") as SqlMapper;//SqlMapper是iBatisNet的核心组件,提供数据库操作的基础平台。SqlMapper可通过DomSqlMapBuilder创建。    }    /// <summary>    /// 执行添加操作    /// </summary>    /// <param name="tag">语句ID</param>    /// <param name="paramObject">语句所需要的参数</param>    /// <returns>添加的主键</returns>    public static object ExcuteInsert(string tag, Hashtable paramObject)    {        return mapper.Insert(tag, paramObject);    }    /// <summary>    /// 执行删除操作    /// </summary>    /// <param name="tag">语句ID</param>    /// <param name="paramObject">语句所需要的参数</param>    /// <returns>影响行数</returns>    public static int ExcuteDelete(string tag, object paramObject)    {        return mapper.Delete(tag, paramObject);    }    /// <summary>    /// 执行修改操作    /// </summary>    /// <param name="tag">语句ID</param>    /// <param name="paramObject">语句所需要的参数</param>    /// <returns>影响行数</returns>    public static int ExcuteUpdate(string tag, Hashtable paramObject)    {        return mapper.Update(tag, paramObject);    }    /// <summary>    /// 查询单个实体对象    /// </summary>    /// <param name="tag">语句ID</param>    /// <param name="paramObject">语句所需要的参数</param>    /// <returns>得到的Object</returns>    public static object ExcuteSelectObj(string tag, object paramObject)    {        object obj = mapper.QueryForObject(tag, paramObject);        return obj;    }    /// <summary>    /// 分页查询    /// </summary>    /// <param name="tag">语句ID</param>    /// <param name="paramObject">语句所需要的参数</param>    /// <param name="pageIndex">页索引</param>    /// <param name="pageSize">每页显示的记录数</param>    /// <returns>得到的List集合</returns>    public static IList ExcuteSelect(string tag, object paramObject, int pageIndex, int pageSize)    {        return mapper.QueryForList(tag, paramObject, pageIndex, pageSize);    }    /// <summary>    /// 通用的以DataTable的方式得到Select的结果(xml文件中参数要使用$标记的占位参数)    /// </summary>    /// <param name="tag">语句ID</param>    /// <param name="paramObject">语句所需要的参数</param>    /// <returns>得到的DataTable</returns>    public static DataTable ExcuteSelect(string tag, object paramObject)    {        DataSet ds = new DataSet();        bool isSessionLocal = false;        ISqlMapSession session = mapper.LocalSession;        if (session == null)        {            session = mapper.CreateSqlMapSession();            session.OpenConnection();            isSessionLocal = true;        }        try        {            IDbCommand cmd = session.CreateCommand(CommandType.Text);            cmd.Connection = session.Connection;            cmd.CommandText = GetSql(tag, paramObject);            IDbDataAdapter adapter = session.CreateDataAdapter(cmd);            adapter.Fill(ds);        }        finally        {            if (isSessionLocal)            {                session.CloseConnection();            }        }        return ds.Tables[0];    }    /// <summary>    /// 得到参数化后的SQL    /// </summary>    /// <param name="tag">语句ID</param>    /// <param name="paramObject">语句所需要的参数</param>    /// <returns>sql语句</returns>    protected static string GetSql(string tag, object paramObject)    {        IStatement statement = mapper.GetMappedStatement(tag).Statement;        IMappedStatement mapStatement = mapper.GetMappedStatement(tag);        ISqlMapSession session = mapper.CreateSqlMapSession();        RequestScope request = statement.Sql.GetRequestScope(mapStatement, paramObject, session);        return request.PreparedStatement.PreparedSql;    }    /// <summary>    /// 用于分页控件使用    /// </summary>    /// <param name="tag">语句ID</param>    /// <param name="paramObject">语句所需要的参数</param>    /// <param name="PageSize">每页显示数目</param>    /// <param name="curPage">当前页</param>    /// <param name="recCount">记录总数</param>    /// <returns>得到的DataTable</returns>    public static DataTable ExcuteSelect(string tag, object paramObject, int PageSize, int curPage, out int recCount)    {        IDataReader dr = null;        bool isSessionLocal = false;        string sql = GetSql(tag, paramObject);        string strCount = "select count(*) " + sql.Substring(sql.ToLower().IndexOf("from"));        IDalSession session = mapper.LocalSession;        DataTable dt = new DataTable();        if (session == null)        {            session = mapper.CreateSqlMapSession();            session.OpenConnection();            isSessionLocal = true;        }        try        {            IDbCommand cmdCount = session.CreateCommand(CommandType.Text);            cmdCount.Connection = session.Connection;            cmdCount.CommandText = strCount;            object count = cmdCount.ExecuteScalar();            recCount = Convert.ToInt32(count);            IDbCommand cmd = session.CreateCommand(CommandType.Text);            cmd.Connection = session.Connection;            cmd.CommandText = sql;            dr = cmd.ExecuteReader();            dt = Paging(dr, PageSize, curPage);        }        finally        {            if (isSessionLocal)            {                session.CloseConnection();            }        }        return dt;    }

    /**/    /// <summary>    /// 取回合适数量的数据    /// </summary>    /// <param name="dataReader"></param>    /// <param name="PageSize"></param>    /// <param name="curPage"></param>    /// <returns></returns>    protected static DataTable Paging(IDataReader dataReader, int PageSize, int curPage)    {        DataTable dt;        dt = new DataTable();        int colCount = dataReader.FieldCount;        for (int i = 0; i < colCount; i++)        {            dt.Columns.Add(new DataColumn(dataReader.GetName(i), dataReader.GetFieldType(i)));        }        // 读取数据。将DataReader中的数据读取到DataTable中        object[] vald = new object[colCount];        int iCount = 0; // 临时记录变量        while (dataReader.Read())        {            // 当前记录在当前页记录范围内            if (iCount >= PageSize * (curPage - 1) && iCount < PageSize * curPage)            {                for (int i = 0; i < colCount; i++)                    vald[i] = dataReader.GetValue(i);                dt.Rows.Add(vald);            }            else if (iCount > PageSize * curPage)            {                break;            }            iCount++; // 临时记录变量递增        }        if (!dataReader.IsClosed)        {            dataReader.Close();            dataReader.Dispose();        }        return dt;    }}

使用语法如下:

// 添加引用

using System.Collections;

using IBatisNet.DataMapper;

using IBatisNet.DataMapper.Configuration;

// 1.添加

Hashtable ht_add = new Hashtable();

ht_add["Name"] = "IBatis";  // [注意]大小写要和xxxMap.xml里保持一致

ht_add["Age"] = 2001;

IBatisHepler.ExcuteInsert("Add", ht_add);

// 2.修改

Hashtable ht_up = new Hashtable();

ht_up["Id"] = "1";

ht_up["Name"] = "IBatis";

ht_up["Age"] = 2001;

IBatisHepler.ExcuteUpdate("Update", ht_up);

// 3.删除

IBatisHepler.ExcuteDelete("Delete", 14);

// 4.查询

Repeater1.DataSource = IBatisHepler.ExcuteSelectObj("GetPeopleById", "1");

Repeater1.DataBind();

我对此框架的评价:配置文件有点多,用户需要去写东西比较多,调用查询不是很好用,尤其是条件查询很不方便。

代码下载:【①.本Demo下载】

Orm框架相关文章链接:

1.NHibernate使用之详细图解

2.iBatis for net 框架使用

3.iBatis for Net 代码生成器(CodeHelper)附下载地址

4.NBear简介与使用图解

5.SubSonic框架使用图解

6.GentleNet使用之详细图解

iBatis for net 框架使用相关推荐

  1. 使用iBatis数据映射框架吧

    如果您厌烦了编写 JDBC,可以考虑使用另一个功能丰富的数据映射框架 iBatis,它能够实现大多数同样的好处,并且只需要编写非常少的代码. 引言 对象关系映射程序(Object Relational ...

  2. iBATIS之父:iBATIS框架的成功蜕变

    iBATIS之父:iBATIS框架的成功蜕变 推荐阅读: 1.<iBATIS 实战>--国内第一本iBATIS巨著(iBATIS之父撰写) 2. 图灵4月精彩新书预告 作为软件开发人员,我 ...

  3. 在 SCA Module 中使用 iBATIS 框架实现数据持久层

    在完成 SCA Module 建模后用 Java 对象进行实现时,采用 Hibernate 和采用 iBATIS 实现 SCA Module 的数据持久层,目的都是为 SDO 提供数据访问服务并加快 ...

  4. iBATIS学习笔记开篇

    因工作需要,从今天开始,计划一个月内学懂学透.net下的iBATIS.关于iBATIS,网上有很多介绍(官方网站),我会把学习(.net下的)iBATIS的笔记整理成一个系列来写,希望对有相同需求的朋 ...

  5. ibatis mysql 配置文件详解_MyBatis Generator 配置文件详解

    MyBatis Generator (MBG) 是由一个XML配置文件驱动的.这个配置文件中会声明以下内容: 如何连接数据库 要生成什么对象,以及如何生成它们 哪些表需要应用于对象生成. 根元素 ge ...

  6. Ibatis学习总结1--ibatis简介和SQL Maps

    最佳维护的一个项目使的是ibatis框架,在闲暇之余将手头的开发手册和平时开发的理解做一下总结,言归正传. 简介 使用 SQL Map,能够大大减少访问关系数据库的代码.SQL Map 使用简单的 X ...

  7. iBatis for Net 代码生成器(CodeHelper)附下载地址(已经升级为V 1.1)

    CodeHelper是一款可以自己定义模板和生成内容的代码生成器,目前只支持MsSql数据库,这款代码生成器的初衷也只是为了生成MyBatis.net框架的配置文件而写的一个轻量级的代码生成器. Co ...

  8. SubSonic框架使用图解

    简介:SubSonic框架是一个优秀的.开源的ORM映射框架,同时提供符合自身需要的代码生成器. 官方下载地址:http://www.subsonic.org/pages/download.jsp 明 ...

  9. Struts+iBatis+Spring+mysql整合开发

    转载请注明:http://www.cnblogs.com/tiantianbyconan/archive/2013/03/03/2941554.html 本文使用Struts+iBatis+Sprin ...

最新文章

  1. [bzoj2259][Oibh]新型计算机_Dijkstra
  2. 科普丨深度学习 vs 概率图模型 vs 逻辑学
  3. api 和 C# 里的接口的区别?
  4. Boosted Tree:一篇很有见识的文章
  5. linux io重定向指令,Linux基础知识之 IO重定向
  6. samba安装_Centos安装Samba
  7. 【计算机组成原理】I/O设备
  8. hdu2022——海选女主角
  9. java定时器异常,定时任务异常 高手进
  10. python解释器有多大_python解释器到底是什么?
  11. li 字多出了省略号_css 超出用省略号当标题字符溢出用省略号表示
  12. 软考信息系统项目管理师_信息化与信息系统5_信息系统规划_补充问题---软考高级之信息系统项目管理师007
  13. oracle将把varchar2字段(长度4000)改为clob类型
  14. android nef转jpg格式文件,nef格式转换成jpg
  15. 技术不牛如何才拿到国内IT巨头的Offer
  16. flutter基础布局之 对话框Dialogs
  17. 三十、动名词短语 2
  18. 第14章传智书城前台程序设计
  19. 自然语言处理NLP中文分词,词性标注,关键词提取和文本摘要
  20. Eclipse使用入门

热门文章

  1. XMLHttpRequest+WebForm模式(接口IHttpHandler)实现ajax
  2. CYQ.Data 数据框架 发放V1.5版本源码
  3. datastage 使用小结
  4. 看完动画你还敢说不会 快速排序
  5. CSharpGL(49)试水OpenGL软实现
  6. 【原创】利用腾讯和百度的AI接口识别验证码
  7. python练习笔记——利用信号signal处理僵尸进程
  8. mysql 5.6.4以上版本innodb支持全文索引的测试
  9. pythonchallenge_level2
  10. Dede 删除文档同时文章中的图片的方法