首页 > IT职业 > IT生活 > MyBatis.Net 学习手记
MyBatis.NET的前身为IBatis,是JAVA版MyBatis在.NET平台上的翻版,相对NHibernate、EntityFramework等重量级ORM框架而言,MyBatis.NET必须由开发人员手动写SQL,相对灵活性更大,更容易保证DB访问的性能,适用开发团队里有SQL熟手的场景。
下面是使用步骤:
1、到官网http://code.google.com/p/mybatisnet/ 下载相关dll和文档
Doc-DataAccess-1.9.2.zip
Doc-DataMapper-1.6.2.zip
IBatis.DataAccess.1.9.2.bin.zip
IBatis.DataMapper.1.6.2.bin.zip
一共有4个zip包
2、创建一个Web应用,参考下图添加程序集引用

3、修改web.config,主要是配置log4net,参考下面的内容:
1 23 4 95 6 7 810 1211 13 2314 2215 2116 17 18 19 20 24 <!-- Define some output appenders --> 25 7226 27 28 29 30 31 32 3833 34 35 36 3739 43 <!-- Set root logger level to ERROR and its appenders --> 4440 41 4245 49 <!-- Print only messages of level DEBUG or above in the packages --> 5046 47 48 51 5352 54 5655 57 5958 60 6261 63 6564 66 6867 69 7170
View Code
4、添加Providers.config
把从官方下载的压缩包解开,就能找到providers.config文件,里面定义了MyBatis.Net支持的各种数据库驱动,本例以oracle为例,把其它不用的db provider全删掉,只保留下oracleClient1.0,同时把enabled属性设置成true,参考下面这样:
1 24 5 6 7 <!--Oracle Support--> 8 25 26
View Code
把这个文件复制到Web项目根目录下
5、添加SqlMap.config,内容如下:
1 24 5 6 9 10 <!--db provider配置文件路径--> 117 8 12 13 <!--db provider类型及连接串--> 14 15 18 19 <!--db与Entity的映射文件--> 2016 17 21 23 2422
View Code
这个文件也复制到Web项目根目录下,它的作用主要是指定db连接串,告诉系统providers.config在哪? 以及db与entity的映射文件在哪?(映射文件后面会讲到,这里先不管)
6、在Oraccle中先建表Product以及Sequence,方便接下来测试
1 -- CREATE TABLE 2 CREATE TABLE PRODUCT 3 ( 4 PRODUCTID NUMBER NOT NULL, 5 PRODUCTNAME VARCHAR2(100), 6 PRODUCTCOMPANY VARCHAR2(100), 7 SIGNDATE DATE, 8 UPDATEDATE DATE 9 ); 10 -- CREATE/RECREATE PRIMARY, UNIQUE AND FOREIGN KEY CONSTRAINTS 11 ALTER TABLE PRODUCT 12 ADD CONSTRAINT PK_PRODUCT_ID PRIMARY KEY (PRODUCTID); 13 14 -- CREATE SEQUENCE 15 CREATE SEQUENCE SQ_PRODUCT 16 MINVALUE 1 17 MAXVALUE 9999999999999999999999999 18 START WITH 1 19 INCREMENT BY 1 20 CACHE 20;
View Code
7、创建Maps目录,并在该目录下,添加映射文件ProductMap.xml,内容如下:
1 24 5 6 <!--类的别名--> 7 9 108 11 <!--Product类与db表的映射--> 12 20 2113 1914 15 16 17 18 22 23 <!--查询所有记录--> 24 27 28 <!--查询单条记录--> 29 32 33 <!--插入新记录--> 34 59 6035 <!--oracle sequence的示例用法--> 36 42 43 <!--更新单条记录--> 4437 select SQ_Product.nextval as ProductId from dual 38 39 4145 50 51 52 <!--根据主键删除单条记录--> 5354 55 56 57 58
View Code
它的作用就是指定各种sql,以及db表与entity的映射规则,注意下insert中Sequence的用法!
8、创建实体类Product
1 using System;
2
3 namespace Web
4 {
5 public class Product
6 {
7 public int ProductId { get; set; }
8 public string ProductName { get; set; }
9 public string ProductCompany { get; set; }
10 public DateTime SignDate { get; set; }
11 public DateTime UpdateDate { get; set; }
12
13 public Product() { }
14 }
15 }
View Code
9、写一个通用的BaseDA类,对MyBatis.Net做些基本的封装
1 using IBatisNet.DataMapper;
2 using System.Collections.Generic;
3
4 namespace Web
5 {
6 public static class BaseDA
7 {
8 public static int Insert(string statementName, T t)
9 {
10 ISqlMapper iSqlMapper = Mapper.Instance();
11 if (iSqlMapper != null)
12 {
13 return (int)iSqlMapper.Insert(statementName, t);
14 }
15 return 0;
16 }
17
18 public static int Update(string statementName, T t)
19 {
20 ISqlMapper iSqlMapper = Mapper.Instance();
21 if (iSqlMapper != null)
22 {
23 return iSqlMapper.Update(statementName, t);
24 }
25 return 0;
26 }
27
28 public static int Delete(string statementName, int primaryKeyId)
29 {
30 ISqlMapper iSqlMapper = Mapper.Instance();
31 if (iSqlMapper != null)
32 {
33 return iSqlMapper.Delete(statementName, primaryKeyId);
34 }
35 return 0;
36 }
37
38 public static T Get(string statementName, int primaryKeyId) where T : class
39 {
40 ISqlMapper iSqlMapper = Mapper.Instance();
41 if (iSqlMapper != null)
42 {
43 return iSqlMapper.QueryForObject(statementName, primaryKeyId);
44 }
45 return null;
46 }
47
48 public static IList QueryForList(string statementName, object parameterObject = null)
49 {
50 ISqlMapper iSqlMapper = Mapper.Instance();
51 if (iSqlMapper != null)
52 {
53 return iSqlMapper.QueryForList(statementName, parameterObject);
54 }
55 return null;
56 }
57 }
58 }
View Code
10、然后就可以在Default.aspx.cs上测试了,参考下面的代码:
using System;
using System.Web.UI;
namespace Web
{
public partial class Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
//插入
var insertProductId = BaseDA.Insert
{
ProductCompany = "INFOSKY",
ProductName = "iGSA2",
SignDate = DateTime.Now,
UpdateDate = DateTime.Now
});
//查单条记录
var model = BaseDA.Get
ShowProduct(model);
Response.Write("
//修改记录
if (model != null)
{
model.ProductName = (new Random().Next(0, 99999999)).ToString().PadLeft(10, '0');
int updateResult = BaseDA.Update
Response.Write("update影响行数:" + updateResult + "
}
//查列表
var products = BaseDA.QueryForList
foreach (var pro in products)
{
ShowProduct(pro);
}
Response.Write("
//删除记录
int deleteResult = BaseDA.Delete("DeleteProductById", insertProductId);
Response.Write("delete影响行数:" + deleteResult + "
}
void ShowProduct(Product pro)
{
if (pro == null) return;
Response.Write(string.Format("{0} , {1} , {2} , {3} , {4}
",
pro.ProductId, pro.ProductName, pro.ProductCompany, pro.SignDate, pro.UpdateDate));
}
}
}
整个项目的目录结构如下:

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2508/viewspace-2801315/ ,如需转载,请注明出处,否则将追究法律责任。