工程规划
为了统一配置和代码解耦,我们对代码重新进行了整理和规划。
重新规划后,代码结构如下:
kitty-pom: 统一管理 Maven 版本,打包配置
kitty-common: 公共代码模块,主要放置工具类
kitty-core: 核心代码模块,主要封装公共业务模块
kitty-admin: 后台管理模块,包含用户、角色、菜单管理等
kitty-boot: Spring Boot 启动模块,包含一些全局配置信息
优化详情
kitty-core
1. 新建 kitty-core 工程,把 kitty-admin 工程 page 包下的内容 迁移到 kitty-core 工程 page 包内。
2. 添加 kitty-common 依赖
com.louis
kitty-common
0.0.1-SNAPSHOT
3. 添加统一控制器接口返回结果封装 HttpResult
HttpResult.java
packagecom.louis.kitty.core.http;public classHttpResult {private intcode;privateString msg;privateObject data;public staticHttpResult error() {return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
}public staticHttpResult error(String msg) {returnerror(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
}public static HttpResult error(intcode, String msg) {
HttpResult r= newHttpResult();
r.setCode(code);
r.setMsg(msg);returnr;
}public staticHttpResult ok(String msg) {
HttpResult r= newHttpResult();
r.setMsg(msg);returnr;
}public staticHttpResult ok(Object data) {
HttpResult r= newHttpResult();
r.setData(data);returnr;
}public staticHttpResult ok() {return newHttpResult();
}public intgetCode() {returncode;
}public void setCode(intcode) {this.code =code;
}publicString getMsg() {returnmsg;
}public voidsetMsg(String msg) {this.msg =msg;
}publicObject getData() {returndata;
}public voidsetData(Object data) {this.data =data;
}
}
4. 添加通用CURD接口
CurdService.java
packagecom.louis.kitty.core.service;importjava.util.List;importcom.louis.kitty.core.page.PageRequest;importcom.louis.kitty.core.page.PageResult;/*** 通用CURD接口*/
public interface CurdService{/*** 保存操作
*@paramrecord
*@return
*/
intsave(T record);/*** 更新操作
*@paramrecord
*@return
*/
intupdate(T record);/*** 删除操作
*@paramrecord
*@return
*/
intdelete(T record);/*** 批量删除操作
*@paramentities*/
int delete(Listrecords);/*** 根据ID查询
*@paramid
*@return
*/T findById(Long id);/*** 分页查询
* 这里统一封装了分页请求和结果,避免直接引入具体框架的分页对象, 如MyBatis或JPA的分页对象
* 从而避免因为替换ORM框架而导致服务层、控制层的分页接口也需要变动的情况,替换ORM框架也不会
* 影响服务层以上的分页接口,起到了解耦的作用
*@parampageRequest 自定义,统一分页查询请求
*@returnPageResult 自定义,统一分页查询结果*/PageResult findPage(PageRequest pageRequest);
}
5. 依赖父 pom
kitty-admin
1. 添加 kitty-common 依赖。
com.louis
kitty-common
0.0.1-SNAPSHOT
2. 删除 page 包内容。
3. 把 Controller 的返回结果替换为 HttpResult 。
4. Service 接口统一继承 CurdService 接口。
5. 服务实现类,增删改查通用代码示例。
packagecom.louis.kitty.admin.sevice.impl;importjava.util.List;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importcom.github.pagehelper.PageHelper;importcom.github.pagehelper.PageInfo;importcom.louis.kitty.admin.dao.SysUserMapper;importcom.louis.kitty.admin.model.SysUser;importcom.louis.kitty.admin.sevice.SysUserService;importcom.louis.kitty.core.page.PageRequest;importcom.louis.kitty.core.page.PageResult;importcom.louis.kitty.core.page.PageUtils;
@Servicepublic class SysUserServiceImpl implementsSysUserService {
@AutowiredprivateSysUserMapper sysUserMapper;
@Overridepublic intsave(SysUser record) {returnsysUserMapper.insertSelective(record);
}
@Overridepublic intupdate(SysUser record) {returnsysUserMapper.updateByPrimaryKeySelective(record);
}
@Overridepublic intdelete(SysUser record) {returnsysUserMapper.deleteByPrimaryKey(record.getUserId());
}
@Overridepublic int delete(Listrecords) {for(SysUser record:records) {
delete(record);
}return 1;
}
@OverridepublicSysUser findById(Long id) {returnsysUserMapper.selectByPrimaryKey(id);
}
@OverridepublicPageResult findPage(PageRequest pageRequest) {returnPageUtils.getPageResult(pageRequest, getPageInfo(pageRequest));
}/*** 调用分页插件完成分页
*@parampageQuery
*@return
*/
private PageInfogetPageInfo(PageRequest pageRequest) {int pageNum =pageRequest.getPageNum();int pageSize =pageRequest.getPageSize();
PageHelper.startPage(pageNum, pageSize);
List sysMenus =sysUserMapper.findPage();return new PageInfo(sysMenus);
}
@Overridepublic ListfindAll() {returnsysUserMapper.findAll();
}
}
6. 依赖父 pom
kitty-boot
1. 添加 kitty-common 依赖。
com.louis
kitty-common
0.0.1-SNAPSHOT
2. 依赖父 pom
kitty-pom
1. 新建 kitty-pom 工程,添加 pom.xml。
2. 添加预依赖,汇总版本属性
3. 添加 Maven 子模块,添加打包配置
编译打包
选择 kitty-pom 下的 pom.xml 进行打包。
参考资料
源码下载