Springboot Mybatis 实现通用Dao、Service、Controller (二)

接上一篇, 上一篇文章写了Dao、Service、Controller的实现, 这篇讲述其中用到的Query以及Page

还是以app表为例, 表结构如下

1
2
3
4
`id` bigint(20)
`gmt_create` datetime
`gmt_modified` datetime
`name` varchar(32)

Query 查询类

Query是select查询信息 如limit, page, order by的封装

AppQuery.java

省略其中get, set方法, Query的属性是DO的扩展,如其中nameLike为name字段的模糊查询, toBean()实现Query转换为DO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class AppQuery extends BaseQuery<AppDO> {

private Long id;
private Date gmtCreate;
private Date gmtModified;
private String name;
private String nameLike;

// ...get()
// ...set()

@Override
public ClassifyDO toBean() {
return JSON.parseObject(JSON.toJSONString(this),ClassifyDO.class);
}
}

BaseQuery.java

BaseQuery中包含公共的查询属性, 例如分页, 排序, 省略其他默认的get, set

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
public abstract class BaseQuery<D> implements Query<D> {

private Integer limit = 1;
private Integer page = 0;
private Integer offset = 0;
private String sort;
private String order;

public void setLimit(Integer limit) {
this.limit = limit > 0 ? limit : 1;
this.offset = this.page * this.limit;
}

public void setPage(int page) {
this.page = page >= 0 ? page : 0;
this.offset = this.page * this.limit;
}

// ...get()
// ...set()

@Override
public String toString() {
return JSON.toJSONString(this);
}
}

Query.java

1
2
3
4
public interface Query<D> {

D toBean();
}

Page 分页查询结果类

由于前端分页显示时常常同时需要每页数据以及总条目数, 所以对分页查询结果简单封装

Page.java

1
2
3
4
5
6
7
8
public class Page<D> {

private List<D> list;
private Integer total;

// ...get()
// ...set()
}