对jdbc进行封装(二)

来源:互联网 发布:nba数据库统计 编辑:程序博客网 时间:2024/05/12 11:04

问题:(一)如何update对象bean时,只更部分字段?

            (二)如何进行不用反射进行get和set对象bean的属性值?

解决方案:

             (一)如何update对象bean时,只更部分字段

                        在解决此问题时,我首先想到的是查询hibernate是如何进行操作的:

                       1、先查询出要更新的对象,然后再更新要更改的字段; 

                       2、在注解或配置文件中添加限定条件,如下:@Column(updatable=false)或者xml中<class name="com.sccin.entity.Student" table="student" dynamic-update="true"> ;

                       3、使用HQL语句。

                  总结:第一种方式实现起来很是痛苦,每次都要进行查询;第二种方式,只能满足一部分需求;第三中方式需要用到特定的HQL语句。上述三种方法都不满足我现在的需求。我的在封装jdbc操作时处理方法是当bean的属性值为null时,就不进行更新(我现在的情况是不往数据库里插入null值)。这样就能基本满足我的需求了(终于体会到了将数据类型设为包装类的用处了,呵呵,不会有基本数据类型int,long为0,boolean为false默认赋值的问题,包装类的值初始化时为null)。

             (二)这个问题纠结了我很长很长的时间,在不知道明确的对象和属性时,我如何取得值呢?当时的第一想法就是用反射,而且为了满足我级联保存的需求,我需要反复的调用反射,但是这样效率就会有很大的影响。如何不用反射我就能取到我要存储数据的值呢?重新回顾的我的需求:1、取得bean里数据;2、往bean里插入数据;显然如果按照常规的bean的写法。我们是无法绕过反射这个“利器”的,那么我就需要打破常规,打破规范,以满足我现在的需求。问题的解决关键在于,不要直接对bean的属性取值,通过创建一个超类,然后定义map存储我们要包存的值。具体的做法:暂不罗列了因为又要贴好多代码。

              因为现在项目不用任何的框架,jdbc操作需要自己封装,这样灵活性很大,可以打破现有的条条框框。有时候在想hibernate之所以很消耗性能,是不是因为它本身需要遵守的规范太多,以至于最后规范束缚了它的灵活性。

             感想:条条框框可以在很多的情况下让我们循序渐进的项目,但是面对特殊的需求时,我们需要有打破常规的勇气,并进行尝试。

 

原创粉丝点击