仓酷云
标题:
JAVA网站制作之关于Hibernate编程的特性与思索
[打印本页]
作者:
冷月葬花魂
时间:
2015-1-18 11:12
标题:
JAVA网站制作之关于Hibernate编程的特性与思索
其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:编程 Hibernate的一些缺点:好比对象干系的映照设置过量,把持庞大;事件处置面对各类兼容成绩;HQL言语增添进修本钱等。并提出了一些减化和退步计划,详细请看上面的原文,你的倡议又怎样?
想了很长工夫hibernate的一些缺点
1.对象与数据库的映照,关头在于对象干系的映照,可是没做到很幻想,设置过量,把持庞大,别的还会堕落。实在实质在于对象不敷自在。
2.事件处置。这点上更简单出成绩,相对林林总总的事件办理器,要兼容是一个年夜成绩,总回在各类使用服务器上有良多成绩。其实质在于创立了一个自我数据存取小情况,一定面对各类兼容成绩。
3.HQL言语。创建对象查询言语,类SQL,可是分歧于任何一种SQL,调试情况庞大。实质在于创立了一种言语,增添进修本钱。
减化hibernate,将其退步成一个sql天生器,既能够保存原本的次要功效,又能够兼容各类使用服务器和数据库服务器,别的还不必要进修HQL言语。
只必要一系列的功效函数,作一下包装,再依据分歧数据库天生分歧的SQL便可,连数据库范例都不必指定,由于从Connection中能够取得数据库范例属性。
设想中的API:
publicObjectResultMapObject(ResultSetrs,Stringxml) //一行映照单个对象,能够用XML绑定,也能够不必。
publicListSQLMapObjects(Connectionconn,String[]sqls,Stringxml)//将一堆SQL映照成一个对象树,能够用xml来形貌绑定,也能够不必,仅利用ror体例的商定。
借助JDBC和SQL能够构建全部数据存取层。
映照单个对象的代码,将一行纪录映照成单个对象。sql能够是恣意的。
Connectionconn=DriverManager.getConnection(url);
PreparedStatementps=conn.prepareStatement(sql);
ResultSetrs=ps.executeQuery();
while(rs.next())
{
user=(Users)ResultMapObject(rs);
//TODO可使用user
}
映照对象树。
/*
sale_orders发卖定单表
sale_order_details发卖定单细表
products商品表
product_catalogs商品种别表
从sql中就能够剖析出
id是主I
sale_order_details.sale_order_id===>sale_orders.id
sale_order_details.product_catalog_id==>product_catalogs.id
sale_order_details.product_id==>products.id
*/
String[]sqls=newString[]{
"selectid,total_sum,memo,state,modify_date,creator,checkerfromsale_orders",
"selectid,sale_order_id,product_id,product_name,product_catalog_id,model,product_unit,product_amount,product_price,product_sum,memofromsale_order_details",
"selectid,name,catalog,model,price,unit,memo,createtime,state,code,productnofromproducts",
"selectid,name,memofromproduct_catalogs"
};
//不XML映照的,可是o法得知一对一仍是一对多仍是多对多的干系,以是一概建成多对多干系。
Listl=SQLMapObjects(conn,sqls);
/*
l的布局:
sale_orders[]
|-----sale_order_details[](sale_order_details.sale_order_id===>sale_orders.id)
|-----products[](sale_order_details.product_id==>products.id)
|-----product_catalogs[](sale_order_details.product_catalog_id==>product_catalogs.id)
*/
/*带xml*/
/*
sale_orders发卖定单表
sale_order_details发卖定单细表
products商品表
product_catalogs商品种别表
从sql中就能够剖析出
id是主I
sale_order_details.sale_order_id===>sale_orders.id
sale_order_details.product_catalog_id==>product_catalogs.id
sale_order_details.product_id==>products.id
*/
String[]sqls=newString[]{
"selectid,total_sum,memo,state,modify_date,creator,checkerfromsale_orders",
"selectid,sale_order_id,product_id,product_name,product_catalog_id,model,product_unit,product_amount,product_price,product_sum,memofromsale_order_details",
"selectid,name,catalog,model,price,unit,memo,createtime,state,code,productnofromproducts",
"selectid,name,memofromproduct_catalogs"
};
/*
id
id
可选...
product_id
id
可选...
product_catalog_id
id
可选...
可选...
*/
Stringxml="...";
//带xml映照
Listl=SQLMapObjects(conn,sqls,xml);
/*
l的布局:
sale_orders[]
|-----sale_order_details[](sale_order_details.sale_order_id===>sale_orders.id)
|-----products[](sale_order_details.product_id==>products.id)
|-----product_catalogs[](sale_order_details.product_catalog_id==>product_catalogs.id)
*/
固然类要事前写好,这里就不具体写了。
保留成绩更严峻,掏出来用sql映照已能够很好地办理了,基础上一个函数、一群SQL,加上极少的XML就能够表达分明了,可是这不克不及办理保留对象的成绩。
设想中的保留API.
publicvoidsaveObject(Connectionconn,Objectobj,Stringxml);//保留单个对象,复杂地将对象扩大成sql,同意xml映照,也能够不映照
publicvoidsaveObjects(Connectionconn,Listobjs,Stringxml);//将对象树保留到数据库
上一篇掏出的List某人工组合的List能够用saveObjects来保留,这个函数的义务就对照重了,由于没有形态,以是要判别修正过十分贫苦。
一种思绪是在对象是增添属性,然后由开辟者保护,好比界面上是不是修正很有多是有形态位的,这个形态位就能够用起来,然后函数依据这个形态位来判别是不是往更新。
一种思绪是从Class自己中就得知对象是不是被悔改,相似AOP,在修正的时分纪录一下,然后函数来判别是不是悔改,然后构成SQL来更新。
至于批量修正是刚强,间接用SQL便可,进修SQL比HQL的本钱要低,究竟这么多年了。
核心有用函数的思索:基础上都针对SQL的天生,或数据库函数的交换
publicStringgenerateInsertSQL(DBTypetype,Objectobj);//天生insert语句
publicStringgenerateUpdateSQL(DBTypetype,Objectobj);//天生update语句
publicStringgenerateSelectSQL(DBTypetype,Objectobj);//天生select语句
总之这个函数工具箱的思绪有这几条:
1.利用函数,而不是利用情况来取代JDBC或使用服务器。
2.利用成熟的SQL,而不是自创言语,最多增添SQL预处置器,将一些函数转成数据库相干,复杂的文本功效。
3.坚持对各类情况的兼容性。对象是洁净的,固然假如用AOP就很难说对象干不洁净了,不外基础上应当合用于一切的情况中。
弱点:因为没有了情况,保留对象有点贫苦,用SQL来办理批量更新和删除,需要时增添几个SQL语句天生器便可。保留对象树是一个年夜弱点,没有十分好的举措可以将对象树全部保留上去并且效力十分高,只要下面提到的两种不太完善的举措,这都是由于JVM没有供应对象形态的缘故原由。
不外如许用函数的办法来办理多承继的成绩仍是对照洁净恬逸的,既能够静态,又能够静态,为所欲为,天真性、效力和兼容性兼得。
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉,
作者:
谁可相欹
时间:
2015-1-19 16:11
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
飘灵儿
时间:
2015-1-24 13:44
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者:
乐观
时间:
2015-1-28 05:45
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者:
第二个灵魂
时间:
2015-1-28 05:47
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者:
变相怪杰
时间:
2015-2-5 11:53
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者:
分手快乐
时间:
2015-2-11 16:12
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者:
只想知道
时间:
2015-2-11 20:52
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者:
飘飘悠悠
时间:
2015-2-28 06:48
是一种使用者不需花费很多时间学习的语言
作者:
兰色精灵
时间:
2015-3-6 15:09
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者:
若相依
时间:
2015-3-13 02:39
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者:
灵魂腐蚀
时间:
2015-3-13 06:10
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者:
老尸
时间:
2015-3-20 14:44
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2