c#

位置:IT落伍者 >> c# >> 浏览文章

话说Hibernate和ADO.NET —练习随笔小记


发布日期:2023年03月31日
 
话说Hibernate和ADO.NET —练习随笔小记
最近在做一个JavaWeb程序用MyEclipse开发用Struts(*do)做开发框架Hibernate做数据库代理类负责对数据库的操作维持数据持久和数据访问Spring用来整和注入还用了Ajax在Java中实现真他妈的让人烦什么Ajax根本就是写JS脚本嘛(不过本来也是就是最原始的那种拉)自己手写了JS脚本好久没写过这么多了也当练习一下XMLHTTPRequest拉

要是中那就方便多了直接就拖AjaxControlToolkit控件个AJAX Extensions核心组件还有几十个ajax Toolkit控件有两边对联做广告的有做像Google智能提示的(说到这个我做每回有一个问题就是在指定了返回记录的Item每一行Css样式之后当用键盘上下的方向键移动所选条的时候它就出现了脚本错误也不能用方向键移动所选条了我试过了只要不设置class他就没一点问题能正常移动选择和智能提示但是不设置样式那哪看得?他默认都是黑字白背景不过不晓得是不是DIV层做的我以前用返回<span style=color:red>Jonllen</span>做测试他却没能返回Jonllen然后我对他进行Html编码和反编码都试过了也不行在页面里面要是能得到显示Html的效果(说到这里我呀有要叉开话题了等后面讲考试在说了)要是这样能行的话那也能设置它的Css style了但是就是不行不知道大家有没有碰到我这种情况过还请知道的大虾指点)还有做琐定冻结页面做实现的还有谈出的等等要什么有什么看你要实现什么功能了但我觉得就是MS这些Ajax控件调用WebServer的太多了就有时要新写个WebMethod不习惯感觉麻烦了不过这倒是顺了Ajax的本质咯就是要回调WebServer的Xml不过我觉得以前做的Ajax还可以他没有做成控件只是要引用dll回调的是一个Ajax方法我以前在VS里用AjaxProdll感觉还可以虽然此方法有很多局限性但用起来感觉挺方便的MS真是够人性化Sun也要学着点就好了不过当前Sun还是做好它的JEE规范在说吧

刚开始还可以就是JS不好怎么调试就只能做死了alert看执行到了那一步不一会儿JS搞定了我在JS里面调用的open url是一个servlet类然后在这里调用Hibernate对数据库操作以达到Ajax的异步处理因为我这个项目以前是连SQL Server 不过现在我要用MYSQL数据库了呵呵免费的那种我就把以前工程里面的Hibernate要连SQL Server 的三个驱动包给删了接着选择DB Browser(数据库浏览器)重新设置了Hibernate的数据连接Edit更改端口输入数据库口令还要添加一个MQSQL数据库连接驱动连接包(jar文件)找啊找在E盘选择配置OKNextFinish完成Open Connection一长串进度条到结尾后OK连接成功了一帆风顺点开一看几个database下面几个table都对数我删掉了以前的工程底下hibr包下的一些数据映射对象和相应的DAO数据访问然后Hibernate Reverse Engineering重新添加删除的那些Hibernate数据库映射对象用assigned(有主键)的用assigned用native(自动增长主键)用nativeOKHibernate代理类搞定现在只要看servlet里面DAO dao = new DAO()…对数据库操作完成!现在就看Ajax的了它是如何的伟大在不刷新的情况下异步的CallBack服务器配置一下WebLogicRedeploy重新部署Run运行打开Brower键如URL看效果咯满怀期待想着:onclick提交addshow()调用JS一个函数回发到服务器结果···返回的是一个alert(你所请求的页面有异常)呵呵~哎为什么类?我关闭一下调试在重新启动一下还是提示有异常为什么为什么为什么呢?我认真的检查了我一下JS代码认真的过了一遍JS里面的function一个个检查定义XMLHttpRequest对象sendRequest(url)发送函数请求processResponse()处理返回信息的函数等等sendRequest(url)发送函数请求对URL应该是这个问题我的url是servlet/FindServlet?sn= +ss;FindServlet是我工程ss包下面的FindServletjava的servlet类ss是在JS里面var的一个变量在细想了一下servlet/FindServlet?sn=+ss不是ss/FindServlet?sn=+ss吗?不是后来也用ss也测试了一下确实不是那是什么问题呢?难道问题不是出在URL上面url没错想了一阵了灵机一动测试一下不就知道了吗!我连忙打开FindServlet这个类一时间还很狠啪着自己的后老勺:你真笨啊!进入FindServlet在doGet方法里边String shen = requestgetParameter(sn);Systemoutprintln(shen);获取sn查询字符串(呵呵Net学多了)然后再在控制台输出保存运行真的输出了控制台里面输出了湖南我sn查询字符串的值那这么来说URL确实没有问题它已经把请求发送到我的这个FindServlet类里面来了这里我已经能接受到了接着在FindServlet类往下看在一些关键性的代码后加上Systemoutprintln(变量值);我习惯性调试Java的方法调试运行果然还没有执行完就报异常了控制台在输出了DAO前面的变量值后后面的就都没有输出了一定就是DAO的问题了!我把目光转到DAO第一行AddrtableDAO dao = new AddrtableDAO();就实例化绝对没问题List list = daofindAll(shen);应该问题Systemoutprint(listsize());此行在控制台没有输出结果List list = daofindAll(shen)findAll(shen)是按指定条件shen对数据库执行查询返回List集合的方法就是这句对数据库查询有问题了(一时间感觉自己真的了不起我这个人比容易较骄傲自满我自己都受不了自己了)马上写了一个static void main()方法测试果然是Hibernate代理数据库操作类出现了问提提示Can not Connection不能连接为什么类?连不上我明明在DB Browser里配置好了连MySQl的设置在那里连上了啊还可以看到数据库和表啊怎么建的Hibernate数据库代理类就连不上了类我马上转到了hibernatecfgxml Hibernate配置文件一看晕了怎么在配置文件里面用的还是以前的那个的配置设置我不是改成MySql了吗我知道了你在DB Browser选择好数据库连接对象并未更改Hibernate数据库连接配置晕了这MyEclipse怎么这么蠢啊不知道自动更改Hibernate配置文件唉癡哦手动更改后调试运行心想这次应该能OK了吧但结果总是出现意外老和所想的背道而驰的有出西西了一长串异常:什么Error Creating SessionFactory等一大片英文搞得我头都大了点异常进去看就是到了那些Hibernate那些砸七砸八的那些包的原类型里了一个个类N多代码看得真叫人烦拉想起就郁闷这MyEclipse调试可真JB麻烦又全英文版的(想起Net中调试哎```个人觉得Java中就是jar包太繁多了而一些重要的设置都保存在Xml的配置文件里面感觉喜欢拿xml配置文件出气!如页面导航等但内容多了就显得繁杂了就只能手动修改Source了)心里直骂Java垃圾不禁双手抱着后老勺往后仰看这天花板郁闷ING回下头来看到了这MyEclipse工具蔑视了工程一下回到电脑面前看啊看顺眼看了这些砸七砸八的包似乎少了什么东西凭直觉我又过了那些jar包文件一便细想了一翻又仔细看了那些包一遍我的MySql数据库驱动jar包文件类!怎么没有呢?我再Refresh一下还是没有看到啊!拐了我虽然删除了以前连Sql Server 个包但是怎么MySql的包怎么没有导进来呢?第一时间问为什么?难道又是DB Browser的问题你在那里选择Add JARS选择是驱动包文件是用的磁盘物理路径也就是说他没有自动把你所选择的包自动加在到你的工程里面进来了该死的DB Browser害得我Hibernate老是连不上这个问题好象只在你以前用一个数据源现在又换掉一个新的数据库连接时才有我打工程文件所在目录进入WebRoot\WEBINF\lib目录手动将我E盘底下个那个MySQL数据库连接驱动Jar包Copy到这个目录下再在工程里面Refresh一下MySql包就出来了运行WebLogic打开浏览器onclick啊````终于出来了通过JS查询到数据库服务器里面的数据了我在Java中实现Ajax就这样成功了!你们看了我写了这么多觉得好不好笑啊是不是感觉我是垃圾啊菜鸟一个我的确也是菜鸟本来就是要是高手的话可能一看就知道错误出在那里了就不会想我这样折腾了吧!是不是我说了一些Java很低级的常识类?而我自己却不清白类!希望大家莫见笑我了第一次写这些Hibernate知识我犯的一些错误应该大家有些Java的朋友在些Hibernate的时候没出现过我这样的问题吧其实我对Java是比较感兴趣的但是由于我所学的Java的知识太少对有一点难的就不知道做了那是因为我个人学的Java太肤浅的原因我知道其实中实现在在Java里基本上可以实现的只不过可能比中实现难一点而已吧 在网上看到有很多朋友有拿过JAVA的Hibernate和NET中的ADONET进行比较也有很多人说两着不能进行相比就像SQL语句不能和存储过程进行相比一样只要能在恰当的时候用就是好的我都很认同的他们的观点和看法而我个人认为呢只要有自己的对事物认识的观点就是好的我是一个比较爱说的人我觉得你只要能认真的去思考分析一件事物不管你得到的结论是怎么样的旨在在这个过程你从中是否学到了一些东西我不喜欢那些平时不爱说话的因为那时候我们不知道他对这个事物的看法是怎样的也难以猜测他心里到底在想什么既然上面有说到Hibernate和ADONet所以我又加上了这一段罗嗦起来了呵呵就我这皮毛也当回顾我以前一些知识谈不上总结也算小记一翻希望高手们别笑话我们这些新手了下面就我所了解的Hibernate和ADONET比较如下:在Hibernate中首先我们需要在JAVA工程里面添加Hibernate标签库(我用的是Hibernate Core Libraries)的引用Net中我觉得就是usingimport名称空间SqlClientOleDb添加程序集的过程然后我们需要打开DB Brower建立数据库连接字符串就是打服务器名用户名密码等然后Hibernate会这些数据库连接信息保存在hibernatecfgxml(默认缺省)这一个xml文件中在连接数据库的时候值得一提的是需要数据库连接驱动包不同的数据库有不同的驱动包个人觉得不同的驱动包作用在与由于不同数据库用的可能的是不同连接操作方式如Oracle是表空间的形式存在数据库等而其他的可能略有不同正确配置好连接成功后我们就能在DB Brower里看到数据库和数据库对应的表了在你连接数据库前添加Hibernate时它会叫你选择包添加后包下面就会多个类了IBaseHibernateDAOBaseHibernateDAOHibernateSessionfactory从名字就可以看出来就是一个接口一个接口实现类(implements)一个工厂具体里面是如何实现的以及其原理机制我此小辈能讲清楚的我还是有自知知明的等下甭被我的这点Java皮毛知识给歪曲了那就不好了不过我看里面的代码也很少简单要理解起来也不难反正就创建了这个类然后我就需要在DB Brower里面选择相应的表Hibernate Reverse Engineering添加对应DAO和ModelModel就是数据库表对象映射实例数据库表的每一列充当Model类的属性字段并添加有getset规则的属性访问器而DAO类里面则封装的是对该表的一些常见的数据访问操作(insertdeleteupdateselect)它有自己的HibernateSQL语句(不是一般的sql语句)这一块我手动写得很少不过和一般的sql语句语法还是很相似 如有按属性名查询返回Model强类型化List集合等除此之外每添加一个表还会自动添加表名hbmxml文件这个xml文件保存数据库映射到Hibernate表字段的具体信息如主键信息列长度相应的Java类型等要注意的是在添加的时候它会叫你选择ID Generator表的信息这里常见的是assigned(有表主键)和native(自动增长主键)因为在呆后创建的时候它会根据你所选择的信息创建不同的DAO和Model如在构造函数和一些数据访问的方法里面就可能有需要ID主键的而对于自动增长的则无须输入ID主键即可你可以对多个可能用的到表执行上述Hibernate Reverse Engineering映射操作你可以在不写一局代码的情况下完成对数据库的大多数的一般操作在其他地方很方便的调用我觉得这就是Hibernate的最大的好处优点;而在Net中类相对Hibernate来说我想是一步一个脚印什么DAO方法等代码一行行写不过我觉得这样也没什么不好的我们一般在项目中就用一个SqlHelper类里面写上对数据库的一些增删改查方法等根据传来的SQL语句和参数组或存储过程等动态的返回数据集合(List)或记录数等用起来也挺好的顶多还对不同的实例添加对应的DAL这些基本上能满足我们对数据库的基本操作了不过我觉得在Java中这样实现也可以啊我以前就在Java里面写了一个SqlHelper类代替了Hibernate用的是JdbcOdbc数据库连接感觉也很实用简单明了但是Hibernate在一些性能等方面的优势我们上不容忽视的

上一篇:使用eclipse调用.net web service

下一篇:eclipse3.2添加C#插件