欢迎光临
我们一直在努力

不同于hibernate,利用通用持久类实现数据增、删、改、查,可极大提高开发效率-.NET教程,评论及其它

建站超值云服务器,限时71元/月

dao+通用持久类,实现数据增、删、改、查

 

标题中“dao类”指net.newxy.dbm.basedao或其子类,“通用持久类”指net.newxy.dbm.dynadto

利用newxy(新坐标)dao类及通用持久类对数据进行增、删、改操作可以不依赖于struts,运用系统不一定要支持struts,方法极其简便。

一、通用持久类简介:

1net.newxy.dbm.dynadto类图

net.newxy.dbm.dynadto类图

2net.newxy.dbm.dynadto在数据操作中作为方法的参数

对数据的增、删、改都是以通用持久类对象为参数调用net.newxy.dbm.dbm的方法来完成的。如:

net.newxy.dbm.basedao dao=new net.newxy.dbm.basedao();

net.newxy.dbm.dynadto dynadto=new net.newxy.dbm.dynadto();

dynadto.set_table(“table1”);//设置数据库表名

dynadto.set(“field1”,“value1”);//为字段field1赋值

……

插入或更新记录:dao.update(dynadto);

……

删除记录:dao.remove(dynadto);

……

获取某条记录:dao.load(dynadto);

通用持久类net.newxy.dbm.dynadtonewxy(新坐标)框架中起作重要作用。

3net.newxy.dbm.dynadtopublic void set(string name, object value)方法中value数据类型

dynadto.set(“field1”,”value”)为字段field1赋值,调用了dynadtopublic void set(string name, object value)方法,value值应是数据库字段类型对应的java类型,或它们的.tostring()字符串符。如字段类型是intvalue可以是integer类型或字符串型,如在sybase里字段类型是smalldatetime类型,value应是java.sql.timestamp类型或字符串型。

4.newxy(新坐标)对数据库表主关键字段的处理及对主关键字段的设计建议

(1)    表的主关键字段没有其它意义,只作为记录的唯一标志;

(2)    只用一个字段作为主关键字段;

(3)    主关键字段用数字类型或字符型,这样newxy(新坐标)可以自动为其赋值;

(4)    对多字段联合构成主关键段,或非数字型非字符型字段,newxy(新坐标)不能自动为其赋值,开发者需解决为主关键字段赋值问题;

(5)    如果没有主关键字段,newxy(新坐标)会假设第一个字段作为主关键字段;

(6)    dao.update(dynadto)方法会检测主关键字段是由一个还是多字段组成,如果是一个字段,还会检是否可以保存数字串。如果主关键段只有一个(也可能是没有主键字段时默认的第一个字段),而且可以赋给数字串,newxy(新坐标)会为其赋值,否则如果没有利用dynadto.set(string name,object value)方法为主关键字段赋值,dao.update(dynadto)方法会抛出异常。

 

二、dao类简介:

newxy(新坐标)最终对数据的操作是通过net.newxy.dbm.dbm的一些方法实现的。操作数据时对数据库连接采用迟连接,早释放的原则。net.newxy.dbm.basedao继承自net.newxy.dbm.dbm,实现了dbm类的唯一抽象方法connection getconnection(string dsjndi) throws exception

1dao类及相关类的类图

    net.newxy.dbm.basedao及相关类的类图

2net.newxy.dbm.basedao类获取数据库连接的方法

basedaojdbc/default为数据源的资源名。如果没有jdbc/default资源名,以web-inf/classes/下的newxy.properties文件中定义的ds.default的属性值为数据源的资源名,如果通过这样的资源名还是得不到数据库连接,basedao尝试在web-inf/classes/下的newxy.properties中得到drvierurluserpass四属性值来获取数据库连接。但开发者可以通过继承net.newxy.dbm.dbmnet.newxy.dbm..basedao,过载connection getconnection(string dsjndi) throws exception方法,通过写代码的方法获取数据库连接。如果前述方法得不到数据库连接,dao类实例就会调用开发者写的获取数据库连接方法。

请参考:newxy.properites 数据库连接、字符编码、dao类的配置文件

3.开发者需要关心的dao类几个方法

object findbysql(string sql) throws exception; //result type is dynaformbean

object findbysql(string sql,boolean refresh,boolean cache,long interval) throws exception;  

object findbyprimarykey(object parms) throws exception;

object callbymethodname(string callbymethodname, object parms) throws exception;

list list(string sql) throws exception;

object load(object dto) throws exception;//*

object update(object dto) throws exception;//*

void remove(object dto) throws exception;//*

void preparestatement(string sql) throws sqlexception;

void preparecall(string sql) throws exception;

object preparecall(class c,string sql,object[] params) throws exception;

本篇只讲解三个带 * 的方法,它们与持久类有关。

 

三、dao+通用持久类完成对数据库的操作:

newxy(新坐标)在设计数据插入与更新的方法时采用了delphic++builder数据更新策略,dataset有个方法applyupdates,如果是在组件中新增一行,作插入操作,如果是对组件中某条记录数据更改,作更新操作。newxy(新坐标)net.newxy.dbm.dbm用个update(object dto)方法,如果持久类对象不含主关键字段值,作插入操作,如果含有的主关键字段值表中已存在,作更新操作。

1. 数据插入:object update(object dto) throws exception;

举例:

    try{

net.newxy.dbm.basedao dao=new net.newxy.dbm.basedao();

net.newxy.dbm.dynadto dynadto=new net.newxy.dbm.dynadto();

        dynadto.set_table(“table1”);//设置表名

        dynadto.set(“field1”,”……”);//为字段field1赋值

        dynadto.set(“field2”,”……”);//为字段field2赋值

        object result=dao.update(dynadto);

    }catch(exception e){

        ……

}

例中两字段field1field2不是主关键字段,不用设置主关键段值,主关键字段值会自动得到,是原有最大值加一。

如果设置主关键字段值,如:dynadto.set(“id”,”100”);newxy(新坐标)会检查赋给的主关键字值是否已存在,如果存在,作更新(update)操作,如果不存在,作插入(insert)操作。

判断是更新还是插入操作,可以根据返回的result值来判断,如果result值为空,是作更新操作,如果result不空是作插入操作。

object result=dao.update(dynadto);

如果想需要知道自动赋给的主关键字段值,可以用如下方法:

        object result=dao.update(dynadto);

        object idvalue=null;

        if(result!=null)

idvalue=((dynadto)result).get(“id”);

            idvalue就是自动赋给的主关键字段值。

2. 数据更新:

    try{

net.newxy.dbm.basedao dao=new net.newxy.dbm.basedao();

net.newxy.dbm.dynadto dynadto=new net.newxy.dbm.dynadto();

        dynadto.set_table(“table1”);//设置表名

        dynadto.set(“id”,”……”);//为主关键字段赋值

        dynadto.set(“field1”,”……”);//为字段field1赋值

        dynadto.set(“field2”,”……”);//为字段field2赋值

        object result=dao.update(dynadto);

    }catch(exception e){

        ……

}

与数据插入相比增加了dynadto.set(“id”,value)作用是为主关键字段赋值。

需注意:如果dynadto.set(“id”,value)赋给的value在数据库表中已存在,dao.update(dynadto)方法仍然作更新操作。

3. 数据删除

    try{

net.newxy.dbm.basedao dao=new net.newxy.dbm.basedao();

net.newxy.dbm.dynadto dynadto=new net.newxy.dbm.dynadto();

        dynadto.set_table(“table1”);//设置表名

        dynadto.set(“id”,”……”);//为主关键字段赋值

        dao.remove(dynadto);

    }catch(exception e){

        ……

}

4. 单条记录查询

    try{

net.newxy.dbm.basedao dao=new net.newxy.dbm.basedao();

net.newxy.dbm.dynadto dynadto=new net.newxy.dbm.dynadto();

        dynadto.set_table(“table1”);//设置表名

        dynadto.set(“id”,”……”);//为主关键字段赋值

        object result=dao.load(dynadto);

        org.apache.commons.beanutils.dynabean bean=( org.apache.commons.beanutils.dynabean)result;

        object field1value=bean.get(“field1”);//获取字段field1的值;

        object field2value=bean.get(“field2”); //获取字段field2的值

    }catch(exception e){

        ……

}

注意:newxy(新坐标)获取数据结果类型分两种:org.apache.commons.beanutils.basicdynabean类型和list类型,而list方法get(int item)返回的也是org.apache.commons.beanutils.basicdynabean类型。

org.apache.commons.beanutils.dynabeanorg.apache.commons.beanutils.basicdynabean类图:

org.apache.commons.beanutils.dynabeanorg.apache.commons.beanutils.basicdynabean是开源项目的一个类和一个接口。org.apache.commons.beanutils.dynabean接口正是struts动态表单类dynaactionform实现的接口。也是newxy(新坐标)通用持久类net.newxy.dbm.dynadto及通用动态formbeannet.newxy.struts_faces.dynaformbean实现的接口。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 不同于hibernate,利用通用持久类实现数据增、删、改、查,可极大提高开发效率-.NET教程,评论及其它
分享到: 更多 (0)