一、查询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