[构建自己的持久层]七、开始开发DAO之二
2010-08-30 13:51
435 查看
如何实现数据的保存?翻译Sql语句啊
先来看代码
public Serializable save(PojoRoot pojo,Entity entity,Serializable id) throws DAOException
{
//System.out.println(entity.getName()+"=====");
try
{
if(id!=null)pojo.setMyProperty(entity.getIdname(),id);
if(id==null){
//System.out.println("getIDDDDDDDDDDDDDDDDD");
id=entity.getIdRule().getID();
pojo.setMyProperty(entity.getIdname(),id);
}
}catch(Exception ex)
{
}
boolean isroot=true;
Entity root=EntityManager.getRoot(entity);
isroot=root.equals(entity);
String sql="insert into "+EntityManager.FormatColumName(entity.getName());
String column="";
String paras="";
int paracount=0;
Object[] properties=entity.getProperties().keySet().toArray();
Map clobs=new HashMap();
for(int i=0;i<properties.length;i++)
{
//当是ID且是顶级实体时,不插入ID
//System.out.println(properties[i]);
if(properties[i].equals(entity.getIdname()) && isroot && id==null)
{
continue;
}
column+=","+EntityManager.FormatColumName(properties[i]+"");
//blob处理
paras+=",?";
paracount++;
}
sql+="("+column.substring(1,column.length())+")";
sql+=" values ("+paras.substring(1,paras.length())+")";
//System.out.println(sql);
showsql(sql);
PreparedStatement stmt=getCStmt(sql);
try
{
//stmt.execute(sql);
int k=0;
for(int i=0;i<properties.length;i++)
{
if(properties[i].equals(entity.getIdname()) && isroot && id==null)
{
continue;
}
k++;
String p=Util.Object2String(pojo.getMyProperty(properties[i]+""));
if(!this.data.charset.equals(""))
{
p=new String(Util.null2String(p).getBytes("UTF-8"),data.charset);
}
stmt.setString(k,p);
//System.out.println(k+":"+p);
}
stmt.executeUpdate();
if(isroot && id==null && entity.getIdRule().getID()==null)
{
Result rs=this.query("select "+EntityManager.FormatColumName(entity.getIdname())+" as ID from "+EntityManager.FormatColumName(entity.getName())+" order by "+EntityManager.FormatColumName(entity.getIdname())+" desc",null,0,1);
rs.next();
//System.out.println(rs.getString("ID")+"idddddddddddddddd");
id=rs.getString("ID");
}
pojo.setMyProperty(entity.getIdname(),id+"");
//System.out.println("myID"+id);
return (Serializable)pojo.getMyProperty(entity.getIdname());
//return rs.getInt("ID");
}catch(Exception ex)
{
throw new DAOException(ex);
}finally
{
try
{
closeconn(stmt);
}catch(Exception e)
{
}
}
}
是的,就是这样,我们知道一个POJO实例,通过实例能得Entity,通过Entity能得到属性,通过属性我们就可以组装sql
insert into {Entity.Name} ({Entity.Properties...}) values ({POJO.getProperties....})
简单吧,就是这么简单。
写出一样东西来很容易,但写好一样东西很不容易,写出健壮的程序来更是难上加难。
怎么实现查询,怎么实现Update与Delete,怎么实现事务处理留给大家来思考.
先来看代码
public Serializable save(PojoRoot pojo,Entity entity,Serializable id) throws DAOException
{
//System.out.println(entity.getName()+"=====");
try
{
if(id!=null)pojo.setMyProperty(entity.getIdname(),id);
if(id==null){
//System.out.println("getIDDDDDDDDDDDDDDDDD");
id=entity.getIdRule().getID();
pojo.setMyProperty(entity.getIdname(),id);
}
}catch(Exception ex)
{
}
boolean isroot=true;
Entity root=EntityManager.getRoot(entity);
isroot=root.equals(entity);
String sql="insert into "+EntityManager.FormatColumName(entity.getName());
String column="";
String paras="";
int paracount=0;
Object[] properties=entity.getProperties().keySet().toArray();
Map clobs=new HashMap();
for(int i=0;i<properties.length;i++)
{
//当是ID且是顶级实体时,不插入ID
//System.out.println(properties[i]);
if(properties[i].equals(entity.getIdname()) && isroot && id==null)
{
continue;
}
column+=","+EntityManager.FormatColumName(properties[i]+"");
//blob处理
paras+=",?";
paracount++;
}
sql+="("+column.substring(1,column.length())+")";
sql+=" values ("+paras.substring(1,paras.length())+")";
//System.out.println(sql);
showsql(sql);
PreparedStatement stmt=getCStmt(sql);
try
{
//stmt.execute(sql);
int k=0;
for(int i=0;i<properties.length;i++)
{
if(properties[i].equals(entity.getIdname()) && isroot && id==null)
{
continue;
}
k++;
String p=Util.Object2String(pojo.getMyProperty(properties[i]+""));
if(!this.data.charset.equals(""))
{
p=new String(Util.null2String(p).getBytes("UTF-8"),data.charset);
}
stmt.setString(k,p);
//System.out.println(k+":"+p);
}
stmt.executeUpdate();
if(isroot && id==null && entity.getIdRule().getID()==null)
{
Result rs=this.query("select "+EntityManager.FormatColumName(entity.getIdname())+" as ID from "+EntityManager.FormatColumName(entity.getName())+" order by "+EntityManager.FormatColumName(entity.getIdname())+" desc",null,0,1);
rs.next();
//System.out.println(rs.getString("ID")+"idddddddddddddddd");
id=rs.getString("ID");
}
pojo.setMyProperty(entity.getIdname(),id+"");
//System.out.println("myID"+id);
return (Serializable)pojo.getMyProperty(entity.getIdname());
//return rs.getInt("ID");
}catch(Exception ex)
{
throw new DAOException(ex);
}finally
{
try
{
closeconn(stmt);
}catch(Exception e)
{
}
}
}
是的,就是这样,我们知道一个POJO实例,通过实例能得Entity,通过Entity能得到属性,通过属性我们就可以组装sql
insert into {Entity.Name} ({Entity.Properties...}) values ({POJO.getProperties....})
简单吧,就是这么简单。
写出一样东西来很容易,但写好一样东西很不容易,写出健壮的程序来更是难上加难。
怎么实现查询,怎么实现Update与Delete,怎么实现事务处理留给大家来思考.
相关文章推荐
- [构建自己的持久层]六、开始开发DAO之一
- 构建自己的C/C++插件开发框架(四)——核心层设计和实现
- 使用Napa开发工具创建app - 开始构建SharePoint app系列
- 今天开始正式进行Google Earth 开发,自己顶下先
- 构建自己的C/C++插件开发框架(四)——核心层设计和实现
- 一、为什么要构建自己的持久层,我们构建一个什么样的持久层
- 构建自己的C/C++插件开发框架(二)——总体功能
- 使用SAP HANA Express Edition开始用自己的设备构建大数据应用
- 毫无废话: 从0开始一点一滴用java开发自己的B/S构架--1.2
- VSX开发之语言服务系列(5)——构建自己的Scanner和Pareser
- 构建自己的C/C++插件开发框架(三)——总体结构
- 构建自己的C/C++插件开发框架
- 构建自己的插件开发框架(c++)
- 构建自己的C/C++插件开发框架(四)——核心层设计和实现
- 构建自己的代码库及软件开发不能是加工作坊--及一个简单的Linux C程序开发框架—linux-dev-framework
- [建站日记]31day—开始构建自己的网站
- 安卓开发中非常炫的效果集合 这几天开发的时候,想做一些好看而且酷炫的特效,于是又开始从网上收集各种特效资源。下面给大家一些我喜欢的把,附代码,喜欢的看源代码,然后加到自己项目去把!! 一个开源项目
- 构建自己的C/C++插件开发框架
- 构建自己的C/C++插件开发框架
- 从今天开始学习iOS开发(iOS 7版)--构建一款App之设计用户界面