java语言的Dao层设计(一)—— Dao层基本结构设计
Dao层——数据访问层
Dao层是具体到每个操作,每个表的增删查改。那怎么写这个数据访问层呢?首先是数据库的设计以及所计划实现的功能,之后是IBean、IDao这两个基础接口以及这两个接口的实现,再之后到实现类设计的时候对于结构的思考,思考如何用更少的代码实现更多的操作亦或者用额外的代码实现解耦操作。接下来我将简单的介绍两个常用的Dao层接口:IBean接口和IDao接口
IBean接口
IBean接口是为了标识数据库表实体类而生的接口。继承IBean接口可以降低代码重复率,减少代码耦合。
import java.io.Serializable;
public interface IBean extends Serializable {
//继承序列化接口
}
IDao接口
IDao接口是为了具体操作而设立的接口,继承IDao接口可以标识这个接口是一个数据库操作接口。
public interface IDao<T extends IBean> {
}
可以看到在IDao接口中我使用了泛型,并且把泛型的参数边界进行了固定,减少泛型擦除对它的影响。
下面开始正式构建结构
在项目的建立过程中我们应该先想好数据库表设计,当设计好数据库表后,开始思考需要实现一些什么功能,同时思考是否可以把功能给分解开来,减少程序的耦合度,使用模块化得结构来实现功能。 数据库表的设计——以Student表为例 1、数据库表的实体类
public class StudentBean implements IBean {
//数据库表Student的实体类
private int studentID;
private String studentName;
private String studentSex;
public StudentBean(int studentID, String studentName, String studentSex) {
this.studentID = studentID;
this.studentName = studentName;
this.studentSex = studentSex;
}
public int getStudentID() {
return studentID;
}
public StudentBean setStudentID(int studentID) {
this.studentID = studentID;
return this;
}
public String getStudentName() {
return studentName;
}
public StudentBean setStudentName(String studentName) {
this.studentName = studentName;
return this;
}
public String getStudentSex() {
return studentSex;
}
public StudentBean setStudentSex(String studentSex) {
this.studentSex = studentSex;
return this;
}
@Override
public String toString() {
return "StudentBean{" +
"studentID=" + studentID +
", studentName=" + studentName + +
", studentSex=" + studentSex + +
};
}
}
2、写Student的IDao接口 使用泛型减少对StudentBean的依赖
import java.util.List;
public interface IStudentDao<T extends IBean> extends IDao<T> {
public List<T> select();//获取所有的学生信息并且保存到list对象中
}
3、写IStudentDao的实现类 在具体实现时才指定使用StudentBean类
import java.util.List;
public class ImplStudentDao implements IStudentDao<StudentBean> {
public ImplStudentDao() {
}
@Override
public List<StudentBean> select() {
//在这里写具体的方法。。。
}
}
总结
代码结构: 当然在我认为,这个结构还没有到最优的选择,但却不失为是一种好方法,在下一节中我会讲解一下结合工厂模式的话Dao层该怎么写。
