zoukankan      html  css  js  c++  java
  • 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空间  

  • 相关阅读:
    KnockoutJS(2)-监控属性
    KnockoutJS(1)-数据模型
    Stimulsoft Reports报表工具
    Knockout.js 初探
    web网页的表单排版利器--960css
    用一个div模拟textarea的实现
    正则表达式笔记4-封装class
    正则表达式笔记3
    正则表达式笔记2
    正则表达式笔记1
  • 原文地址:https://www.cnblogs.com/jqmtony/p/2910799.html
Copyright © 2011-2022 走看看