.net ibatis 连接mysql_Ibatis.Net 数据库操作学习(四)

一、查询select

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

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

来看看方法重载:

c925da8b1ed91a3fae4695f88fe88307.png

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

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

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

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

select * from person

对DAO层稍微改造下:

public classPersonDAO

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

ISqlMapper mapper=MapperHelper.Instance();//通过MapperHelper获得SqlMapper实例public IList GetList(int skipResults, intmaxResults)

{

IList ListPerson = mapper.QueryForList("SelectAllPerson", null, skipResults, maxResults);//这个"SelectAllPerson"就是xml映射文件的Id

returnListPerson;

}

}

Main方法:

static void Main(string[] args)

{

PersonDAO dao= newPersonDAO();

IList listPerson = dao.GetList(1,10);//跳过1条取最多10条foreach (PersonModel p inlistPerson)

{

Console.WriteLine(p.PersonId+"-"+p.PersonName);

}

Console.ReadKey();

}

cca1509b3e5adc9234964c05f2a56a65.png

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

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

xml映射文件:

select * from person where Id = #Id#

DAO层:

public PersonModel SelectOnePerson(intid)

{

PersonModel p= mapper.QueryForObject("SelectOnePerson", 1);//1就是传入Sql语句的参数

returnp;

}

static void Main(string[] args)

{

PersonDAO dao= newPersonDAO();

PersonModel person= dao.SelectOnePerson(3);

Console.WriteLine(person.PersonId+ "-" +person.PersonName);

Console.ReadKey();

}

c374d7e50e6c033bd479ca455edee741.png

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

4、QueryForDictionary

5、QueryForMap

二、Insert

xml映射文件:

insert into person(Name) values(#PersonName#)SELECT @@IDENTITY

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

selectKey有3个主要的属性:

1)resultClass:返回主键的数据类型

2)type:表示主键在insert之前或之后生成(取决于数据库的主键生成策略),取值分别为[pre|post],非必须,未填写时如果在insert之前表示pre,否则表示post

2)property:返回值保存到的属性,非必须

DAO层:

public intInsertOne(PersonModel p)

{return (int)mapper.Insert("InsertOne", p);//插入一条数据,返回主键Id

}

static void Main(string[] args)

{

PersonDAO dao= newPersonDAO();

PersonModel personModel= newPersonModel();

personModel.PersonName= "曹操";

personModel.PersonId= 0;int res =dao.InsertOne(personModel);if (res > 0)

{

Console.WriteLine("插入成功,Id为" +res);

}

Console.ReadKey();

}

0eb0572bd0e379c115e6edebd9fbe73a.png

三、Update

xml映射文件:

update person set Name = #PersonName# Where Id = #PersonId#

DAO层:

public intUpdateOne(PersonModel p)

{return (int)mapper.Update("UpdateOne", p);

}

static void Main(string[] args)

{

PersonDAO dao= newPersonDAO();

PersonModel personModel= newPersonModel();

personModel.PersonId= 10;

personModel.PersonName= "张三";int res =dao.UpdateOne(personModel);if (res > 0)

{

Console.WriteLine("修改成功");

}

Console.ReadKey();

}

四、Delete

xml映射文件:

Delete Person Where Id = #PersonId#

DAO层:

public intUpdateOne(PersonModel p)

{return (int)mapper.Delete("DeleteOne", p);

}public int UpdateOne(intid)

{return (int)mapper.Delete("DeleteOne", id);

}

static void Main(string[] args)

{

PersonDAO dao= newPersonDAO();

PersonModel personModel= newPersonModel();

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();这里就不详细介绍了。

提供一个封装的方法:

///

///执行事务///

///

///

public bool DoTransaction(Funcfun)

{

Instance().BeginTransaction();try{bool result =fun();if(result)

{

Instance().CommitTransaction();

}else{

Instance().RollBackTransaction();

}returnresult;

}catch(Exception ex)

{

Instance().RollBackTransaction();throw;

}finally{

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值