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接口的封装
using System;
using System.Collections.Generic;
using System.Text;
using IBatisNet.DataMapper.MappedStatements;
using IBatisNet.DataMapper.Configuration.Statements;
using IBatisNet.DataMapper.Scope;
using System.Data;
using System.Reflection;
using System.Data.Common;
using IBatisNet.DataMapper;
using IBatisEntity;
using IBatisNet.Common;
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("数据已被修改,请重新加载.");
}
// 改变状态为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, T paramObject, bool checkConcurrency)
{
int iReturn = SqlMap.Update(tag, paramObject);
// 若更新出现并发且要检查并发,则抛出对应的异常
if (iReturn <= 0 && checkConcurrency)
{
throw new Exception("数据已被修改,请重新加载.");
}
// 改变状态为Unchanged
paramObject.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 paramObj
using System.Collections.Generic;
using System.Text;
using IBatisNet.DataMapper.MappedStatements;
using IBatisNet.DataMapper.Configuration.Statements;
using IBatisNet.DataMapper.Scope;
using System.Data;
using System.Reflection;
using System.Data.Common;
using IBatisNet.DataMapper;
using IBatisEntity;
using IBatisNet.Common;
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("数据已被修改,请重新加载.");
}
// 改变状态为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, T paramObject, bool checkConcurrency)
{
int iReturn = SqlMap.Update(tag, paramObject);
// 若更新出现并发且要检查并发,则抛出对应的异常
if (iReturn <= 0 && checkConcurrency)
{
throw new Exception("数据已被修改,请重新加载.");
}
// 改变状态为Unchanged
paramObject.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 paramObj