Atitit.ati orm的设计and架构总结 适用于java c# php版
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
Proj.amazon .spider
publicobjecthanlder(objectobj, ClassLibrary1.com.attilax.lang.FilterFilterChainnextChain)
{
Dictionary ormObj =newDictionary();
ormObj.Add("table","ecs_goods");
Dictionary flds_frm = (Dictionary)obj;
Dictionary flds =newDictionary();
flds.Add("goods_name", flds_frm["title"]);
flds.Add("goods_desc","goods_descxxx");
// flds.Add("good_nam
ormObj.Add("fields", flds);
AtiOrmXormx = (AtiOrmX)newIocX().getBean("ormx");
returnormx.save(ormObj);
}
-------code
publicclassAtiOrmX
{
publicIocioc;
publicObjectsave(ObjectormObj)
{
Stringsql =SqlX.getSql(ormObj);
Console.WriteLine("--orm sql:"+ sql);
DbUtildbx = (DbUtil)ioc.getBean("dbx");
returndbx.exec(sql);
}
}
publicclassSqlX
{
publicstaticstringgetSql(objectormObj)
{
// throw new NotImplementedException();
Dictionary ormobjMap = ((Dictionary)ormObj) ;
Dictionary fldMap = (Dictionary)ormobjMap["fields"];
System.Collections.Generic.List flds =newList();
System.Collections.Generic.List fld_vals =newList();
foreach(variteminfldMap)
{
flds.Add(item.Key);
fld_vals.Add("'"+ item.Value+"'");
Console.WriteLine(item.Key + item.Value);
}
Stringfld_s =ListX.join(",", flds);
Stringv_s =ListX.join(",", fld_vals);
Stringsql =" insert into "+ ormobjMap["table"] +"(@flds)values(@vs)";
sql = sql.Replace("@flds", fld_s); sql = sql.Replace("@vs", v_s);
returnsql;
}
}
publicclassDbUtil
{
publicObjectexec(stringsql)
{
MySqlConnectionmysqlcon =this.getmysqlcon();
mysqlcon.Open();
MySqlCommandmysqlcom =newMySqlCommand(sql, mysqlcon);
intr = mysqlcom.ExecuteNonQuery();
mysqlcom.Dispose();
mysqlcon.Close();
mysqlcon.Dispose();
returnr;
}
------ioc
facMap.Add("dbx", () =>
{
DbUtildbx =newDbUtil();
returndbx;
});
4.
hibernate的各种保存方式的差别 (save_persist_merge) - 昼不懂夜的黑的日志 - 网易博客.html