spring boot泛型化编程

  1. 1. 持久层相关
    1. 1.1. BaseMapper
    2. 1.2. 普通Mapper
  2. 2. 业务层相关

眼里有不朽的光芒 , 心里有永恒的希望

持久层相关

(1) dao层 → BaseDao.java

负责与数据库交互

BaseMapper

所有Mapper接口的父接口

在 BaseDao 这个接口中,理论上是可以把 CRUD 都给整合起来的,
另外,在接口中也定义了一个泛型,该泛型具体是什么,由子接口声明
十分注意此接口只是用来继承的,不管是什么情况下,谁去拿这个接口当做一般接口去使用,谁用谁报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public interface BaseMapper<T> {
/**
* 查询所有
*/
List<T> selectAll();

/**
* 根据Id查询
*/
T selectById(T t);

/**
* 查询总共有多少条数据
*/
int selectAllCount();

/**
* 分页查询
*/
List<T> selectLimit(@Param("start") int start, @Param("pageSize") int pageSize);

/**
* 增加
*/
int insert(T t);

/**
* 删除
*/
int delete(T t);

/**
* 修改
*/
int update(T oldS,T newS);

//......
}

普通Mapper

(2)dao层 → SchoolDao.java

BaseMapper中的 T 在此处 给他一个实际的类(实体类

此接口如果没有特殊情况只是声明泛型 这一个作用

1
2
3
4
5
6
7
8
9
10
11
12
/**
* BaseDao 接口的其中一个子接口,
* 该接口中没有定义任何的抽象方法,
* 唯一做的事只有声明一下泛型,
* 如果说需要加什么特殊的方法,如abc(),
* 需要考虑 abc() 是不是可以公用的,
* 如果是,则直接加在BaseDao 接口中,
*/
public interface SchoolDao extends BaseDao<Student> {
// 如果没有特殊情况,这里不用写任何一丁点的代码
// 当然,特殊情况还是会有的
}

业务层相关

(3) service层 → BaseService.java

上面的BaseDao接口一样,也定义了一个 泛型(由子类声明
只不过是此接口把 分页 相关的方法提到另一个接口中去了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public interface BaseService<T> {
//region 查询
/**
* 查询所有
*/
List<T> findAll();

/**
* 根据Id查询
*/
T findById(T t);

//endregion

/**
* 增加
*/
boolean add(T t);

/**
* 删除
*/
boolean remove(T t);

/**
* 修改
*/
boolean modify(T oldT,T newT);
}

(4) service → root → PageService.java

只是把和分页相关的接口方法,提取出来了而已

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 将分页模型提取出来
* (分页模型需要一个Service)
*/
public interface PageService<T> {
/**
* 查询总共有多少条记录
*/
int findAllCount();

/**
* 分页查询
*/
List<T> findLimit(int start, int pageSize);

/**
* 得到分页模型对象
* 默认default 方法
*/
default BasePage<T> getBasePage() {
return new BasePage<>(this);
}
}