Atitit.ati?orm的設計and架構總結?適用于java?c#?php版
?
1.?Orm的目標 1
1.1.?動態obj 1
1.2.?Hb的api(meger,save,update,del) 1
2.?Orm的概念 1
3.?動態obj 2
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://blog.csdn.net/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