一、查询select

还记得第一篇示例中是如何读出数据库里3条数据的吗?就是调用了一个QueryForList方法,从方法名就知道,查询返回列表。

1、QueryForList  返回List<T>强类型数据集合

来看看方法重载:

 

从重载可以看出,其实只是3个参数不同的方法,分为泛型与非泛型两个版本而已。

主要说说,参数skipResults,表示从结果行中跳过skipResults行后返回,maxResults表示返回的行数。这个在分页中会用到。

下面来看一个最简单的示例:

xml映射文件(就是之前写的那个没有改动):

  <statements>
    <select id="SelectAllPerson" resultMap="PersonModel">
      <!--id在程序中会被SqlMapper实体类所调用,resultMap就是resultMap节点的id-->
      select * from person
    </select>
  </statements>

对DAO层稍微改造下:

public class PersonDAO
    {
        //public IList<PersonModel> GetList()
        //{
        //    ISqlMapper mapper = Mapper.Instance();
        //    //DomSqlMapBuilder builder = new DomSqlMapBuilder();
        //    //ISqlMapper mapper = builder.Configure(@"D:\SqlMap.config");
        //    IList<PersonModel> ListPerson = mapper.QueryForList<PersonModel>("SelectAllPerson", null);//这个"SelectAllPerson"就是xml映射文件的Id
        //    return ListPerson;
        //}

        ISqlMapper mapper = MapperHelper.Instance();//通过MapperHelper获得SqlMapper实例

        public IList<PersonModel> GetList(int skipResults, int maxResults)
        {
            IList<PersonModel> ListPerson = mapper.QueryForList<PersonModel>("SelectAllPerson", null, skipResults, maxResults);//这个"SelectAllPerson"就是xml映射文件的Id
            return ListPerson;
        }
    }

Main方法:

static void Main(string[] args)
        {
            PersonDAO dao = new PersonDAO();
            IList<PersonModel> listPerson = dao.GetList(1,10);//跳过1条取最多10条
            foreach (PersonModel p in listPerson)
            {
                Console.WriteLine(p.PersonId +" - "+ p.PersonName);
            }

            Console.ReadKey();
        }

跳过了第一条数据“刘备”,查询出2条(数据库只有3条记录)。

2、QueryForObject  返回一行数据,对应程序的实体类实例

xml映射文件:

  <select id="SelectOnePerson" resultMap="PersonModel">
      <!--其中#Id就是传入的参数-->
      select * from person where Id = #Id#      
    </select>

DAO层:

public PersonModel SelectOnePerson(int id)
        {
            PersonModel p = mapper.QueryForObject<PersonModel>("SelectOnePerson", 1);//1就是传入Sql语句的参数
            return p;
        }
static void Main(string[] args)
        {
            PersonDAO dao = new PersonDAO();

            PersonModel person = dao.SelectOnePerson(3);
            Console.WriteLine(person.PersonId + " - " + person.PersonName);
            Console.ReadKey();
        }

3、QueryWithRowDelegate  通过委托过滤返回的数据

4、QueryForDictionary

5、QueryForMap

二、Insert

xml映射文件:

 <insert id="InsertOne" resultMap="PersonModel">
       insert into person(Name) values(#PersonName#)
      <selectKey type="post" resultClass="int" property="PersonId">
        SELECT @@IDENTITY
      </selectKey>        
    </insert>

selectKey可以获取到插入记录的Id。

 selectKey有3个主要的属性: 
    1)resultClass:返回主键的数据类型
    2)type:表示主键在insert之前或之后生成(取决于数据库的主键生成策略),取值分别为[pre|post],非必须,未填写时如果在insert之前表示pre,否则表示post
    2)property:返回值保存到的属性,非必须

DAO层:

 public int InsertOne(PersonModel p)
        {
            return (int)mapper.Insert("InsertOne", p);//插入一条数据,返回主键Id
        }
static void Main(string[] args)
        {
            PersonDAO dao = new PersonDAO();

            PersonModel personModel = new PersonModel();
            personModel.PersonName = "曹操";
            personModel.PersonId = 0;
            int res = dao.InsertOne(personModel);
            if (res > 0)
            {
                Console.WriteLine("插入成功,Id为" + res);
            }
            Console.ReadKey();
        }

三、Update

xml映射文件:

 <update id="UpdateOne" resultMap="PersonModel">
      update person set Name = #PersonName# Where Id = #PersonId#
    </update>

DAO层:

 public int UpdateOne(PersonModel p)
        {
            return (int)mapper.Update("UpdateOne", p);
        }
static void Main(string[] args)
        {
            PersonDAO dao = new PersonDAO();

            PersonModel personModel = new PersonModel();
            personModel.PersonId = 10;
            personModel.PersonName = "张三";
            int res = dao.UpdateOne(personModel);
            if (res > 0)
            {
                Console.WriteLine("修改成功");
            }
            Console.ReadKey();
        }

四、Delete

xml映射文件:

  <delete id="DeleteOne" resultMap="PersonModel">
      Delete Person Where Id = #PersonId#
    </delete>

DAO层:

 public int UpdateOne(PersonModel p)
        {
            return (int)mapper.Delete("DeleteOne", p);
        }
        public int UpdateOne(int id)
        {
            return (int)mapper.Delete("DeleteOne", id);
        }
static void Main(string[] args)
        {
            PersonDAO dao = new PersonDAO();

            PersonModel personModel = new PersonModel();
            personModel.PersonId = 10;
            personModel.PersonName = "张三";
            int res = dao.UpdateOne(personModel);
            //int res = dao.UpdateOne(10);//这样也可以
            if (res > 0)
            {
                Console.WriteLine("删除成功");
            }
            Console.ReadKey();
        }

Ibatis.Net事务处理 

BeginTransaction(); CommitTransaction(); RollBackTransaction();这里就不详细介绍了。

提供一个封装的方法:

        /// <summary>
        /// 执行事务
        /// </summary>
        /// <param name="fun"></param>
        /// <returns></returns>
        public bool DoTransaction(Func<bool> fun)
        {
            Instance().BeginTransaction();
            try
            {
                bool result = fun();
                if (result)
                {
                    Instance().CommitTransaction();
                }
                else
                {
                    Instance().RollBackTransaction();
                }
                return result;
            }
            catch (Exception ex)
            {
                Instance().RollBackTransaction();
                throw;
            }
            finally
            {
            }
        }

 

 

参考:http://www.cnblogs.com/caoyc/category/873268.html

 posted on 2018-04-02 15:22  天空划落  阅读(283)  评论(0编辑  收藏  举报