一、查询select
还记得第一篇示例中是如何读出数据库里3条数据的吗?就是调用了一个QueryForList方法,从方法名就知道,查询返回列表。
1、QueryForList 返回List强类型数据集合
来看看方法重载:
从重载可以看出,其实只是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();
}
跳过了第一条数据“刘备”,查询出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();
}
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();
}
三、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