同一层的接口层:
dao层就是个接口,只有方法签名的
@MybatisDao
public interface PersonalApplyDao extends CrudDao<PersonalApplyBean>{
public void auditSuccess(PersonalApplyBean personalApplyBean);
public void auditFail(PersonalApplyBean personalApplyBean);
public void updatesave(PersonalApplyBean personalApplyBean);
}
直接看CurdDao<T>
注:CrudDao<T> 是一个抽象的接口类,
这个抽象的类不可能被实例化的,只能被继承,
T在本类被继承的时候,会被传递一个实体类,
调用这些方法时,都要传递一个实体类,
在dao这一层,可以看出一个实体类的作用是运输sql语句的所需要的参数的啊
在这里,我们其实又对代码做了分离处理,两个Dao完全可以合并在一起
那是因为定义的这些方法实在是太稳定了!
要把CrudDao看成上述Dao的一个分离:
怎么做dao的分离呢?
1.把稳定的方法(CRUD)分离出来单独做一个CrudDao
2.把不稳定的方法分离出来做成一个Dao
3.让该Dao继承CrudDao
4.为了让CrudDao中的方法可以使用到不仅该类的实体,借助于泛型<T>
如何使用泛型:
(1)在CurdDao中用到实体类的方法中的参数都换成 T paramT
(2)给类CurdDao加上<T>
(3)对应的子类dao在继承是在<>中传递入对应的实体类就行了
步骤!步骤!步骤!必须总结出步骤!只有知道了步骤才能对编程真有感觉:
因为程序=步骤1+步骤2+步骤3+...+步骤n
这些方法如何调用?在哪里调用?由谁调用?会不会被自动调用?(都是手动调用的)
注:在这里泛型的使用完全就是想被继承类可以使用更多的类而已
public abstract interface CrudDao<T> extends BaseDao{
...定义查询get(String paramString)方法...
//抽象方法没有方法体
//接受的参数通常就是id
//且这个id通常都是请求中携带的
public abstract T get(String paramString);
...定义get(T paramT)方法...
public abstract T get(T paramT);
...定义findList(T paramT)...
//这个方法通常是按条件查询,但能查询出多条记录
public abstract List<T> findList(T paramT);
...定义findAllList(T paramT).....
//这个方法通常是不按条件查询,从而查询所有的记录
public abstract List<T> findAllList(T paramT);
...定义insert(T paramT)方法..
//这里要求:被传递进来的实体必须拥有插入表的所有字段对应的那些属性
而这些数据通常来自于前端表单页面
public abstract int insert(T paramT);
...定义update(T paramT)方法....
//这里通常传递进来的实体对应id的一整条记录
public abstract int update(T paramT);
...定义delete(T paramT)方法...
//这里传进来的实体,通常对应id的一整条记录
//这一整条记录哪里来的?归功于get(String paraString)方法
public abstract int delete(T paramT);
}
再看下BaseDao
public abstract interface BaseDao{
}
是空的
为什么是空的?
没有什么再往里进行分离的了?
万一还有别的要分离进来?
都不确定
那就先写个放在这里吧