在软件开发的过程中,每一个软件都可能会关联成千上万的表。因为每个表所包含的字段不同且可能操作各异,所以对每个表进行操作都需要编制相应的操作程序。但显然这是件很费力的事,因为这项工作工作量极大并且工作重复程度高。于是我们就在想,有木有一个方法能够减少工作量并且去除这些重复的工作?
答案是肯定的,事实上我们只要分析以下两点就便能做到心中有数。
第一, 每个表都包含了最基本的增删查改四项操作。
第二, 每个表虽然表名不一,字段各异,但其结构是相同的。这里指的结构是表的构成方式,即表是由什么构成。
基于以上两点分析,那么我们可以总结出一条思路来解决以上问题:1、建立一通用操作类,里面封装增删查改最基本的数据操作,其他操作类继承这个类;2、建立一通用数据模型类,里面不包括任何数据或者仅包括主键数据,作为所有数据模型类的父类,其他数据模型类继承这个类。
如此一来,任何与数据库表相关的数据模型类可以通过通用的数据模型类传递进个操作类,然后个操作类可以调用父类的方法进行操作。按照这种思路,代码量大幅度减少且完全去除了重复工作。
对于这个思路的具体实现,我们将Java语言为例进行讲解。因为Java语言是一款典型的面向对象语言,它完善并且丰富了继承的概念,这很适合用来讲解这个思路。当然具体实现的手段很多,不管用C语言还是Java语言,面向对象编程还是不面向对象编程,其实这都不重要,最重要的是思想。如果功力足够牛逼,即便是用C语言,也能编出面向对象的效果。
在进入主题之前,首先介绍一下什么叫继承。简单说来,有A,B两个类。A作为父类,B作为A的之类,那么我们可以认为B类继承了A类。
继承有什么好处呢?
第一、 如果B类继承了A类,那么B类便可以无条件的使用任何A类中的变量和方法(被声明为私有的除外)。这样一来,我们便可以编写一个A类作为访问数据所有表的父类,其中包括基本的增删查改等方法。然后再编写B、C、D……等继承A类的子类来对所属表进行特殊操作,这些子类在继承A类的同时,也继承了A类中基本的增删查改等操作。
第二、 如果B类继承了A类,C类继承了A类,D类继承了A类,那么A类便可以统一指代B、C、D等类,在传递参数是可以通用A类进行传递,然后再根据其具体类型在程序中进行操作。
目前为止,我们已经将实践所需要的理论介绍完毕,接下来将是理论结合实践的过程。我们先来构建通用操作类 AbstractUppDao,其语句如下:
public abstract class AbstractUppDao
从修饰词abstract我们可以看出,这是个抽象类。在Java语言中,只有两个类可以被子类继承,一个是抽象类,用abstract修饰,另一个是接口,用interface修饰。抽象类和接口的不同点在于,子类只能继承一个抽象类,但是却可以实现多个接口。
同时我们还要使用spring框架里面的SimpleJdbcTemplate类,这个类在声明AbstractUppDao后即被声明: