接上一篇, 上一篇文章写了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;
@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; }
@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;
}
|