IBatis .Net 使用详细(三)

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;

        }

    }

}

 

posted @ 2012-03-23 10:18  奥邦创新  阅读(327)  评论(0编辑  收藏  举报