MyEclipe下使用Hibernate开发的经验

在MyEclipe下使用Hibernate框架技术开发,本人总结了一些经验。可能看起来有点长,但我已经尽量用最通俗的语言去说明这些经验,首先简单介绍一下,我是怎么使用Hibernate的:

1.首先,建表,反向生成POJO类,修改下对应的配置文件,设置主键id为序列自增长(配置文件中其他东西基本上不用去碰)。

2.开始设计Dao层(数据操作层,接口)中的方法,编写Impl(实现类)文件。


在实现上面两步的时候,有些是需要注意的地方,如下:

1.在第一步中,之所有说对应的配置文件除了序列其他的基本上不用去碰。是因为所有的对应关系,MyEclipe都自动生成好了。而那些需要手动去配置的,像命名查询,自定义SQL这样的需要改动配置文件的方法,我个人觉得也没必要。因为命名查询除了将写在类文件的代码放到XML文件中,其他的好处不大,而且有很大约束性。像有返回值的地方还需要加上return这样的子标签来声明返回值对应的是哪个POJO类,如果命名查询调存储过程有返回值的话还要在sql-query标签中添加上callable="true"这样的属性。本来做编程就不容易,还要记那么多东西,重点是在某些地方,如果查询出来的游标类型数据,已经是复合了多张表而成的,这样在配置return子标签时就根本不知道该如何来写。因为无法与POJO类中的属性对应。这个时候就只能使用最古老的办法——JDBC调SQL或存储过程的办法。

所以,本人总结了一个经验:反向生成POJO类是很好的,可以节省很多功夫。在使用增删改查的时候,最好是用Hibernate中,Session对象、Criteria对象、或者以前的JDBC方法

这是第一个经验,接着看。

2.在使用Session对象的save、update、delete、get这些增删改查方法时需要注意,它们并没有想象中做得那么智能,使用框架虽好,但是也得动动脑子测试一下。

增删改的方法,传统的JDBC中是有返回值的,跟数据库中的反应一样,会告诉你,更新了多少条数据。但Session中的这几个方法时没有的。而且删改查这三个方法都是依赖主键ID为查询依据的。传入对象的时候必须要有ID。

这是大体上的,下面细致的讲解下,有哪些方法需要注意的。

Session中的update方法:这个方法你只需要传个对象进去,就会帮你自动更新。以前用JDBC的时候总会思考需要提供些什么方法,哪些字段是需要更新的,哪些不用。到底哪些要提供个方法,哪些不用,总在头疼这样的问题。现在Hibernate提供了这样一个好的方法。有些人可能真的会只在对象中放个ID,放个需要修改的属性就传进去让它自动跟新。实际是:没有那么智能。Hibernate会把你其他没有填的属性,全部在数据库中设置为空字段

解决的办法:可以验证输入的对象中有哪些字段是有值的,获取数据库中的对象,然后对应的去修改这个对象的某项值。这是第二个经验

第三个经验:使用框架就是为了方便,对于save方法,需要传入的是对象,你就顺着在Dao层中的方法也写成输入的参数是对象,而不是该对象的各个属性。可能你会觉得在Servlet中给对象写一大段代码的做法,不如放在数据操作层来做。或作在使用JDBC的时候是这样的做的,但是既然使用了Hibernate了,就别自己给自己添堵了。因为你传入的对象中,可能会有关联的对象组成,这样在编写一个对象的Dao层时,可能就需要引入别的对象的Dao层。数据操作层的的设计因该是一对一的与数据库操作起关联,如果这个实现类文件中的方法时依赖于其他实现类中的方法,就增加了程序的耦合度,发生错误起来更麻烦。

同一个类文件中,方法互相调用来组成还是可以的,但是一个类文件的组成,依赖于其他类文件,这样就会给自己惹来后患。

第四个经验:Criteria中的示例查询方法,是不能以关联对象为查询条件的。这样对于某些综合查询的功能实现来说,是一大遗憾,因为如果真的那么智能,真的是个非常好的东西。但是Criteria中的其他很多方法,都是非常好用的。

总结:

为什么我会推荐使用Criteria和Session中的方法,因为这些方法都不用去写SQL语句。做一个程序员要记这么多门编程语言已经很累的了。最重要的是,现在只是Hibernate这个框架比较流行,或许以后出了更牛X的框架,那以前记住的这么多配置文件如何如何写,不是都白费了?

所以有一条经验很重要:根本性的东西不能忘,框架技术可以用。但不能因为使用了框架技术,而忘了最基本,底层的实现是怎样做的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值