对于现在这个项目对象开发的好处暂时大于坏处
service代码:
java 代码
- public class ClientGroupClientService {
- private Connection con;
- private ClientGroupClientDAO cgcdao;
- private final static int INSERT = 1;
- private final static int UPDATE = 2;
- private final static int DELETE = 3;
-
- public ClientGroupClientService() {
-
- con = ConnUtils.getDefaultConnection();
- cgcdao = new ClientGroupClientDAO(getPdao());
- }
-
-
-
-
-
- private PojoDao getPdao(){
- PojoDao pdao = new PojoDao();
- pdao.setView_name("V_CLIENTGROUPCLIENT");
- pdao.setPrimarykeyname("objectID");
- pdao.setP_insert("{call pkg_hedge.up_AddClientGroupClient(?,?,?)}");
- pdao.setP_update("{call pkg_hedge.up_ModClientGroupClient(?,?,?)}");
- pdao.setP_delete("{call pkg_hedge.up_DelClientGroupClient(?,?,?)}");
- return pdao;
- }
-
-
-
-
- public void getClientGroupCLientByPage(Page page) {
- int pageSize = page.getPageSize();
- int pageIndex = page.getPageIndex();
- int lastNum = pageIndex*pageSize;
- int beginNum = (pageIndex-1)*pageSize;
- ResultSet rs = cgcdao.getDataByPage(con, lastNum, beginNum);
- ClientGroupClient temp = null;
-
- List templist = null;
- if(rs!=null)
- try {
- templist = new ArrayList();
- while(rs.next()){
- temp = new ClientGroupClient();
- temp.setObjectID(new Long(rs.getLong("objectid")));
- temp.setClientID(rs.getString("clientid"));
- temp.setCreater(rs.getString("creater"));
- temp.setGroupID(new Long(rs.getLong("groupid")));
- templist.add(temp);
- }
- page.setList(templist);
- rs = cgcdao.getCountNum(con);
- if(rs!=null)
- if(rs.next()){
- page.setRecordCount(rs.getInt(1));
- page.setPageCount((page.getRecordCount()+(page.getPageSize()-1))/page.getPageSize());
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- temp = null;
- ConnUtils.close(rs, null, con);
- }
- }
-
- public String insert(List list){
- return cgcdao.operate(con, list, INSERT);
- }
-
- public String update(List list){
- return cgcdao.operate(con, list, UPDATE);
- }
-
- public String delete(List list){
- return cgcdao.operate(con, list, DELETE);
- }
-
- public String batchCRUD(List inserts,List updates,List deletes){
- String re_msg=null;
- if(inserts!=null && inserts.size()>0)
- re_msg = cgcdao.operate(con, inserts, INSERT);
- if(updates!=null && updates.size()>0)
- re_msg = cgcdao.operate(con, updates, UPDATE);
- if(deletes!=null && deletes.size()>0)
- re_msg = cgcdao.operate(con, deletes, DELETE);
- closeCon();
- return re_msg;
- }
-
- private void closeCon(){
- ConnUtils.close(con);
- }
-
- }
在批量的方法中调用dao层的抽象方法,好处是将同一过程的代码全部都抽象化,这样操作的前提是对象化的开发,一切参数都是对象化,包括传入数据库中存储过程的参数也是对象化的,这样开发的好处有两点:
第一:维护方便,需要修改的只有存储过程中的对象,和表现层的现实对象,中间过程不会变动特别是抽象的dao层不会变。
第二:简化开发代码,特别是简化了dao曾的代码,其他层的代码也大相径庭,特别是给予dorado的开发模式更是如此。
事例代码如下:
java 代码
- public abstract class AcceccDao {
- protected ResultSet rs;
- protected CallableStatement proc;
- protected PreparedStatement pst;
- protected Person person;
- protected Iterator it;
- private Object temp;
-
- protected PojoDao pdao;
- public AcceccDao() {
-
- }
-
-
-
-
-
-
-
-
-
-
- public AcceccDao(PojoDao pdao){
- this.pdao = pdao;
- }
-
-
-
-
-
-
-
-
- public ResultSet getDataByPage(Connection con, int lastNum,int beginNum ) {
- StringBuffer sb = new StringBuffer();
- try {
- sb.append("select * from (select vin.*,rownum rn from "+pdao.getView_name()+" vin where rownum <= ?) vout where rn > ?");
- if(pdao.getPrimarykeyname()!=null)
- sb.append(" order by vout."+pdao.getPrimarykeyname()+" asc");
- pst = con.prepareStatement(sb.toString());
- pst.setInt(1, lastNum);
- pst.setInt(2, beginNum);
- return pst.executeQuery();
- } catch (SQLException e) {
- e.printStackTrace();
- return null;
- }finally{
-
- }
- }
-
-
-
-
- public ResultSet getCountNum(Connection con){
- String sql = "select max(rownum) from "+pdao.getView_name();
- try {
- pst = con.prepareStatement(sql);
- return pst.executeQuery();
- } catch (SQLException e) {
- e.printStackTrace();
- return null;
- }
- }
-
-
-
-
-
-
-
-
-
-
-
- public String operate(Connection con, List list,int operateType) {
- try {
- String sql = null;
- switch (operateType) {
- case 1:
- sql = pdao.getP_insert();
- break;
- case 2:
- sql = pdao.getP_update();
- break;
- case 3:
- sql = pdao.getP_delete();
- break;
- }
- proc = con.prepareCall(sql);
- for(it = list.iterator();it.hasNext();){
- temp = (ClientGroupClient)it.next();
- proc.registerOutParameter(1, OracleTypes.INTEGER);
- proc.registerOutParameter(2, OracleTypes.VARCHAR);
- proc.setObject(3, temp);
- proc.execute();
- }
- return proc.getString(2);
- } catch (SQLException e) {
- e.printStackTrace();
- return null;
- } finally{
- temp = null;
- ConnUtils.close(null, proc, null);
- }
- }
- }
而实现类中dao的代码为:
java 代码
- public class ClientGroupClientDAO extends AcceccDao {
- public ClientGroupClientDAO(PojoDao pdao){
- super(pdao);
- }
- }
其中构造函数的参数为改到要操作的数据库中的信息,比如视图名,主键名,插入存储过程名,更新存储过程名,以及其他任何你需要的在dao的抽象层中需要的参数,都可以定义在这里。
java 代码
- public class PojoDao {
- private String view_name;
- private String primarykeyname;
- private String p_insert;
- private String p_update;
- private String p_delete;
-
-
- public PojoDao() {
- }
-
- public String getP_delete() {
- return p_delete;
- }
- public void setP_delete(String p_delete) {
- this.p_delete = p_delete;
- }
- public String getP_insert() {
- return p_insert;
- }
- public void setP_insert(String p_insert) {
- this.p_insert = p_insert;
- }
- public String getP_update() {
- return p_update;
- }
- public void setP_update(String p_update) {
- this.p_update = p_update;
- }
- public String getPrimarykeyname() {
- return primarykeyname;
- }
- public void setPrimarykeyname(String primarykeyname) {
- this.primarykeyname = primarykeyname;
- }
- public String getView_name() {
- return view_name;
- }
- public void setView_name(String view_name) {
- this.view_name = view_name;
- }
- }
在service中将这个PojoDao构造好就可以啦:
java 代码
- public ClientGroupClientService() {
- con = ConnUtils.getDefaultConnection();
- cgcdao = new ClientGroupClientDAO(getPdao());
- }
-
-
-
-
-
- private PojoDao getPdao(){
- PojoDao pdao = new PojoDao();
- pdao.setView_name("V_CLIENTGROUPCLIENT");
- pdao.setPrimarykeyname("objectID");
- pdao.setP_insert("{call pkg_hedge.up_AddClientGroupClient(?,?,?)}");
- pdao.setP_update("{call pkg_hedge.up_ModClientGroupClient(?,?,?)}");
- pdao.setP_delete("{call pkg_hedge.up_DelClientGroupClient(?,?,?)}");
- return pdao;
- }
数据库中也是基于type的变成模式.
好处还是很多的。
但是也有不利的地方:
例如我们本次采用的是oracle数据库,存储使用起来太麻烦了,pojo中要匹配oracle的字段类型,多做好多工作,并且在tomcat下能够运行,换成weblogic就跑不动了。
分享到:
相关推荐
白色简洁的艺术展示网页模板下载.zip
电商平台开发需求文档.doc
1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用KEIL 标准库开发,当前在STM32F030C8T6运行,如果是STM32F030其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、编译时请注意提示,请选择合适的编译器版本。
数电期末练习题.doc
交易流水证明_用于材料证明_20241225_174557.zip
计算机网络期末复习(第八版)谢希仁
汽车销售系统使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理汽车销售系统信息,查看汽车销售系统信息,管理汽车销售系统。 用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,还进行了对用户名称的模糊查询的条件。 汽车信息管理页面,此页面提供给管理员的功能有:查看已发布的汽车信息数据,修改汽车信息,汽车信息作废,即可删除,还进行了对汽车信息名称的模糊查询 汽车信息信息的类型查询等等一些条件。 汽车类型管理页面,此页面提供给管理员的功能有:根据汽车类型进行条件查询,还可以对汽车类型进行新增、修改、查询操作等等。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
电视盒子的远程输入法应用,可跨屏远程输入和跨屏远程控制盒子.7z
白色大气的旅游度假酒店企业网站模板下载.zip
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
标题中的“用python代码放烟花”表明我们将讨论如何使用Python编程语言来模拟烟花绽放的效果。在Python编程中,实现这样的视觉效果通常涉及到图形用户界面(GUI)或者更具体地说是图形渲染。描述中的内容与标题一致,暗示我们将深入探讨一个使用Python编写的烟花模拟程序。 `main.py`是这个项目的核心文件,它很可能是整个烟花秀的主入口点。在这个文件中,开发者可能定义了程序的主循环,以及调用其他模块如`particle.py`的代码。`particle.py`可能包含了粒子系统的设计,因为烟花效果通常是通过模拟无数粒子的运动来实现的。粒子系统是一种常见的计算机图形学技术,用于模拟大量独立对象(在这里是烟花)的行为。 在`particle.py`中,我们可以预期找到类或函数来定义烟花粒子的属性,比如位置、速度、颜色、生命周期等。这些粒子可能会随着时间的推移而改变状态,例如从升空到爆炸,再到散开形成绚丽的图案。开发者可能使用了物理学原理,如重力和随机力,来模拟粒子的运动。 `.gitignore`文件是一个配置文件,告诉Git版本控制系统忽略特定的文件或目录。在这个项目中,它可
白色创意风格的图片浏览源码下载.zip
白色大气风格的设计公司CSS3单页模板.zip
Chapter 03 复合数据类型-1(资源)项目中编写代码部分的源代码示例,包括石头剪刀布程序和用户登录以及增删改查程序
白色大气风格的电子邮件订阅模板下载.zip
IMG_20241225_230314.jpg
白色简洁风格的安卓游戏卡通动漫人物整站网站模板.zip
变电站红外电压电流互感器绝缘子检测图像数据集,数据集总共1600张左右图片,标注为VOC格式图像数据集,数据集总共1600张左右图片,标注为VOC格式。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。