一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的批量删除与更新-阿里云开发者社区

开发者社区> 橘子红了呐> 正文

一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的批量删除与更新

简介:
+关注继续查看

系列回顾

          前面的文章一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的基本操作和一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的条件查询两篇文章我演示了ORM的基本使用并引申到开发中最常见的条件查询业务,今天我基于前一篇文章的条件查询的基础演示根据条件的批量删除与更新。

问题提出

          在演示ORM的基于操作一文中我们演示了基于单记录(实体)的删除(Update)和更新(处理),但是没有提到指量记录的更新与删除,本文旨在提出一种ORM应用中的解决方案并演示他的用法。

如果解决

          批量更新与删除数据记录的本质是执行带批量查询条件的Update和Delete语句,ORM组件要完成这样的功能,所实现的思想就是根据条件生成批量更新的SQL语句,批量删除的SQL语句新式: delete +数据库表名+ where + 条件表达式,批量更新的SQL语句新式:update+数据库表名+set+(列名=?[,…])+ where + 条件表达式。

          既然我们知道了这样的处理方法,那么我们就可以转换为ORM组件的表示方式进行处理,在ORM组件的ITable接口中存在着以下三个方法:

    /// <summary>
    /// 从数据库中删除数据表记录。
    /// </summary>
    /// <param name="condition">数据查询条件。</param>
    /// <remarks>删除操作所影响的数据行数。</remarks>
    void Delete(Condition condition);

    /// <summary>
    /// 根据条件更新数据库表中的指定列的值。
    /// </summary>
    /// <param name="colValues">要更新的列及指定的值。</param>
    /// <param name="condition">数据查询条件。</param>
    /// <remarks>更新操作所影响的数据行数。</remarks>
    void Update(ColumnCollection colValues,Condition condition);

    /// <summary>
    /// 根据条件更新数据库表中的指定列的值。
    /// </summary>
    /// <param name="colValues">要更新的列及指定的值。</param>
    /// <param name="condition">数据查询条件。</param>
    /// <remarks>更新操作所影响的数据行数。</remarks>
    void Update(IDictionary<string, object> colValues,Condition condition);

          Delete方法使用很简单,带上删除记录的条件对象即可,Update方法的使用则复杂一些,除了设置更新记录的条件,还得设置更新列的内容,提供两种表示形式,ColumnCollection 集合与字典集合,其目的是完成字典名=?(值)的表示形式。

演示简介

          关于条件查询以及条件的构造的知识差不多也就是这些,讲起来也没有什么讲头,重点才于如何组合这些条件实现复杂的业务,在今天的案例中我选择性的演示几个条件的用法,所使用的数据还是商品字典,达到以下的功能:

           1.删除记录ID从100到500的记录并且单位为“1*瓶/瓶”的所有商品。

           2.更新商品编码前2位为“1a”并且单位为“1*袋/袋”的所有商品的商品说明为“垃圾货”,本演示使用update的两种重载。

          实现,在ClassLibDemo.DAL.SQLServer项目的类ProductList增加以下代码:

    public void DeleteProduct(int iStart, int iEnd, string unit)
    {
        Condition condition = this.CreateCondition();
        List<int> values = new List<int>(2);
        values.Add(iStart);
        values.Add(iEnd);
        condition.AddElement("IDN", values, ElementType.BetWeen);
        condition.AddElement("UNIT", unit);

        this.Delete(condition);
    }

    public void UpdateProductDescription(string code, string unit,string desc)
    {
        Condition condition = this.CreateCondition();
        condition.AddElement("CODE", code, ElementType.MatchPrefix);
        condition.AddElement("UNIT", unit);

        Dictionary<string, object> values = new Dictionary<string, object>();
        values.Add("DESCRIPTION", desc);
        this.Update(values,condition);
    }        

    public void UpdateProductDescription2(string code, string unit,string desc)
    {
        Condition condition = this.CreateCondition();
        condition.AddElement("CODE", code, ElementType.MatchPrefix);
        condition.AddElement("UNIT", unit);

        ColumnCollection values = new ColumnCollection(this);
        values.AddColumn("DESCRIPTION",DbType.String,desc);
        this.Update(values,condition);
    }        

         我们在控制台演示项目中使用这些查询:

    class ConditionUpdate
    {
        /// <summary>
        /// 删除记录ID从到的记录并且单位为“*瓶/瓶”的所有商品。
        /// </summary>
        public void DemoConditionDelete()
        {
            ProductList table = new ProductList();
            table.OrmAccessor = OrmContext.OrmAccessor;
            table.DeleteProduct(100, 500, "1*瓶/瓶");

            System.Console.WriteLine("删除完成");
        }

        /// <summary>
        /// 更更新商品编码前2位为“1a”并且单位为“1*袋/袋”的所有商品的商品说明为“垃圾货”。
        /// </summary>
        public void DemoConditionUpdate()
        {
            ProductList table = new ProductList();
            table.OrmAccessor = OrmContext.OrmAccessor;
            table.UpdateProductDescription("1a", "1*袋/袋", "垃圾货");

            System.Console.WriteLine("更新完成");
        }

        /// <summary>
        /// 删更新商品编码前2位为“1a”并且单位为“1*袋/袋”的所有商品的商品说明为“垃圾货”。
        /// </summary>
        public void DemoConditionUpdate2()
        {
            ProductList table = new ProductList();
            table.OrmAccessor = OrmContext.OrmAccessor;
            table.UpdateProductDescription2("1a", "1*袋/袋", "垃圾货");

            System.Console.WriteLine("更新完成");
        }

          案例输出结果:

image

SQL事件探查:

7E{66WJJRR[X9]}X)Q88V49

         有关本例子所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本文代码下载:ORM.Demo3.rar。 

链接

一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录

AgileEAS.NET平台开发指南-系列目录

AgileEAS.NET应用开发平台介绍-文章索引

AgileEAS.NET平台应用开发教程-案例计划

AgileEAS.NET官方网站

敏捷软件工程实验室

QQ群:116773358


作者:魏琼东 
出处:http://www.cnblogs.com/eastjade
关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教! 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。


    本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/10/04/1841861.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
案例_点菜| 学习笔记
快速学习案例_点菜
13 0
我为什么要放弃 RESTful,选择拥抱 GraphQL
REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。
5 0
如何保障消息中间件 100% 消息投递成功?如何保证消息幂等性?
一、前言 我们小伙伴应该都听说够消息中间件MQ,如:RabbitMQ,RocketMQ,Kafka等。引入中间件的好处可以起到抗高并发,削峰,业务解耦的作用。
6 0
为什么 MySQL 不推荐默认值为 null ?
通常能听到的答案是使用了NULL值的列将会使索引失效,但是如果实际测试过一下,你就知道IS NULL会使用索引,所以上述说法有漏洞。
8 0
Google 开源的依赖注入库,比 Spring 更小更快!
Guice是Google开源的一个依赖注入类库,相比于Spring IoC来说更小更快。Elasticsearch大量使用了Guice,本文简单的介绍下Guice的基本概念和使用方式。
9 0
首长,Redis 性能优化十三条军规立好了,请过目~
Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻谨记优化铁则,才能使得Redis性能发挥到极致。 本文将会介绍十三条性能优化军规,开发过程中只要按照执行,性能必能质的飞跃。
9 0
我为什么要放弃 RESTful,选择拥抱 GraphQL
REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。
8 0
一次非常有意思的 SQL 优化经历:从 30248.271s 到 0.001s
场景 我用的数据库是mysql5.6,下面简单的介绍下场景
6 0
3404
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载