Posted on 2008-05-12 22:49
JacksonLin 阅读(250)
评论(7) 编辑 收藏
JackonQuery 1.02 beta1
前言:
继前文JacksonQuery在前一版本的速度和设计的单向性做了重大调整.
对前文的可以代替DAL的失言表示道歉.
比EntityFramwork,更灵活,清晰,简单易用.(就是更SB)
感谢jvk(blog名)对我介绍Subsonic,这东西实在强大,不过复杂了点.我迟点再细细研究.
比Dataset性能好上好几陪.
比SqlHelper更简单,易用,灵活度若减.速度在多于3至4个参数JacksonQuery性能更优.
Linq更没得比了~
详细说明后继
实例:
A.数据库设计(自己写)

B.实体类(自己写)

Code
1
public sealed class MsgInf
2
{
3
public shopIDType ShopID
4
{
5
get;
6
set;
7
}
8
public string LogMsg
9
{
10
get;
11
set;
12
}
13
public DateTime LogDate
14
{
15
get;
16
set;
17
}
18
public LogStateCodeType LogState
19
{
20
get;
21
set;
22
}
23
}
C.写连接数据库配置(自己写)

Code
1
static class Program
2
{
3
[STAThread]
4
static void Main()
5
{
6
Application.Run(new Form2());
7
}
8
9
private static string Connection_DevSimTestDB = ConfigurationManager.ConnectionStrings["Connection_DevSimTestDB"].ConnectionString;
10
public static JacksonQuery TestDB
11
{
12
get
13
{
14
return new JacksonQuery(Connection_DevSimTestDB, "T");
15
}
16
}
17
}
D.开始操作数据库(注意没有DAL层)
1
JacksonQuery jq = Program.TestDB;
2
3
Guid ShopID = new Guid("656b55d5-c705-4465-8a64-66e8180bca00");
4
DateTime LogDate = DateTime.Now;
5
6
MsgInf msgTarget = new MsgInf();
7
msgTarget.LogMsg = "test8";
8
msgTarget.LogDate = DateTime.Now;
9
msgTarget.LogState = LogStateCodeType.test3;
10
msgTarget.ShopID = ShopID;
11
MsgInf msgTarget2 = new MsgInf();
12
msgTarget2.LogMsg = "test8";
13
msgTarget2.LogDate = DateTime.Now;
14
msgTarget2.LogState = LogStateCodeType.test3;
15
msgTarget2.ShopID = ShopID;
16
List<MsgInf> msgsTarget = new List<MsgInf>(2);
17
msgsTarget.Add(msgTarget);
18
msgsTarget.Add(msgTarget2);
19
20
21
/**/////插入,更新 ok
22
int insertRut = jq.Execute("InsertLog", ShopID, "test4", LogDate, 3);
23
int insertRut2 = jq.ExecuteI<MsgInf>("LogAdd2", msgTarget);
24
int insertRut3 = jq.Executes<MsgInf>("InsertLog", msgsTarget, true, JLStudio.IsolationLevel.Unspecified);
25
26
27
/**/////////返回单值//ok
28
int LogCountRut = (int)jq.GetReturn("CountLog(ShopID,LogDate)", ShopID, LogDate);//单输出列可忽略不写
29
int LogCountRut2 = (int)jq.GetReturn("CountLog(CountL,LogDate,ShopID)", null, LogDate, Guid.Empty);//输入位置被忽略
30
31
32
/**///////返回list ok
33
List<MsgInf> msgs1 = jq.GetList<MsgInf>("GetTodayLogs");
34
List<MsgInf> msgs2 = jq.GetList<MsgInf>("GetLogs", ShopID, LogDate);
35
List<MsgInf> msgs3 = jq.GetList<MsgInf>("GetLogs(ShopID,LogDate)", ShopID, LogDate);
36
List<MsgInf> msgs4 = jq.GetList<MsgInf>("GetLogs(LogDate,ShopID)", LogDate, ShopID);
37
38
39
/**///////TSQL ok
40
List<MsgInf> msgs5 = jq.GetList<MsgInf>("select * from Tbl_Log2");
41
int insertRut4 = (int)jq.Execute("update Tbl_Log set LogState=1 where ShopID='{0}' and LogState is null", ShopID);
42
List<MsgInf> msgs6 = jq.GetList<MsgInf>("select * from Tbl_Log where ShopID='{0}'", ShopID);
43
44
45
/**/////事务
46
JacksonQuery jq2 = Program.TestDB;
47
try
48
{
49
jq2.BeginTran(JLStudio.IsolationLevel.ReadUncommitted);
50
int insertRut5 = jq2.ExecuteI<MsgInf>("InsertLog", msgTarget);
51
int insertRut6 = jq2.ExecuteI<MsgInf>("InsertLog", msgTarget);
52
53
//throw new Exception("just a test");
54
jq2.CommitTran();
55
}
56
catch
57
{
58
jq2.RollbackTran();
59
throw;
60
}
功能包括:
一句完成所有单存储过程或TSQL操作.
事务操作更简单易用(小于3骨句).
可以对DA返回实体数据集,例如:List<MsgInfo>
可以对DA输入参数为数据实体,例如MsgInfo ,或数据实体集 List<MsgInfo>,并提供事务操作.
可输入任意参数(必须按照JQL JacksonQueryLanguage),并进行智能转换.
输入参数可以有限定的的参入.以及类型智能转换.缺失预校.
智能实体类到数据库元素的映射以及类型转换.(除了xml)
支持简单单值返回.输出DataReader.支持TSQL.
减小80%以上的DAL代码,以及80%以上的DAL代码维护.提高生产效率.
JacksonQuery类图:

作者:
TrackBack:http://www.cnblogs.com/JacksonLin/
Mail: linjiachenggz@qq.com
JacksonLin 广州尔诺科技有限公司 APIEngine架构师