Atitit.ati orm的设计and架构总结 适用于java c# php版

Atitit.ati orm的设计and架构总结 适用于java c# php

 

1Orm的目标 1

1.1. 动态obj 1

1.2. Hbapi(meger,save,update,del) 1

2Orm的概念 1

3动态obj 2

4參考 4

 

 

 

 

 

 

1. Orm的目标

1.1. 动态obj

1.2. Hbapi(meger,save,update,del)

2. Orm的概念

saveOrUpdate后的对象会纳入session的管理,对象的状态会跟数据库同步。再次查询该对象会直接从session中取,merge后的对象不会纳入session的管理,再次查询该对象还是会从数据库中取。.

 

对于hibernate。它的对象有三种状态。transient、persistent、detached

下边是常见的翻译办法:

transient:瞬态或者自由态

persistent:持久化状态

detached:脱管状态或者游离态

脱管状态的实例能够通过调用save()、persist()或者saveOrUpdate()方法进行持久化。

persist和merge: 没有和数据库进行同步

save和update:    处理后的数据处于持久状态。换句话说,调用sql进行和数据库同步的步骤。

总的来说,对于长事务的处理,应该使用persist和merge。降低数据库交互

 

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

 

 

3. 动态obj

 

Proj.amazon .spider

 public object hanlder(object obj, ClassLibrary1.com.attilax.lang.FilterFilterChain nextChain)

        {

            Dictionary<stringObject> ormObj = new Dictionary<stringobject>();

            ormObj.Add("table""ecs_goods");

 

 

            Dictionary<stringObject> flds_frm = (Dictionary<stringObject>)obj;

            Dictionary<stringObject> flds = new Dictionary<stringobject>();

            flds.Add("goods_name", flds_frm["title"]);

            flds.Add("goods_desc""goods_descxxx");

          //  flds.Add("good_nam

            ormObj.Add("fields", flds);

 

            AtiOrmX ormx = (AtiOrmX)new IocX().getBean("ormx");

 

            return ormx.save(ormObj);

        }

 

 

-------code

public  class AtiOrmX

    {

      public Ioc ioc;

 

      public Object save(Object ormObj)

      {

          String sql = SqlX.getSql(ormObj);

          Console.WriteLine("--orm sql:" + sql);

          DbUtil dbx = (DbUtil)ioc.getBean("dbx");

      return     dbx.exec(sql);

      }

}

 

 

 

 public class SqlX

    {

        public static string getSql(object ormObj)

        {

          //  throw new NotImplementedException();

            Dictionary<StringObject> ormobjMap = ((Dictionary<StringObject>)ormObj) ;

            Dictionary<StringObject> fldMap = (Dictionary<StringObject>)ormobjMap["fields"];

 

            System.Collections.Generic.List<object> flds = new List<object>();

            System.Collections.Generic.List<object> fld_vals = new List<object>();

            foreach (var item in fldMap)

            {

                flds.Add(item.Key);

                fld_vals.Add("'"+ item.Value+"'");

                Console.WriteLine(item.Key + item.Value);

            }

 

            String fld_s = ListX.join(",", flds);

            String v_s = ListX.join(",", fld_vals);

            String sql = " insert into " + ormobjMap["table"] + "(@flds)values(@vs)";

            sql = sql.Replace("@flds", fld_s); sql = sql.Replace("@vs", v_s);

            return sql;

        }

    }

 

 

 

    public class DbUtil

    {

 

        public Object exec(string sql)

        {

            MySqlConnection mysqlcon = this.getmysqlcon();

            mysqlcon.Open();

            MySqlCommand mysqlcom = new MySqlCommand(sql, mysqlcon);

            int r = mysqlcom.ExecuteNonQuery();

            mysqlcom.Dispose();

            mysqlcon.Close();

            mysqlcon.Dispose();

            return r;

        }

 

 

------ioc

 

 

          facMap.Add("dbx", () =>

          {

 

              DbUtil dbx = new DbUtil();

              return dbx;

 

          });

 

4. 參考

hibernate的各种保存方式的差别 (save_persist_merge) - 昼不懂夜的黑的日志 - 网易博客.html



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ArcGIS微课1000例】0043:ArcGIS缩略图的创建及应用

缩略图通常出现在地图文档中&#xff0c;便于在启动页面中快速打开指定的地图文档&#xff0c;提高效率。 文章目录一、缩略图预览二、缩略图创建一、缩略图预览 打开ArcMap软件&#xff0c;弹出启动窗口&#xff0c;在最近打开的文档中&#xff0c;可以看到两类&#xff0c;一…

JSP简单登录系统

Login登陆界面 <body> 登陆 <% session.invalidate();%> <form action"TestPW.jsp" method"post">用户名<input type"text" name"username"> 密码<input type"password" name"password&quo…

手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践

本文主要讲解了如何把ABP官方的在线生成解决方案运行起来&#xff0c;并说明了解决方案中项目间的依赖关系。然后手动实践了如何从0搭建了一个简化的解决方案。ABP官方的在线生成解决方案源码下载参考[3]&#xff0c;手动搭建的简化的解决方案源码下载参考[4]。一.ABP官方在线生…

Java捕获并处理线程失败抛出的异常

使用 UncaughtExceptionHandler 示例代码如下&#xff1a; Thread.UncaughtExceptionHandler handler new Thread.UncaughtExceptionHandler() { public void uncaughtException(Thread th, Throwable ex) {System.out.println("Uncaught exception: " ex);} }; Th…

【ArcGIS微课1000例】0044:ArcGIS使用山体阴影显示DEM的3种方法

本文讲解了ArcGIS使用山体阴影显示DEM的3种方法:“影像分析”窗口、使用山体阴影效果和山体阴影效果工具的不同之处。 文章目录 一、“影像分析”窗口二、使用山体阴影效果三、山体阴影工具一、“影像分析”窗口 使用山体阴影显示 DEM 的方法有两种。最简单并且最具交互效果的…

区块链每日投资指南(0129)-证监会副主席表示数字货币需要监管

上一周的走势依然是工作日下跌&#xff0c;周末拉升的结局。这主要原因依然是&#xff0c;周末不上班。最终政策出炉之前&#xff0c;市场恐怕还将继续震荡。下周的工作日恐怕会重演下跌的节奏。但是经过了17号&#xff0c;23号&#xff0c;26号三次筑底来看&#xff0c;如果政…

蓝绿发布、滚动发布、灰度发布,有什么区别?

在项目迭代的过程中&#xff0c;不可避免需要”上线“。上线对应着部署&#xff0c;或者重新部署&#xff1b;部署对应着修改&#xff1b;修改则意味着风险。目前有很多部署发布的技术, 这儿将常见的做一个总结。 上面所说难免有些抽象, 举一个情景例子, 加入你是微博项目负责…

iOS 音频开发

音频基础知识 组成 音频文件的组成&#xff1a;文件格式(或者音频容器) 数据格式(或者音频编码)。 文件格式(或音频容器)是用于形容文件本身的格式。 我们可以通过多种不同的方法为真正的音频数据编码。例如CAF文件便是一种文件格式&#xff0c;它能够包含MP3格式&#xff0c;…

【ArcGIS微课1000例】0045:ArcGIS制图模板的自定义与使用方法

怎样在ArcGIS中保存地图模板以在地图制图与打印之前使用呢? 文章目录 一、地图模板简介二、地图模板创建1. 创建模板2. 创建缩略图3. 保存模板三、地图模板使用一、地图模板简介 使用ArcMap打开一个已有的地图模板,【文件】→【新建】,任选一个模板,这里选择一个传统模板。…

api 接口开发理论 在php中调用接口以及编写接口

如&#xff1a;http://localhost/openUser.php?actget_user_list&typejson 在这里openUser.php相当于一个接口&#xff0c;其中get_user_list 是一个API&#xff08;获取用户列表&#xff09;&#xff0c;讲求返回的数据类型为JSON格式。 你只需要在你PHP代码中执行这条链…

怎么样的框架对于开发者是友好的?

云原生离.NET开发到底有多远&#xff1f;云原生的概念由来不久&#xff0c;故事从“上云”开始&#xff0c;伴随dorker、k8s等技术的推出&#xff0c;以及CNCF与各大云厂商的共同加持&#xff0c;云原生逐渐被大家所熟知。云原生不依赖具体的云&#xff0c;不管公有云还是私有云…

JS 烧脑面试题大赏

本文精选了20多道具有一定迷惑性的js题&#xff0c;主要考察的是类型判断、作用域、this指向、原型、事件循环等知识点&#xff0c;每道题都配有详细傻瓜式的解析&#xff0c;偏向于初学者&#xff0c;大佬请随意。 第1题 let a 1 function b(a) {a 2console.log(a) } b(a)…

苹果ios用js的Date()出现NaN问题解决办法

原文:苹果ios用js的Date&#xff08;&#xff09;出现NaN问题解决办法ios使用如下方法获得NaN&#xff0c;安卓手机则是正常计算&#xff0c;解决方法是换个这个时间的格式 new Date("2017-04-28 23:59:59").getTime() 换成如下方式就正常了&#xff0c;就是‘-’换成…

Thinkphp 验证码、文件上传

一、验证码 验证码参数 例题&#xff1a;登录时验证下验证码 LoginController.class.php <?php namespace Home\Controller; use Think\Controller; class LoginController extends Controller {public function Login(){if(empty($_POST)){$this->display(); } e…

ArcGIS实验教程——实验四十七:数据驱动页工具批量制作甘肃省各地级市人口七普专题图集

本实验详细讲解利用ArcGIS数据驱动页工具,制作甘肃省各地级市人口七普专题图集。 文章目录 1. 数据驱动页工具简介2. 甘肃省各地级市人口七普专题图集2.1 符号化及标注2.2 数据驱动页的创建2.3 数据驱动页面文本操作2.4 数据驱动页的导出1. 数据驱动页工具简介 数据驱动页面是…

为什么Java有GC调优而没听说过有CLR的GC调优?

前言在很多的场合我都遇到过一些群友提这样的一些问题&#xff1a;为什么Java有GC调优而CLR没有听说过有GC调优呢&#xff1f;到底是Java的JVM GC比较强还是C#使用的.NET CLR的GC比较强呢&#xff1f;其实业内已经有几位大佬的高赞文章和大家分享一下&#xff0c;主要讨论JVM和…

Ubuntu16.04 - 安装RabbitVCS,linux下的TortoiseSVN!!!

RabbitVCS 官网&#xff1a;http://rabbitvcs.org/ 1&#xff0c;添加PPA源。在shell里面执行下面命令&#xff1a; sudo add-apt-repository ppa:rabbitvcs/ppa 这个命令执行完毕后&#xff0c;查看执行结果看是否密钥导入成功&#xff0c;成功截图&#xff1a; 如果导入密钥失…

8 种最坑的SQL错误用法

1、LIMIT 语句 2、隐式转换 3、关联更新、删除 4、混合排序 5、EXISTS语句 6、条件下推 7、提前缩小范围 8、中间结果集下推 总结 sql语句的执行顺序&#xff1a; FROM <left_table>ON <join_condition><join_type>JOIN <right_table>WHERE &…

Vue根据菜单json数据动态按需加载路由Vue-router

每个菜单项对应一个页面组件&#xff0c;根据菜单项动态按需加载路由 路由配置的正确写法&#xff1a; /*router/index.js*/ import Vue from vue import Router from vue-router import url from ./url import store from ../storeVue.use(Router)const router new Router({/…

【ArcGIS微课1000例】0047:制图表达(2)---河流渐变效果的实现

当我们在ArcMap中加载河流数据时,得到的效果往往如图所示,仅仅是表示河流位置的线要素,既无法真实地反映河流的实际情况,同时在出图的时候也远没有任何美化效果。 文章目录 1.创建制图表达2.添加几何效果3.使用制图规则4.使用制图表达属性覆盖警告:这些操作会对您的数据库…