IBatisNet封装类:BaseSqlMapDao
为了日后的重复使用和代码简洁,我们可以像DbHelperSQL一样,对SqlMap的各种操作进行封装。
using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.IO; using System.Web; using System.Reflection; using IBatisNet.Common; using IBatisNet.Common.Pagination; using IBatisNet.DataMapper; using IBatisNet.DataMapper.Exceptions; using IBatisNet.DataMapper.Configuration; namespace IBatisNetLib { /// <summary> /// 基于IBatisNet的数据访问基类 /// </summary> public class BaseSqlMapDao { /// <summary> /// IsqlMapper实例 /// </summary> /// <returns></returns> public static ISqlMapper sqlMap; #region 构造ISqlMapper private string fileName = "sqlMap.Config"; public BaseSqlMapDao() { //从程序集中加载 //Assembly assembly = Assembly.Load("IBatisNetDemo"); //Stream stream = assembly.GetManifestResourceStream("IBatisNetDemo.sqlmap.config"); //DomSqlMapBuilder builder = new DomSqlMapBuilder(); //sqlMap = builder.Configure(stream);
//从文件加载创建实例 DomSqlMapBuilder builder = new DomSqlMapBuilder(); sqlMap = builder.Configure(fileName); } #endregion
/// <summary> /// 是否存在 /// </summary> /// <param name="tableName">表名</param> /// <returns></returns> protected bool ExecuteExists(string statementName, object parameterObject) { try { object obj = sqlMap.QueryForObject(statementName, parameterObject); int cmdresult; if ((Object.Equals(obj, null)) || (obj == null)) { cmdresult = 0; } else { cmdresult = int.Parse(obj.ToString()); } if (cmdresult == 0) { return false; } else { return true; } } catch (Exception e) { throw (e); } }
/// <summary> /// 执行添加 /// </summary> /// <param name="statementName">操作名</param> /// <param name="parameterObject">参数</param> protected object ExecuteInsert(string statementName, object parameterObject) { try { return sqlMap.Insert(statementName, parameterObject); } catch (Exception e) { throw new DataMapperException("Error executing query '" + statementName + "' for insert. Cause: " + e.Message, e); } } /// <summary> /// 执行添加,返回自动增长列 /// </summary> /// <param name="statementName">操作名</param> /// <param name="parameterObject">参数</param> /// <returns>返回自动增长列</returns> protected int ExecuteInsertForInt(string statementName, object parameterObject) { try { object obj=sqlMap.Insert(statementName, parameterObject); if (obj != null) { return Convert.ToInt32(obj); } else { return 0; } } catch (Exception e) { throw new DataMapperException("Error executing query '" + statementName + "' for insert. Cause: " + e.Message, e); } }
/// <summary> /// 执行修改 /// </summary> /// <param name="statementName">操作名</param> /// <param name="parameterObject">参数</param> /// <returns>返回影响行数</returns> protected int ExecuteUpdate(string statementName, object parameterObject) { try { return sqlMap.Update(statementName, parameterObject); } catch (Exception e) { throw new DataMapperException("Error executing query '" + statementName + "' for update. Cause: " + e.Message, e); } }
/// <summary> /// 执行删除 /// </summary> /// <param name="statementName">操作名</param> /// <param name="parameterObject">参数</param> /// <returns>返回影响行数</returns> protected int ExecuteDelete(string statementName, object parameterObject) { try { return sqlMap.Delete(statementName, parameterObject); } catch (Exception e) { throw new DataMapperException("Error executing query '" + statementName + "' for delete. Cause: " + e.Message, e); } }
/// <summary> /// 得到列表 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="statementName">操作名称,对应xml中的Statement的id</param> /// <param name="parameterObject">参数</param> /// <returns></returns> protected IList<T> ExecuteQueryForList<T>(string statementName, object parameterObject) { try { return sqlMap.QueryForList<T>(statementName, parameterObject); } catch (Exception e) { throw new DataMapperException("Error executing query '" + statementName + "' for list. Cause: " + e.Message, e); } }
/// <summary> /// 得到指定数量的记录数 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="statementName"></param> /// <param name="parameterObject">参数</param> /// <param name="skipResults">跳过的记录数</param> /// <param name="maxResults">最大返回的记录数</param> /// <returns></returns> protected IList<T> ExecuteQueryForList<T>(string statementName, object parameterObject, int skipResults, int maxResults) { try { return sqlMap.QueryForList<T>(statementName, parameterObject, skipResults, maxResults); } catch (Exception e) { throw new DataMapperException("Error executing query '" + statementName + "' for list. Cause: " + e.Message, e); } }
/// <summary> /// 得到分页的列表 /// </summary> /// <param name="statementName">操作名称</param> /// <param name="parameterObject">参数</param> /// <param name="pageSize">每页记录数</param> /// <returns></returns> protected IPaginatedList ExecuteQueryForPaginatedList(string statementName, object parameterObject, int pageSize) { try { return sqlMap.QueryForPaginatedList(statementName, parameterObject, pageSize); } catch (Exception e) { throw new DataMapperException("Error executing query '" + statementName + "' for paginated list. Cause: " + e.Message, e); } }
/// <summary> /// 查询得到对象的一个实例 /// </summary> /// <typeparam name="T">对象type</typeparam> /// <param name="statementName">操作名</param> /// <param name="parameterObject">参数</param> /// <returns></returns> protected T ExecuteQueryForObject<T>(string statementName, object parameterObject) { try { return sqlMap.QueryForObject<T>(statementName, parameterObject); } catch (Exception e) { throw new DataMapperException("Error executing query '" + statementName + "' for object. Cause: " + e.Message, e); } } } } |
调用该基类实现映射文件的数据访问代码:
using System; using System.Collections.Generic; using System.Text; namespace IBatisNetLib { public class PersonService : BaseSqlMapDao { public PersonService() { } /// <summary> /// 是否存在该记录 /// </summary> public bool Exists(object Id) { return ExecuteExists("Exists", Id); } public void Insert(Person person) { ExecuteInsert("InsertPerson", person); } public void Update(Person person) { ExecuteUpdate("UpdatePerson", person); } public void Delete(Person person) { ExecuteDelete("DeletePerson", person); } public IList<Person> GetAllPerson() { IList<Person> list = null; list = ExecuteQueryForList<Person>("SelectAllPerson", null); return list; } public Person GetPerson(object Id) { Person person = ExecuteQueryForObject<Person>("SelectByPersonId", Id); return person; } } } |