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

1. Orm的目标1

1.1. 动态obj1

1.2. Hb的api(meger,save,update,del)1

2. Orm的概念1

3. 动态obj2

4. 参考4

1. Orm的目标

1.1. 动态obj

1.2. Hb的api(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://www.cnblogs.com/attilax/

3. 动态obj

Proj.amazon .spider

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

{

Dictionary<string, Object> ormObj = new Dictionary<string, object>();

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

Dictionary<string, Object> flds_frm = (Dictionary<string, Object>)obj;

Dictionary<string, Object> flds = new Dictionary<string, object>();

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<String, Object> ormobjMap = ((Dictionary<String, Object>)ormObj) ;

Dictionary<String, Object> fldMap = (Dictionary<String, Object>)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

Atitit.ati orm的设计and架构总结 适用于java c# php版的更多相关文章

  1. Java开源生鲜电商平台-监控模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-监控模块的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-监控模块的设计与架构,我们谈到监控,一般设计到两个方面的内容: 1. 服务器本身的监控.(比如:linux ...

  2. Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载)

    Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构,我采用以下三种维度来讲解 1.  代码层面. 2.  数 ...

  3. Java生鲜电商平台-redis缓存在商品中的设计与架构

    Java生鲜电商平台-redis缓存在商品中的设计与架构 说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而 ...

  4. Java生鲜电商平台-供应链模块的设计与架构

    Java生鲜电商平台-供应链模块的设计与架构 说明:Java开源生鲜电商平台中供应链模块属于卖家的行为,也就是卖家如何管理他们自己的供应商,包括结算方式,压款方式,结算周期等等,超出了我这个B2B平台 ...

  5. Java生鲜电商平台-商品价格的设计与架构

    Java生鲜电商平台-商品价格的设计与架构 说明:Java开源生鲜电商平台-商品价格的设计与架构,主要是对商品的价格进行研究与系统架构. 一.常见的电商价格 市场价(List Price):这个价格仅 ...

  6. Atitit.ati dwr的原理and设计 attilax 总结 java php 版本

    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本 1. dwr的优点相对于ajax来说..1 2. DWR工作原理1 3. Dwr的架构2 4. 自定义dwr ...

  7. Atitit.ati&#160;dwr的原理and设计&#160;attilax&#160;总结&#160;java&#160;php&#160;版本号

    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本号 1. dwr的长处相对于ajax来说.. 1 2. DWR工作原理 1 3. Dwr的架构 2 4. 自己 ...

  8. Atitit ati licenseService    设计原理

    Atitit ati licenseService    设计原理 C:\0workspace\AtiPlatf\src_atibrow\com\attilax\license\LicenseX.ja ...

  9. Atitit  文件上传  架构设计 实现机制 解决方案  实践java php c#.net js javascript  c++ python

    Atitit  文件上传  架构设计 实现机制 解决方案  实践java php c#.net js javascript  c++ python 1. 上传的几点要求2 1.1. 本地预览2 1.2 ...

随机推荐

  1. FTP客户端工具

    推荐使用8UFTP.小.快.好! 8UFTP工具分为8UFTP客户端工具和 8UFTP智能扩展服务端工具,涵盖其它FTP工具所有的功能.不占内存,体积小,多线程,支持在线解压缩.界面友好,操作简单,可 ...

  2. jQuery: on()特别的几种用法

    jQuery大家肯定用得非常的熟练了,没什么好讲的,今天为什么要写关于on这个事件绑定的API?主要还是因为看了大神的博文:web移动端浮层滚动阻止window窗体滚动JS/CSS处理;其中对于on用 ...

  3. mysql的存储目录

    1.MySQL的数据存储目录为data,data目录通常在C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server ...

  4. Mock -- 数据模拟

    作者:张云龙链接:https://www.zhihu.com/question/35436669/answer/62753889来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  5. 【LaTeX】E喵的LaTeX新手入门教程(2)基础排版

    换了块硬盘折腾了好久..联想的驱动真坑爹.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇文档框架嗯昨天我们已经编写了一个最基本的文档,其内容是这样的:\documentclass{ar ...

  6. jenkins的slave报错误: org.owasp.dependencycheck.data.nvdcve.DatabaseException: Exception retrieving vulnerability for cpe:/a:mysql:mysql:5.1.26

    目前的临时解决办法是通过任务分配到master节点跑

  7. Do Chrome extensions access iframes? chrome扩展插件访问所有iframes

    32down voteaccepted Yes, a Chrome Extension "content script" can run in all iframes (that ...

  8. tracepath 路由跟踪命令

    [root@c1 scripts]# tracepath 100.2.4.144    (备注:linux系统) 1: c1.nulige.com (100.2.4.144) 0.047ms pmtu ...

  9. Linux 设备驱动--- 并发 与 竞态 --- atomic_t --- atomic_dec_and_test --- 原子操作

    并发: 多个执行单元同时被执行. 竞态: 并发的执行单元对资源 ( 硬件资源和软件上的全局变量等 ) 的访问导致的竞争状态. 并发的处理: 处理并发的常用技术是加锁或者互斥,即保证在任何时间只有一个执 ...

  10. phpcms v9 wap手机门户站点内容页添加上一篇、下一篇的方法

    PHP源码修改:打开 phpcms\modules\wap\index.php 文件找到if(!$r || $r['status'] != 99) showmessage(L('info_does_n ...