沉默之都

沉默,造就了我们的冷酷-程序的威力
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ThinkDev.Data组件介绍

Posted on 2013-01-29 10:47  基点项目师  阅读(405)  评论(0编辑  收藏  举报

1、ThinkDev.Data组件是ThinkDev组件系列之数据组件,目前主要提供MsSqlBudiler以及一个指导性数据层基类实现。
2、目前支持原生SqlBuilder、Linq to SqlBuilder、Linq to ObjectQuery三种工作方式
3、本组件生成的Sql语句会在数据库做编译缓存,性能差距忽略不计
4、考虑目前大部分Sql注入情况,目前尚未发现注入漏洞
5、本组件无任何外部依赖。

组件基本使用方式:

1、Linq to SqlBuilder模式

首先定义实体类定义
   public class UserInfo
   {
       public int UserID { get; set; }
       public string UserName { get; set; }
       public string NickName { get; set; }
       public int Sex { get; set; }
       public string HeadPic { get; set; }
       public string Introduction { get; set; }
       public string Other { get   ; set; }
       public DateTime RegTime { get; set; }
   }
   1、执行Insert操作
   UserInfo user = new UserInfo();
   user.UserID = 1;
   user.UserName = "V_UserName";
   user.NickName = "V_NickName";
   user.Sex = 1;
   user.HeadPic = "V_HeadPic";
   user.Introduction = "V_Introduction";
   user.Other = "V_Other";
   user.RegTime = DateTime.Now();
   public string GetSql()
   {
      string sql = SqlBuilder<UserInfo>.From(user, "dbo.UserInfo")
               .Insert()
               .AddInsert(u => u.UserName, u => u.NickName, u => u.Sex, u => u.HeadPic, u => u.Introduction, u => u.Other, u => u.RegTime)
               .GetSql();
   }
   2、执行Select操作
   Public string GetSql()
   {
      string sql = SqlBuilder<UserInfo>.From("dbo.UserInfo")
               .Select(u => u.UserName, u => u.NickName, u => u.Sex, u => u.HeadPic, u => u.Introduction)
               .Where(u => u.UserID > 10)
               .GetSql();
   }
   3、执行Update操作
   UserInfo user = new UserInfo();
   user.UserID = 1;
   user.UserName = "V_UserName";
   user.NickName = "V_NickName";
   user.Sex = 1;
   user.HeadPic = "V_HeadPic";
   user.Introduction = "V_Introduction";
   user.Other = "V_Other";
   Public string GetSql()
   {
      string sql = SqlBuilder<UserInfo>.From(user, "dbo.UserInfo")
               .Update()
               .Set(u => u.UserName, u => u.NickName, u => u.Sex, u => u.HeadPic, u => u.Introduction)
               .Where(u => u.UserID)
               .And(u=>u.UserName, MatchType.In, "user1", "user2", "user3")
               .GetSql();
   }


   //特别的,如果需要生成语句:UPDATE dbo.UserInfo  SET UserName = UserName + '_old' WHERE UserID = 1

   Public string GetSql()
   {
      string sql = SqlBuilder<UserInfo>.From(user, "dbo.UserInfo")
               .Update()
               .Set(u => u.UserName, u => u.UserName, "+", "_old")
               .Where(u => u.UserID)
               .And(u=>u.UserName, MatchType.In, "user1", "user2", "user3")
               .GetSql();
   } 

 

2、原生SqlBuilder模式

* 单表查询及排序
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
                 .Select()
                 .Where("Para1", "value1", SqlDbType.VarChar, 50)
                 .And<int>("Para2", 5, SqlDbType.Int, 0, MatchType.GreaterThanOrEqual)
                 .Or<DateTime>("Para3", DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")), SqlDbType.DateTime)
                 .OrderBy("ParaID", SortType.Desc)
                 .GetSql();    
   }
   或者
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
                 .Select()
                 .Where("Para1", "value1")
                 .And<int>("Para2", MatchType.GreaterThanOrEqual, 5)
                 .Or<DateTime>("Para3", DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")))
                 .OrderBy("ParaID", SortType.Desc)
                 .GetSql();    
   }

 

单表查询,及分页
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
                 .Select()
                 .Where("Para1", SqlDbType.VarChar, 50, MatchType.Equal, "value1")
                 .Skip(20)
                 .Take(10)
                 .OrderBy("ParaID", SortType.Desc)
                 .GetSql();       
   }
   或者
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
                 .Select()
                 .Where("Para1", MatchType.Equal, "value1")
                 .Skip(20)
                 .Take(10)
                 .OrderBy("ParaID", SortType.Desc)
                 .GetSql();       
   }

 

多表查询
   public string GetSql()
   {
      string sql = SqlBuilder.From("Table1")
               .Select("t0.*, t1.para3")
               .InnerJoin(new JoinTable("Table2").On("para1", MatchType.Equal, "para3").And("para2", MatchType.Equal, "val2"))
               .Where<int>("para0", MatchType.Equal, 10)
               .And("para3", MatchType.Equal, "val3")
               .GetSql();    
   }

 

 Count查询
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
               .SelectCount()
               .Where<int>("para0", MatchType.Equal, 10)
               .And("para1", MatchType.Equal, "val1")
               .GetSql();
   }
Max\Min查询
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
               .SelectMax("ID")
               .Where<int>("para0", MatchType.Equal, 10)
               .And("para1", MatchType.Equal, "val1")
               .GetSql();
   }
   或
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
               .SelectMin("ID")
               .Where<int>("para0", MatchType.Equal, 10)
               .And("para1", MatchType.Equal, "val1")
               .GetSql();
   }
In\Not In查询
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
               .SelectCount()
               .Where<int>("para0", MatchType.In, 1, 2, 3, 4, 5, 6)
               .And("para1", MatchType.NotIn, new string[]{"val1", "val2", "val3"})
               .GetSql();
   }
Update操作
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
               .Update()
               .Set("para0", "para0", SqlDbType.VarChar, 1024)
               .Set<int>("para1", 0, SqlDbType.Int)
               .Set("para2", "update para2", SqlDbType.VarChar, 50)
               .Where<int>("para3", SqlDbType.Int, 0, MatchType.GreaterThan, 1)
               .GetSql();
   }
   或者
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
               .Update()
               .Set("para0", "para0")
               .Set<int>("para1", 0)
               .Set("para2", "update para2")
               .Where<int>("para3", MatchType.GreaterThan, 1)
               .GetSql();
   }
Delete操作
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
               .Delete()
               .Where<int>("para0", SqlDbType.Int, 0, MatchType.GreaterThan, 1)
               .GetSql();
   }
   或者
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
               .Delete()
               .Where<int>("para0", MatchType.GreaterThan, 1)
               .GetSql();
   }
Insert操作
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
               .Insert()
               .AddInsert<int>("para0", 1, SqlDbType.Int)
               .AddInsert("para1", "UserName from sqlbuilder", SqlDbType.VarChar, 50)
               .AddInsert("para2", "Title from sqlbuilder", SqlDbType.VarChar, 50)
               .AddInsert("para3", "Body from sqlbuilder", SqlDbType.VarChar, 50)
               .AddInsert<int>("para4", 1, SqlDbType.Int)
               .GetSql();
   }
   或者
   public string GetSql()
   {
      string sql = SqlBuilder.From("TableName")
               .Insert()
               .AddInsert<int>("para0", 1)
               .AddInsert("para1", "UserName from sqlbuilder")
               .AddInsert("para2", "Title from sqlbuilder")
               .AddInsert("para3", "Body from sqlbuilder")
               .AddInsert<int>("para4", 1)
               .GetSql();
   }