zoukankan      html  css  js  c++  java
  • 我的ORM之六-- 批量

    我的ORM索引

    很多时候,批量方案是解决性能的关键

    批量插入

    SqlBulkCopy

    利用 SqlBulkCopy 是性能最高的方式

    实现:

    var s = dbr.Menu.NewMyOqlSet();
    s.AddRow(o => o.Id == 1 & o.Name == "33");
    s.AddRow(o => o.Id == 2 & o.Name == "444");
    s.BulkCopy2Db();

     

    Insert2Db 方法:(内部调用BeginBatchInsert 方法)

    var set = dbr.Menu.NewMyOqlSet();
    set.Columns = new Columns(dbr.Menu.Name).ToArray();
    set.AddRow(o => o.Name == "33");
    set.AddRow(o => o.Name == "444");
    set.Insert2Db();

    BeginBatchInsert:

    var set = dbr.Menu.BeginBatchInsert(dbr.Menu.Name);
    set.Insert(o => o.Name == "33");
    set.Insert(o => o.Name == "444");
    set.Execute();

    生成如下SQL:

     insert into [S_Menu]
        ([Name])
         output inserted.[ID]
         values
        ('33'),('444');

    批量更新

    Update2Db:(内部调用 BeginBatchUpdate)

    var s = dbr.Menu.NewMyOqlSet();
    s.AddRow(o => o.Id == 1 & o.Name == "33");
    s.AddRow(o => o.Id == 2 & o.Name == "444");
    s.Update2Db(o => o.CorpID == 1, o => new SimpleColumn[] { o.Id }, o => new SimpleColumn[] { o.Name });

    Update2Db方法中的

    第一个参数是 Where 的条件,表示一个基本的数据约束,用于防止数据污染。可以为 null

    第二个参数表示关联的唯一列

    第三个参数是 更新时设置的列。

    BeginBatchUpdate方法

    var beg  = dbr.Menu.BeginBatchUpdate(o=>o.CorpID == 1 ,o=>o.Id);
    beg.Update(o => o.Name == "33" & o.Id == 1 );
    beg.Update(o => o.Name == "444" & o.Id == 2);
    beg.Execute();

    生成的SQL:(MySql)

    CREATE TEMPORARY TABLE `Temp_MyOql_16`(
    `PID` int,`Css` varchar(50),
    `Url` varchar(250),
    `Wbs` varchar(50),
    `IsLeaf` bit,
    `Name` nvarchar(50),
    `SortID` real,
    `Group` nvarchar(50),
    `IsValidate` bit,
    `ID` int) 
    ENGINE=MEMORY DEFAULT CHARSET=utf8;
    
    insert into `Temp_MyOql_16`(`PID`,`Css`,`Url`,`Wbs`,`IsLeaf`,`Name`,`SortID`,`Group`,`IsValidate`,`ID`) values
    (null,null,null,null,null,'33',null,null,null,1),
    (null,null,null,null,null,'444',null,null,null,2);
    
    UPDATE `S_Menu` AS t,
        `Temp_MyOql_16` AS o 
    SET 
        t.`PID` = o.`PID`,
        t.`Css` = o.`Css`,
        t.`Url` = o.`Url`,
        t.`Wbs` = o.`Wbs`,
        t.`IsLeaf` = o.`IsLeaf`,
        t.`Name` = o.`Name`,
        t.`SortID` = o.`SortID`,
        t.`Group` = o.`Group`,
        t.`IsValidate` = o.`IsValidate`
    WHERE
        t.`CorpID` = 1 and t.`ID` = o.`ID`; drop table `Temp_MyOql_16`;

    批量推送

    批量推送,是结合批量更新和批量,当有一个数据集,需要更新或添加到数据库中时使用。有则更新,无则添加。

    var insertType = dbr.PlatForm.CarType.NewMyOqlSet();
    //insertType.添加数据
    insertType.Save2Db(o => null, o => o.OtherID, true);

    Save2Db方法中的

    第一个参数:是更新的条件 。

    第二个参数是 更新时,关联的唯一列。

    第三个参数表示是否要保留   更新条件结果集 - MyOqlSet结果集。 如: 参数为false , 更新条件是 Id < 100 , MyOqlSet 结果集的Id 是 1-50 ,则删除数据库中 Id 从50到100 的记录。

  • 相关阅读:
    Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹
    SQL的别名和SQL的执行顺序和SQL优化
    Linux中如何配置sudo用户
    Linux的ssh的known_host文件
    Linux的SSH服务
    Linux的图形模式和文本模式以及单用户模式切换
    Linux服务器磁盘空间占满问题
    PLSQL Developer连接本地Oracle 11g数据库
    Linux常用命令学习
    OAuth2 .net MVC实现获取token
  • 原文地址:https://www.cnblogs.com/newsea/p/4530600.html
Copyright © 2011-2022 走看看