SpringBoot+SpringCloud+vue+Element开发项目——业务功能实现
一、工程结构规划
jansens-common:公共代码模块、主要放置一些工具类。
jansens-core:核心业务代码模块,主要封装公共业务模块。
jansens-admin:后台管理模块,包含用户、角色、菜单管理,权限管理等。
jansens-pom:聚合模块,仅为简化打包,一键执行打包所有模块。
新建空的maven工程 jansens-common、jansens-core、jansens-pom并且添加依赖
jansens-core下的pom.xml内添加jansens-common为dependency依赖,然后执行编译打包命令。
jansens-admin下的pom.xml内添加jansens-core为dependency依赖,然后执行编译打包命令。
jansens-pom下的pom.xml内添加 jansens-admin、 jansens-admin、jansens-core为dependency依赖,然后执行编译打包命令。
二、业务代码封装
CurdService.java
import com.read.core.page.PageRequest;import com.read.core.page.PageResult;
import java.sql.SQLException;
import java.util.List;
public interface CurdService<T> {
/**
* 保存操作
* @param record
* @return
*/
int save(T record);
/**
* 删除操作
* @param record
* @return
*/
int delete(T record);
/**
* 批量删除操作
* @param record
* @return
*/
int delete(List<T> record);
/**
* 根据ID查询
* @param id
* @return
*/
T findById(Long id);
/**
* 分页查询
* @param pageRequest
* @return
*/
PageResult findPage(PageRequest pageRequest);
}
分页请求封装 PageRequest.java Param.java
public class PageRequest {/**
* 当前页码
*/
private int pageNum = 1;
/**
* 每页数量
*/
private int pageSize = 10;
/**
* 查询参数
*/
private List<Param> params = new ArrayList<Param>();
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public List<Param> getParams() {
return params;
}
}
/*** 分页参数
*/
public class Param {
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
分页结果封装 PageResult.java
public class PageResult {/**
* 当前页码
*/
private int pageNum;
/**
* 每页数量
*/
private int pageSize;
/**
* 记录总数
*/
private long totalSize;
/**
* 页码总数
*/
private int totalPages;
/**
* 分页数据
*/
private List<?> content;
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public long getTotalSize() {
return totalSize;
}
public void setTotalSize(long totalSize) {
this.totalSize = totalSize;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public List<?> getContent() {
return content;
}
public void setContent(List<?> content) {
this.content = content;
}
}
分页助手封装 MybatisPageHelper.java
/*** MyBatis 分页查询助手
*/
public class MybatisPageHelper {
public static final String findPage = "findPage";
/**
* 分页查询, 约定查询方法名为 “findPage”
* @param pageRequest 分页请求
* @param mapper Dao对象,MyBatis的 Mapper
* @return
*/
public static PageResult findPage(PageRequest pageRequest, Object mapper) {
return findPage(pageRequest, mapper, findPage);
}
/**
* 调用分页插件进行分页查询
* @param pageRequest 分页请求
* @param mapper Dao对象,MyBatis的 Mapper
* @param queryMethodName 要分页的查询方法名
* @param args 方法参数
* @return
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static PageResult findPage(PageRequest pageRequest, Object mapper, String queryMethodName, Object... args) {
// 设置分页参数
int pageNum = pageRequest.getPageNum();
int pageSize = pageRequest.getPageSize();
PageHelper.startPage(pageNum, pageSize);
// 利用反射调用查询方法
Object result = ReflectionUtils.invoke(mapper, queryMethodName, args);
return getPageResult(pageRequest, new PageInfo((List) result));
}
/**
* 将分页信息封装到统一的接口
* @param pageRequest
* @return
*/
private static PageResult getPageResult(PageRequest pageRequest, PageInfo<?> pageInfo) {
PageResult pageResult = new PageResult();
pageResult.setPageNum(pageInfo.getPageNum());
pageResult.setPageSize(pageInfo.getPageSize());
pageResult.setTotalSize(pageInfo.getTotal());
pageResult.setTotalPages(pageInfo.getPages());
pageResult.setContent(pageInfo.getList());
return pageResult;
}
}
Http 结果封装 HttpResult.java
/*** HTTP结果封装
*/
public class HttpResult {
private int code = 200;
private String msg;
private Object data;
public static HttpResult error() {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
}
public static HttpResult error(String msg) {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
}
public static HttpResult error(int code, String msg) {
HttpResult r = new HttpResult();
r.setCode(code);
r.setMsg(msg);
return r;
}
public static HttpResult ok(String msg) {
HttpResult r = new HttpResult();
r.setMsg(msg);
return r;
}
public static HttpResult ok(Object data) {
HttpResult r = new HttpResult();
r.setData(data);
return r;
}
public static HttpResult ok() {
return new HttpResult();
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
/*** HTTP结果封装
*/
public class HttpResult {
private int code = 200;
private String msg;
private Object data;
public static HttpResult error() {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
}
public static HttpResult error(String msg) {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
}
public static HttpResult error(int code, String msg) {
HttpResult r = new HttpResult();
r.setCode(code);
r.setMsg(msg);
return r;
}
public static HttpResult ok(String msg) {
HttpResult r = new HttpResult();
r.setMsg(msg);
return r;
}
public static HttpResult ok(Object data) {
HttpResult r = new HttpResult();
r.setData(data);
return r;
}
public static HttpResult ok() {
return new HttpResult();
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
三、MyBatis分页查询
在jansens-core下的pom.xml文件内添加分页插件依赖包
<!-- pagehelper --><dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
在jansens-admin配置文件内容添加分页插件配置
# pagehelperpagehelper:
helperDialect: mysql
reasonable: true
supportmethodsArguments: true
params: count=countSql
在DAO添加分页查询的方法
SysUserMapper.java
List<SysUser> findPage();
给SysUserMapper.xml添加查询的方法
SysUserMapper.xml
<select id="findPage" resultMap="BaseResultMap">select
<include refid="Base_Column_List" />
from sys_user
</select>
服务层调用DAO层完成分页查询,让SysUserService继承CurdService接口。
SysUserService.java
public interface SysUserService extends CurdService<SysUser> {/**
* 查找所有的用户
* @return
*/
List<SysUser> findAll();
}
SysUserServiceImpl.java
@Servicepublic class SysUserServiceImpl implements SysUserService {
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
@Override
public PageResult findPage(PageRequest pageRequest) {
return MybatisPageHelper.findPage(pageRequest, sysUserMapper);
}
}
SysUserController.java
@RestController@RequestMapping("user")
public class SysUserController {
@Autowired
private SysUserService sysUserService;
@PostMapping(value="/findPage")
public HttpResult findPage(@RequestBody PageRequest pageRequest) {
return HttpResult.ok(sysUserService.findPage(pageRequest));
}
}
四、导出Excel报表
在jansens-common下的pom文件添加依赖包
<!-- poi --><dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
SysUserService.java
/*** 生成用户信息Excel文件
* @param pageRequest 要导出的分页查询参数
* @return
*/
File createUserExcelFile(PageRequest pageRequest);
SysUserServiceImpl.java
@Overridepublic File createUserExcelFile(PageRequest pageRequest) {
PageResult pageResult = findPage(pageRequest);
return createUserExcelFile(pageResult.getContent());
}
public static File createUserExcelFile(List<?> records) {
if (records == null) {
records = new ArrayList<>();
}
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet();
Row row0 = sheet.createRow(0);
int columnIndex = 0;
row0.createCell(columnIndex).setCellValue("No");
row0.createCell(++columnIndex).setCellValue("ID");
row0.createCell(++columnIndex).setCellValue("用户名");
row0.createCell(++columnIndex).setCellValue("昵称");
row0.createCell(++columnIndex).setCellValue("机构");
row0.createCell(++columnIndex).setCellValue("角色");
row0.createCell(++columnIndex).setCellValue("邮箱");
row0.createCell(++columnIndex).setCellValue("手机号");
row0.createCell(++columnIndex).setCellValue("状态");
row0.createCell(++columnIndex).setCellValue("头像");
row0.createCell(++columnIndex).setCellValue("创建人");
row0.createCell(++columnIndex).setCellValue("创建时间");
row0.createCell(++columnIndex).setCellValue("最后更新人");
row0.createCell(++columnIndex).setCellValue("最后更新时间");
for (int i = 0; i < records.size(); i++) {
SysUser user = (SysUser) records.get(i);
Row row = sheet.createRow(i + 1);
for (int j = 0; j < columnIndex + 1; j++) {
row.createCell(j);
}
columnIndex = 0;
row.getCell(columnIndex).setCellValue(i + 1);
row.getCell(++columnIndex).setCellValue(user.getId());
row.getCell(++columnIndex).setCellValue(user.getName());
row.getCell(++columnIndex).setCellValue(user.getNickName());
row.getCell(++columnIndex).setCellValue(user.getDeptName());
row.getCell(++columnIndex).setCellValue(user.getRoleNames());
row.getCell(++columnIndex).setCellValue(user.getEmail());
row.getCell(++columnIndex).setCellValue(user.getStatus());
row.getCell(++columnIndex).setCellValue(user.getAvatar());
row.getCell(++columnIndex).setCellValue(user.getCreateBy());
row.getCell(++columnIndex).setCellValue(DateTimeUtils.getDateTime(user.getCreateTime()));
row.getCell(++columnIndex).setCellValue(user.getLastUpdateBy());
row.getCell(++columnIndex).setCellValue(DateTimeUtils.getDateTime(user.getLastUpdateTime()));
}
return PoiUtils.createExcelFile(workbook, "download_user");
}
SysUserController.java
@PostMapping(value="/exportUserExcelFile")public void exportUserExcelFile(@RequestBody PageRequest pageRequest,HttpServletResponse res) {
File file=sysUserService.createUserExcelFile(pageRequest);
FileUtils.downloadFile(res,file,file.getName());
}
工具类代码 jansens-common
PoiUtils.java
/*** POI相关操作
*/
public class PoiUtils {
/**
* 生成Excel文件
* @param workbook
* @param fileName
* @return
*/
public static File createExcelFile(Workbook workbook, String fileName) {
OutputStream stream = null;
File file = null;
try {
file = File.createTempFile(fileName, ".xlsx");
stream = new FileOutputStream(file.getAbsoluteFile());
workbook.write(stream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(workbook);
IOUtils.closeQuietly(stream);
}
return file;
}
}
FileUtils.java
/*** 文件相关操作
*/
public class FileUtils {
/**
* 下载文件
* @param response
* @param file
* @param newFileName
*/
public static void downloadFile(HttpServletResponse response, File file, String newFileName) {
try {
response.setHeader("Content-Disposition", "attachment; filename=" + new String(newFileName.getBytes("ISO-8859-1"), "UTF-8"));
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
InputStream is = new FileInputStream(file.getAbsolutePath());
BufferedInputStream bis = new BufferedInputStream(is);
int length = 0;
byte[] temp = new byte[1 * 1024 * 10];
while ((length = bis.read(temp)) != -1) {
bos.write(temp, 0, length);
}
bos.flush();
bis.close();
bos.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上是 SpringBoot+SpringCloud+vue+Element开发项目——业务功能实现 的全部内容, 来源链接: utcz.com/z/377071.html