EasyFas开源t框架说明

EasyFast开源框架下载链接:Download

EasyFast框架是一个快速开发框架,包含轻量级ORM模块、非DAL层事务解决方案(更轻松的用现有方法实现事务)、参数化查询解决方案、Web层MVC解决方案。

EasyFast说明文档

一、查询组件说明:

1、简介

EasyFast内置了非常灵活的查询方法,即可以拼字符串查询(速度快,安全性差),也可以参数化查询(速度较慢,安全性高)。查询条件可以用于CURD等任何操作,作为where方法的参数传入即可。

2、用法:

2.1、 拼字符串的方式较简单。相当于直接写where条件的sql语句。

//一个典型的查询例子

string where = "username like '%" + username + "%'";

//参数:要查询的字段,查询条件,排序字段

DataTable dtUser = bll.GetDataTable("*", where, "username");

2.2、 参数化查询要用到Condition对象。

Condition whereTxt = new Condition();

//相当于UserName='admin'

whereTxt.Add("UserName","admin");

//参数:要查询的字段,查询条件,排序字段

DataTable dtUser = bll.GetDataTable("*",whereTxt, "username");

2.3、表达式查询

表达式不区分大小写

表达式

含义

EQ

等于(=)

NEQ

不等于(<>)

GT

大于(>)

EGT

大于等于(>=)

LT

小于(<)

ELT

小于等于(<=)

LIKE

模糊查询

[NOT] BETWEEN

(不在)区间查询

[NOT] IN

(不在)IN 查询

EXP

表达式查询,支持SQL语法

 

 

示例如下:

EQ:等于(=)

   Condition filter = new Condition();

       filter.Add("id","eq",100);

       表示的查询条件就是 id = 100

 

NEQ:不等于(<>)

   Condition filter = new Condition();

       filter.Add("id","neq",100);

       表示的查询条件就是 id <> 100

 

GT:大于(>)

   Condition filter = new Condition();

       filter.Add("id","gt",100);

       表示的查询条件就是 id > 100

 

EGT:大于等于(>=)

   Condition filter = new Condition();

       filter.Add("id","egt",100);

       表示的查询条件就是 id >= 100

 

LT:小于(<)

   Condition filter = new Condition();

       filter.Add("id","lt",100);

       表示的查询条件就是 id < 100

 

ELT:小于等于(<=)

   Condition filter = new Condition();

       filter.Add("id","elt",100);

       表示的查询条件就是 id <= 100

 

[NOT] LIKE:同sql的LIKE

   Condition filter = new Condition();

       filter.Add("name","like","%张%");

       表示的查询条件就是 name like ‘%张%’

 

[NOT] BETWEEN: 同sql的[NOT] BETWEEN

   Condition filter = new Condition();

       filter.Add("mdate","between","2012-9-8,2012-10-6");

       表示的查询条件就是 mdate between 2012-9-8 and 2012-10-6

 

[NOT] IN: 同sql的[NOT] IN

   Condition filter = new Condition();

       filter.Add("id","in","1,2,3,4");

       表示的查询条件就是 id in (1,2,3,4)

 

EXP: 自定义查询

  filter.Add("id","in","1,2,3,4");

  可以改成:

  filter.Add("_exp","id in (1,2,3,4)");

  exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。

 

2.4、组合查询

  Condition filter = new Condition();

       filter.Add("id","in","1,2,3,4");

  filter.Add("name","like","%张%");

    最后的查询条件就是:id in (1,2,3,4) and name like ‘%张%’

  

   组合查询中用“或(or)”的例子:

  Condition filterOr = new Condition();

      filterOr.Add("id","in","1,2,3,4");

  filterOr.Add("name","like","%张%");

  filterOr.Add("_logic","or");

   Condition filter = new Condition();

       filter.Add("description","like","%钓鱼岛%");

   filter.Add("_complex", filterOr);

最后的查询条件就是:(id in (1,2,3,4) or name like ‘%张%’) and description like ‘%钓鱼岛%’

二、 事务组件说明:

1、 简介:

DAL中的每个添加、修改、删除数据的方法都支持EFTransaction,所以它可以复用已有的方法而不必在DAL中新增支持事务的方法。如果 使用EFTransaction,在每个方法运行时都只会提取每个方法中的sql语句和参数但不执行,最后在调用它的commit方法时批量执行。如果失 败将自动回滚。此对象最多可允许99条sql语句批量执行。

 2、用法 一个典型的例子:

EFTransaction tran = new EFTransaction();
BLLA.Delete(ID, tran);
BLLB.Delete(ID, tran);
if (tran.Commit())
{
    ToShow("删除成功!", backUrl);
} 

3、其他方法:

  当然你也可以直接用TransactionScope分布式事务,不过Oracle得装额外的组件,装了几次反正我没有安装成功过。

三、 DAL层说明:

1、DAL层简介:

DAL层使用反射+特性写的一个泛型类,只要把Model传入即可实现增删查改等大量的方法,程序员几乎可以不用写任何方法。与以前相比一个Model对应一个Dal类相比极大提高了效率和准确率。

大致实现原理如下: 先根据传入的Model反射出内部的属性数组,此时相当于获取了表中的每个字段,平时写的insert方法不就是insert into table (xxx) values(xxx),xxx用属性名称代替即可。其他方法类似。

2、 多表查询:

有两种多表查询的方法

第一:把视图(其实是sql语句)写在App_Data下ViewData.xml文件:

<ViewData>
        <Name>view</Name>
        <SQL>
        <![CDATA[
(select b.*,d.departmentname from businessdepartment b left join department d on b.businessdepartmentid=d.departmentid) as a
        ]]>
    </SQL>
  </ViewData>

Name是视图名称 SQL是拼视图的sql语句,sql语句外要加括号 如果是sqlserver还要加 “as 别名”,此方法对数据库依赖性小,性能稍差。

第二:直接在数据库中写视图。此方法对数据库依赖性大,性能稍高。

调用方法如下:

DataTable GetDataTable(string strTable, string what, string where, string orderby);

第一个参数指视图名称,如果传空则查询默认的Model对应的表。如果参数非空则先查xml文件中的视图 ,如果没有再查数据库中的视图。

一个使用视图的例子:

/// <summary>
/// 检查是否可修改或删除 返回true 说明有关联数据不可删除
/// </summary>
/// <param name="opercode"></param>
/// <returns>返回true 说明有关联数据不可删除</returns>
public bool CheckCanDeleteOrUpdate(string rescode)
{
     BLL.Ucpermission bllUCPermit = new BLL.Ucpermission();
     DataTable dtpermission = bllUCPermit.GetDataTable(
    "view_incpermission", 
    "permitcode", 
    "permitcode like 'add%' ", 
    "permitcode");
      return dtpermission.Rows.Count > 0;
}

3、 多字段更新

调用如下方法:

public int UpdateForWhere(Hashtable keyValue, string where)

public int UpdateForWhere(Hashtable keyValue,Condition where)

keyValue参数存储更新的字段和更新的值。where是更新的条件。

使用示例:

//更新用户登陆信息
Hashtable userUpdate = new Hashtable();
userUpdate.Add("loginnum", modelUserInfo.loginnum + 1);
userUpdate.Add("lastdate", DateTime.Now.ToLocalTime());
userUpdate.Add("lastip", LoginIP);
BLL.Ucuser bll = new BLL.Ucuser();
bll.UpdateForWhere(userUpdate, "userid = 1");

4、 分页 有两个方法:

//获取总数       

int total = bll.GetPaginationCount(Condition where);   

//获取列表

DataTable GetPaginationData( string fieldNames, string orderby, Condition where, int startItem, int endItem)

当然还有返回IList<T>的重载方法,where查询条件也可以是字符串。  

5、 其他方法GetModel、Delete、DeleteForWhere等方法比较简单,还有很多的重载方法,大家自己看吧。

6、 多数据库支持

其实此框架内置了MySQL、SQLServer、SQLite多数据的支持并留有接口用户可自行扩展,但是只是最轻量级的支持,不是说一个项目用 SQLServer写完了就可以顺利切换其他数据库。因为各个数据库的SQL语句写法可能不一样,比如TSQL的substring在PLSQL里就是 substr,所以程序中拼接的一些SQL字符串可能不能顺利移植。如果书写注意,修改量应该不算大。

数据库相关配置在Web.config中:

<connectionStrings> 

<!--mysql-->       

<add name="DataBase" connectionString="连接字符串"/>   

</connectionStrings>   

<appSettings>       

<!--可选项 SQLite MySQL SQLServer-->      

<add key="DataBaseType" value="SQLite"/>   

</appSettings>

如果修改数据库类型 上面两个地方需要同时修改。

四、 BLL层说明:

都继承BLL这个基类即可继承增删查改等方法。也可以写自定义方法。

例如:

public class Ucresource : BLL<Model.Ucresource>
{
            /// <summary>
            /// 自定义方法 根据条件获取资源列表
            /// </summary>
            /// <param name="whereTxt">查询条件</param>
            /// <returns>List<Model.Ucresource></returns>
                  public List<Model.Ucresource> GetListByWhere(string where)
            {
                    return GetList(null, where, " ResName ASC ");
            }
}

五、 Model层说明:

此层较简单,写相关属性即可。例子:

public class Ucuser
{
    /// <summary>
    /// 用户账号
   /// </summary>
     [StrLen(6)]
      public string username { get; set; }
}

说明:[StrLen(6)]特性指定属性值的长度,添加或修改方法会自动截断过长的赋值,防止报错。

这个Model还是属于贫血Model,大家可以自由扩展,如 表单提交时的自动验证、Code-First等功能。

六、 Web层说明:

  Web层是自己开发的MVC。路由在WebConfig中配置,可用正则匹配。模板引擎是用Nvelocity效率较高。

  具体说明:稍后会写 呵呵。

    Web层有一个简易的权限Demo。URL输入http://ip:port即可自动路由至登录页面。 用户名admin 密码 123123 默认用SQLite数据库。

七、 结尾说明:

  如果有报错可能是没有引用相关dll,dll都放在web层的dll目录中。另外sqlite可能会报只读错误,属性里改成可读写就行。

--------------------------------------

欢迎您,进入 我系程序猿 的cnBlog博客。

你不能改变你的过去,但你可以让你的未来变得更美好。一旦时间浪费了,生命就浪费了。

You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.

--------------------------------------

分享到QQ空间  

原文地址:https://www.cnblogs.com/jqmtony/p/2910799.html