1、练习框架

ibatis主要dll介绍

IBatisNet.Common.dll 由DataAccess和DataMapper组成的共享程序集
IBatisNet.Common.Logging.Log4Net.dll Log4Net集成记录器,和Log4Net配合使用
IBatisNet.DataMapper.dll DataMapper主要框架
IBatisNet.DataAccess.dll

DataAccess框架

2、IBatisDao

1、DaoBase.cs Ibatis接口的封装

namespace IBatisDao
{public class DaoBase<T> : MarshalByRefObject where T : EntityBase{private static ISqlMapper SqlMap;/// <summary>/// 构造函数/// </summary>         /// static DaoBase(){if (SqlMap == null){SqlMap = SqlMapperCreater.SqlMap;}}/// <summary>///  开始事务/// </summary>protected void BeginTransaction(){try{SqlMap.BeginTransaction();}catch{SqlMap.RollBackTransaction();SqlMap.BeginTransaction();}}/// <summary>/// 提交事务/// </summary> protected void CommitTransaction(){SqlMap.CommitTransaction();}/// <summary>/// 回滚事务/// </summary>protected void RollBackTransaction(){SqlMap.RollBackTransaction();}/// <summary>/// 批量保存多个实体./// </summary>/// <param name="list">实体列表</param>/// <param name="insertCmdId">insert语句的id</param>/// <param name="updateCmdId">update语句的id</param>/// <param name="deleteCmdId">delete语句的id</param>protected void Save(IList<T> list, string insertCmdId, string updateCmdId, string deleteCmdId){//删除foreach (T t in list){if (t.EntityState == EntityStateEnum.Deleted && !string.IsNullOrEmpty(deleteCmdId)){this.Delete(deleteCmdId, t);}}//更新foreach (T t in list){if (t.EntityState == EntityStateEnum.Modified && !string.IsNullOrEmpty(updateCmdId)){this.Update(updateCmdId, t);}}//新增foreach (T t in list){if (t.EntityState == EntityStateEnum.Added && !string.IsNullOrEmpty(insertCmdId)){this.Insert(insertCmdId, t);}}}/// <summary>/// 保单个实体/// </summary>/// <param name="list">实体列表</param>/// <param name="insertCmdId">insert语句的id</param>/// <param name="updateCmdId">update语句的id</param>/// <param name="deleteCmdId">delete语句的id</param>protected void Save(T obj, string insertCmdId, string updateCmdId, string deleteCmdId){//删除if (obj.EntityState == EntityStateEnum.Deleted && !string.IsNullOrEmpty(deleteCmdId)){this.Delete(deleteCmdId, obj);}//更新if (obj.EntityState == EntityStateEnum.Modified && !string.IsNullOrEmpty(updateCmdId)){this.Update(updateCmdId, obj);}//新增if (obj.EntityState == EntityStateEnum.Added && !string.IsNullOrEmpty(insertCmdId)){this.Insert(insertCmdId, obj);}}/// <summary>/// 通用执行Select语句/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>结果集合</returns>protected IList<T> Select(string tag, object paramObject){return SqlMap.QueryForList<T>(tag, paramObject);}/// <summary>/// 通用执行skip Select语句/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <param name="skipResults">忽略个数</param>/// <param name="maxResults">最大个数</param>/// <returns>结果集合</returns>protected IList<T> Select(string tag, object paramObject, int skipResults, int maxResults){return SqlMap.QueryForList<T>(tag, paramObject, skipResults, maxResults);}/// <summary>/// 通用执行Select语句/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>单个结果</returns>protected T SelectOne(string tag, object paramObject){return SqlMap.QueryForObject<T>(tag, paramObject);}/// <summary>/// 通用执行Update语句(强制检查数据并发)/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>更新的行数</returns>protected int Update(string tag, T paramObject){return this.Update(tag, paramObject, true);}/// <summary>/// 通用执行Update语句/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>更新的行数</returns>protected int Update(string tag, object paramObject){int iReturn = SqlMap.Update(tag, paramObject);// 若更新出现并发且要检查并发,则抛出对应的异常if (iReturn <= 0){throw new Exception("数据已被修改,请重新加载.");}// 改变状态为Unchangedreturn iReturn;}/// <summary>/// 通用执行Update语句/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <param name="checkConcurrency">是否要检查数据并发</param>/// <returns>更新的行数</returns>protected int Update(string tag, T paramObject, bool checkConcurrency){int iReturn = SqlMap.Update(tag, paramObject);// 若更新出现并发且要检查并发,则抛出对应的异常if (iReturn <= 0 && checkConcurrency){throw new Exception("数据已被修改,请重新加载.");}// 改变状态为UnchangedparamObject.EntityState = EntityStateEnum.Unchanged;return iReturn;}/// <summary>/// 通用执行Update语句/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <param name="checkConcurrency">是否要检查数据并发</param>/// <returns>更新的行数</returns>protected int Update(string tag, object paramObject, bool checkConcurrency){int iReturn = SqlMap.Update(tag, paramObject);// 若更新出现并发且要检查并发,则抛出对应的异常if (iReturn <= 0 && checkConcurrency){throw new Exception("数据已被修改,请重新加载.");}return iReturn;}/// <summary>/// 通用执行Deelte语句/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>删除的行数</returns>protected int Delete(string tag, T paramObject){return SqlMap.Delete(tag, paramObject);}/// <summary>/// 通用执行Insert语句/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>插入行的PK对象</returns>protected object Insert(string tag, T paramObject){object result = SqlMap.Insert(tag, paramObject);paramObject.EntityState = EntityStateEnum.Unchanged;return result;}/// <summary>/// 通用执行Insert语句/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>插入行的PK对象</returns>protected object Insert(string tag, object paramObject){object result = SqlMap.Insert(tag, paramObject);return result;}#region GetSql/GetDataTable/// <summary>/// 通用得到参数化后的SQL(xml文件中参数要使用$标记的占位参数)/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>获得的SQL</returns>protected string GetSql(string tag, object paramObject){string sql = GetPreparedSql(tag, paramObject);//ServiceObject.Log.Logs.DebugLog(tag + ": " + sql);return sql;}/// <summary>/// 返回结果集中的第一行的第一列/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>结果集中的第一行的第一列</returns>protected object QueryScalar(string tag, object paramObject){bool isSessionLocal = false;object result;if (SqlMap.LocalSession == null){isSessionLocal = true;SqlMap.OpenConnection();}//记录SQL语句GetSql(tag, paramObject);try{IDbCommand cmd = GetDbCommand(tag, paramObject);result = cmd.ExecuteScalar();}catch (Exception ex){throw new Exception("Can't QueryScalar, tag = " + tag, ex);}finally{if (isSessionLocal){SqlMap.CloseConnection();}}return result;}/// <summary>/// 通用的以DataSet的方式得到Select的结果(xml文件中参数要使用$标记的占位参数)/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>得到的DataSet</returns>protected DataSet GetDataSet(string tag, object paramObject){bool isSessionLocal = false;DataSet result = new DataSet(); ;if (SqlMap.LocalSession == null){isSessionLocal = true;SqlMap.OpenConnection();}try{IDbCommand cmd = GetDbCommand(tag, paramObject);IDbDataAdapter adapter = SqlMap.LocalSession.CreateDataAdapter(cmd);adapter.Fill(result);}catch (Exception ex){throw new Exception("Can't GetDataSet, tag = " + tag, ex);}finally{if (isSessionLocal){SqlMap.CloseConnection();}}return result;}/// <summary>/// 通用的以DataTable的方式得到Select的结果(xml文件中参数要使用$标记的占位参数)/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <returns>得到的DataTable</returns>protected DataTable GetDataTable(string tag, object paramObject){return GetDataSet(tag, paramObject).Tables[0];}/// <summary>/// 通用的以DataTable的方式得到skip Select的结果(xml文件中参数要使用$标记的占位参数)/// </summary>/// <param name="tag">语句ID</param>/// <param name="paramObject">语句所需要的参数</param>/// <param name="skipResults">忽略个数</param>/// <param name="maxResults">最大个数</param>/// <returns>得到的DataTable</returns>protected DataTable GetDataTable(string tag, object paramObject, int skipResults, int maxResults){bool isSessionLocal = false;DataSet result = new DataSet();if (SqlMap.LocalSession == null){isSessionLocal = true;SqlMap.OpenConnection();}//记录SQL语句GetSql(tag, paramObject);try{IDbCommand cmd = GetDbCommand(tag, paramObject);DbDataAdapter adapter = SqlMap.LocalSession.CreateDataAdapter(cmd) as DbDataAdapter;if (adapter == null){throw new NotSupportedException("Not support skip GetDataTable");}adapter.Fill(result, skipResults, maxResults, "result");}catch (Exception ex){throw new Exception("Can't GetDataTable, tag = " + tag, ex);}finally{if (isSessionLocal){SqlMap.CloseConnection();}}return result.Tables["result"];}private IDbCommand GetDbCommand(string statementName, object paramObject){IStatement statement = SqlMap.GetMappedStatement(statementName).Statement;IMappedStatement mapStatement = SqlMap.GetMappedStatement(statementName);ISqlMapSession session = new SqlMapSession(SqlMap);if (SqlMap.LocalSession != null){session = SqlMap.LocalSession;}else{session = SqlMap.OpenConnection();}RequestScope request = statement.Sql.GetRequestScope(mapStatement, paramObject, session);mapStatement.PreparedCommand.Create(request, session, statement, paramObject);IDbCommand command = request.IDbCommand;// Ibatis 这里做了个装饰,所以得到的类型不是SqlCommand之类的类型// 只能暂时使用反射把它装饰的类型(即真实类型)反射出来Type t = command.GetType();FieldInfo commandField = t.GetField("_innerDbCommand", BindingFlags.Instance | BindingFlags.NonPublic);IDbCommand innerDbCommand = commandField.GetValue(command) as IDbCommand;return innerDbCommand; // request.IDbCommand;}/// <summary>/// 获取查询语句/// </summary>/// <param name="statementName"></param>/// <param name="parameterObject"></param>/// <returns></returns>protected string GetPreparedSql(string statementName, object parameterObject){IMappedStatement mappedStatement = SqlMap.GetMappedStatement(statementName);ISqlMapSession localSession = SqlMap.LocalSession;IStatement statement = mappedStatement.Statement;if (localSession == null){localSession = new SqlMapSession(SqlMap);}return statement.Sql.GetRequestScope(mappedStatement, parameterObject, localSession).PreparedStatement.PreparedSql;}protected IList<TableEntity> QueryWithRowDelegate(string tag, object paramObject, Action<object, object, IList<TableEntity>> action){return SqlMap.QueryWithRowDelegate<TableEntity>(tag, paramObject, new RowDelegate<TableEntity>(action));}#endregion}
}

2、SqlMapperCreater.cs 初始化Ibatis操作类

    public class SqlMapperCreater{protected static ISqlMapper m_sqlMap = null;public static ISqlMapper SqlMap{get{if (m_sqlMap == null){string fileName = "Config\\sqlMap.config";DomSqlMapBuilder builder = new DomSqlMapBuilder();m_sqlMap = builder.Configure(fileName);}return m_sqlMap;}}}

3、IBatisDataAccess

1、TableAccess.cs 数据库访问层

namespace IBatisDataAccess
{public class TableAccess : DaoBase<TableEntity>{public object Insert(TableEntity obj){return base.Insert("TableEntity_Insert", obj);}public IList<TableEntity> Select(TableEntity obj){return base.Select("TableEntity_Select", obj);}public IList<TableEntity> SelectWithRowDelegate(TableEntity obj){return base.QueryWithRowDelegate("TableEntity_Select", obj, new Action<object, object, IList<TableEntity>>(RowDelegate));}public DataTable GetDataTable(TableEntity obj){return base.GetDataTable("TableEntity_Select_Datatable", obj);}public void RowDelegate(object obj, object parameterObject, IList<TableEntity> list){TableEntity tb = obj as TableEntity;tb.COL_1 = 77;list.Add(tb);}}
}

4、IBatisEntity

1、EntityBase.cs 实体基类

namespace IBatisEntity
{/// <summary>/// 实体基类/// </summary>[Serializable]public class EntityBase{// Fieldsprotected EntityBase OldValue;protected EntityStateEnum _entityState = EntityStateEnum.Unchanged;/// <summary>/// 实体的数据版本,默认为未改变/// </summary>public EntityStateEnum EntityState{get { return _entityState; }set { _entityState = value; }}/// <summary>/// 默认构造函数/// </summary>protected EntityBase(){}/// <summary>/// 实现克隆接口/// </summary>/// <returns></returns>public virtual object Clone(){MemoryStream serializationStream = new MemoryStream();BinaryFormatter formatter = new BinaryFormatter();formatter.Serialize(serializationStream, this);serializationStream.Position = 0;return formatter.Deserialize(serializationStream);}/// <summary>/// 在实体与数据表做相互转换时,制定表的列名称模式/// </summary>public enum ColumnNameEnum{/// <summary>/// 数据库对应列名称/// </summary>DBName = 1,/// <summary>/// 实体对应字段名称/// </summary>PropertyName = 2}}/// <summary>/// 实体版本枚举/// </summary>public enum EntityStateEnum{/// <summary>/// 新增/// </summary>Added = 1,/// <summary>/// 被修改/// </summary>Modified = 2,/// <summary>/// 被删除/// </summary>Deleted = 3,/// <summary>/// 未修改/// </summary>Unchanged = 4,/// <summary>/// 新增的但是未加入任何table中/// </summary>Detached = 5}
}

2、TableEntity.cs 实体类

namespace IBatisEntity
{[Serializable]public class TableEntity : EntityBase{public long ID { get; set; }public int COL_1 { get; set; }public int COL_2 { get; set; }public int COL_3 { get; set; }public DateTime REFRESH_DATE { get; set; }}
}

5、IBatisApp界面层访问

1、Form1.cs

namespace IBatisApp
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){TableAccess tableAccess = new TableAccess();object a = tableAccess.Insert(new TableEntity() { COL_1 = -1, COL_2 = -2, COL_3 = -3, REFRESH_DATE = DateTime.Now });MessageBox.Show(a.ToString());}private void button2_Click(object sender, EventArgs e){TableAccess tableAccess = new TableAccess();IList<TableEntity> a = tableAccess.Select(new TableEntity() { ID = 66 });a = tableAccess.SelectWithRowDelegate(new TableEntity() { ID = 66 });MessageBox.Show(a.Count.ToString());DataTable dt = tableAccess.GetDataTable(new TableEntity() { ID = 66 });}}
}

6、xml文件配置

1、providers.config 提供了一些支持的数据库版本信息

<?xml version="1.0" encoding="utf-8"?>
<providers
xmlns="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"default="true" 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"/>
<providername="sqlServer2.0"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="false"/><providername="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="oracleClient2.0" description="Oracle, Microsoft provider V2.0.50727.42" enabled="true" assemblyName="System.Data.OracleClient, Version=2.0.50727.42, 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=":"/><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"/><providername="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"    /><providername="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 sqlmap的基本信息

<?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="Config//DataBase.config"/><settings><!--setting useStatementNamespaces="false"/--><setting cacheModelsEnabled="true"/><setting validateSqlMap="false"/></settings><providers resource="config//providers.config"/><database><provider name="oracleClient2.0"/><dataSource name="${DatabaseName}" connectionString="Data Source=${DataSource}; User ID=${UserID}; Password=${Password}"/></database><alias><typeAlias alias="ArrayList" type="System.Collections.ArrayList,mscorlib"/></alias><sqlMaps><!--===== sqlMap文件=======-->    <sqlMap resource="config//TableEntity.xml"/></sqlMaps>
</sqlMapConfig>

3、DataBase.config 数据库链接字符串

<?xml version="1.0" encoding="utf-8" ?>
<settings><!--  定义4个属性,在sqlMap.config中调用 --><add key="DatabaseName" value="DatabaseName"/><add key="DataSource" value="DataSource"/><add key="UserID" value="UserID"/><add key="Password" value="Password"/></settings>

4、TableEntity.xml 具体操作的xml

<?xml version="1.0" encoding="UTF-8" ?>
<sqlMap namespace="TableEntity"   xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><alias><typeAlias alias="TableEntity"  type="IBatisEntity.TableEntity" /><!--<typeAlias alias="TableEntity.Key" type="long" />--></alias><resultMaps><resultMap id="TableEntity_AllColumns" class="TableEntity"><result property="ID"  column="ID" /><result property="COL_1"  column="COL_1" /><result property="COL_2"  column="COL_2" /><result property="COL_3"  column="COL_3" /><result property="REFRESH_DATE"  column="REFRESH_DATE" /></resultMap></resultMaps><parameterMaps><parameterMap id="TableEntityParam" class="HashTable"><parameter property="ID"  column="ID" direction="Input" /><parameter property="COL_1"  column="COL_1" direction="Input" /><parameter property="COL_2"  column="COL_2" direction="Input" /><parameter property="COL_3"  column="COL_3" direction="Input" /><parameter property="REFRESH_DATE"  column="REFRESH_DATE" direction="Input" /></parameterMap></parameterMaps><statements><insert id="TableEntity_Insert"  parameterClass="TableEntity" resultClass="int"><!--     按照规范序列应该为[TABLE]_S --><selectKey property="ID" type="pre" resultClass="long">select pto_kit_s.nextval as value from dual</selectKey>INSERT INTO A_TEST_1(ID, COL_1, COL_2, COL_3)VALUES(#ID#, #COL_1#, #COL_2#, #COL_3#)</insert><select id="TableEntity_Select" parameterClass="TableEntity" resultMap="TableEntity_AllColumns">select id,col_1,col_2,col_3,refresh_datefrom scp.A_TEST_1 t where id=#ID#</select><select id="TableEntity_Select_Datatable" parameterClass="TableEntity">select id,col_1,col_2,col_3,refresh_datefrom A_TEST_1 t where id=#ID#</select></statements>
</sqlMap>

<?xml version="1.0" encoding="UTF-8" ?>
<sqlMap namespace="TableEntity"   xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><alias><typeAlias alias="TableEntity"  type="IBatisEntity.TableEntity" /><!--<typeAlias alias="TableEntity.Key" type="long" />--></alias><resultMaps><resultMap id="TableEntity_AllColumns" class="TableEntity"><result property="ID"  column="ID" /><result property="COL_1"  column="COL_1" /><result property="COL_2"  column="COL_2" /><result property="COL_3"  column="COL_3" /><result property="REFRESH_DATE"  column="REFRESH_DATE" /></resultMap></resultMaps><parameterMaps><parameterMap id="TableEntityParam" class="HashTable"><parameter property="ID"  column="ID" direction="Input" /><parameter property="COL_1"  column="COL_1" direction="Input" /><parameter property="COL_2"  column="COL_2" direction="Input" /><parameter property="COL_3"  column="COL_3" direction="Input" /><parameter property="REFRESH_DATE"  column="REFRESH_DATE" direction="Input" /></parameterMap></parameterMaps><statements><insert id="TableEntity_Insert"  parameterClass="TableEntity" resultClass="int"><!--     按照规范序列应该为[TABLE]_S --><selectKey property="ID" type="pre" resultClass="long">select pto_kit_s.nextval as value from dual</selectKey>INSERT INTO A_TEST_1(ID, COL_1, COL_2, COL_3)VALUES(#ID#, #COL_1#, #COL_2#, #COL_3#)</insert><select id="TableEntity_Select" parameterClass="TableEntity" resultMap="TableEntity_AllColumns">select id,col_1,col_2,col_3,refresh_datefrom scp.A_TEST_1 t where id=#ID#</select><select id="TableEntity_Select_Datatable" parameterClass="TableEntity">select id,col_1,col_2,col_3,refresh_datefrom A_TEST_1 t where id=#ID#</select></statements>
</sqlMap>

IBatis 简易框架搭建相关推荐

  1. Python之简易Web框架搭建

    Python之简易Web框架搭建 Web框架介绍 WSGI协议 Web框架开发 项目结构 MyWebServer.py 之前的静态服务器代码 WSGI协议的要求 更新代码 framework.py 返 ...

  2. Unity 游戏框架搭建 (五) 简易消息机制

    什么是消息机制? 23333333,让我先笑一会. 为什么用消息机制? 三个字,解!!!!耦!!!!合!!!!. 我的框架中的消息机制用例: 1.接收者 using UnityEngine;names ...

  3. JAVA线程池管理及分布式HADOOP调度框架搭建

    平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...

  4. Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建

    目录 Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建 0.项目准备 1.数据持久层Mybatis+MySQL 1.1 MySQL数据准备 1.2 Mybatis ...

  5. SSM框架搭建,及遇到的问题

    SSM框架搭建,及遇到的问题 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Exp ...

  6. 个人博客系统之框架搭建

    1.写在前面 本篇博客是个人博客系统系列第二篇,以下是其他博客的链接: 个人博客系统整体介绍 2.新建项目 2.1 创建SpringBoot项目 首先新建一个SpringBoot项目,项目信息大家可以 ...

  7. Unity 游戏框架搭建 2019 (四十七) 集成到 MonoBehaviourSimplify

    还记得我们的简易消息机制是为了解决什么问题诞生的嘛? 是为了解决脚本间访问的问题. 我们回过头再看下 A 脚本如果想访问 B 脚本,使用消息机制,如何实现. 代码如下: public class A ...

  8. QTP简易框架(GN0.1)编写小结

    花了近2个月,断断续续抽时间的完成了一套QTP简易框架的编写,自命名为GN0.1(QTP版本).在此做一下总结: 1.为什么需要框架? 让工作更加的简便.条理化.模块话.提高可维护性和可持续重用性. ...

  9. Day3-Mybatis基本框架搭建(添加用户)

    Day3-Mybatis基本框架搭建(添加用户) 二. Mybatis-JDBC Mybatis的介绍 Mybatis的入门 使用jdbc操作数据库存在的问题 (回顾jdbc) Mybatis的架构 ...

最新文章

  1. 在Oracle VM VirtualBox中如何安装64位虚拟机系统
  2. 1090 Highest Price in Supply Chain 需再做
  3. 简谈TCP的八个特性
  4. TSP_遗传算法求解
  5. 生成android证书
  6. Hive 1.1.1 启动错误
  7. linux uvc协议_linux使用UVC采集数据
  8. mysql 冷热表_Redis+MySQL冷热数据交换
  9. flash跟随鼠标样式
  10. C++11 override 和 final 关键字
  11. Robot framework之元素定位实战
  12. python中tolist()命令
  13. windows 拖拽功能
  14. 全面对比 C C++ Java Python
  15. 如何查看secure crt的登录密码
  16. java中多线程常见面试题
  17. 计算机音乐红色彼岸花,红色彼岸花 - 刘雨Key - 5SING中国原创音乐基地
  18. Java程序设计课程设计_《JAVA程序设计》课程设计
  19. 【人工智能】AI竞赛,到底有什么价值?
  20. 本周AI热点回顾:十四五规划“人工智能第一!”;深度学习漫画第一卷现已开源;英伟达GPU“屠榜”MLPerf

热门文章

  1. C++Poisso statistics泊松统计的实现算法(附完整源码)
  2. C语言实现djikstra算法(附完整源码)
  3. QT的QDesignerPropertyEditorInterface类的使用
  4. c++外观模式façade
  5. Android底层隐私数据,Android Intent传递数据底层分析详细介绍_Android_脚本之家
  6. 47_pytorch循环神经网络(学习笔记)
  7. Clickhouse安装及使用/clickhouse-mysql安装
  8. kylin调优,项目中错误总结,知识点总结,kylin jdbc driver + 数据库连接池druid + Mybatis项目中的整合,shell脚本执行kylin restapi 案例
  9. 第四天:规划范围管理
  10. 4.windows环境下如何安装memcached教程(转载+自己整理)