仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 750|回复: 12
打印 上一主题 下一主题

[学习教程] JAVA编程:针对hibernate,jdbc,sql的思索

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:12:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流.sql1.对象与数据库的映照,关头在于对象干系的映照,可是没做到很幻想,设置过量,把持庞大,别的还会堕落。实在实质在于对象不敷自在。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"
};
/*
<?xmlversion="1.0"?>
<MapObject>
<!--相似hibernate的映照,可是更简单了解,并且能够省略字段映照-->
<Objecttablename="sale_orders"class="org.test.pojo.SaleOrder">
<OneToManytablename="sale_order_details"class="org.test.pojo.SaleOrderDetail">
<!--主细表映照-->
<ParentKey>id</ParentKey>
<ChildKey>id</ChildKey>
</OneToMany>
<!--字段映照可选,通常为不异或依据ROR划定规矩-->
<FieldMap>可选...</FieldMap>
</Object>
<Objecttablename="sale_order_details"class="org.test.pojo.SaleOrderDetail">
<!--附加代码表映照1对1干系-->
<OneToOnetablename="products"class="org.test.pojo.Product">
<ParentKeytablename="sale_order_details">product_id</ParentKey>
<ChildKeytablename="products">id</ChildKey>
</OneToMany>
<FieldMap>可选...</FieldMap>
</Object>
<Objecttablename="sale_order_details"class="org.test.pojo.SaleOrderDetail">
<OneToOnetablename="product_catalogs"class="org.test.pojo.ProductCatalog">
<ParentKeytablename="sale_order_details">product_catalog_id</ParentKey>
<ChildKeytablename="product_catalogs">id</ChildKey>
</OneToMany>
<FieldMap>可选...</FieldMap>
</Object>
<Objecttablename="product_catalogs"class="org.test.pojo.ProductCatalog">
<FieldMap>可选...</FieldMap>
</Object>
</MapObject>
*/
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没有供应对象形态的缘故原由。
不外如许用函数的办法来办理多承继的成绩仍是对照洁净恬逸的,既能够静态,又能够静态,为所欲为,天真性、效力和兼容性兼得。

C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊
蒙在股里 该用户已被删除
沙发
发表于 2015-1-19 16:19:54 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
再见西城 该用户已被删除
板凳
发表于 2015-1-24 13:56:11 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
活着的死人 该用户已被删除
地板
发表于 2015-1-29 20:13:56 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
第二个灵魂 该用户已被删除
5#
发表于 2015-2-1 11:12:42 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
分手快乐 该用户已被删除
6#
发表于 2015-2-7 04:30:49 | 只看该作者
是一种为 Internet发展的计算机语言
小魔女 该用户已被删除
7#
发表于 2015-2-20 13:18:18 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-4 01:35:55 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
乐观 该用户已被删除
9#
发表于 2015-3-7 13:09:20 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
兰色精灵 该用户已被删除
10#
发表于 2015-3-11 07:36:43 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
莫相离 该用户已被删除
11#
发表于 2015-3-11 17:25:21 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
灵魂腐蚀 该用户已被删除
12#
发表于 2015-3-12 15:23:38 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
变相怪杰 该用户已被删除
13#
发表于 2015-3-19 23:26:30 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 11:31

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表