zoukankan      html  css  js  c++  java
  • 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配置文件内容添加分页插件配置

    # pagehelper
    pagehelper:
          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

    @Service
    public 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

    @Override
        public 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();
            }
        }
    }
  • 相关阅读:
    AJAX 跨域请求与 JSONP详解
    深入理解PHP的mvc框架
    读文文件md5值
    快速排序
    编写简单GUI程序
    简单的加减法
    rallway.py
    用列表构建栈结构
    模拟用户登陆注册
    密码生成
  • 原文地址:https://www.cnblogs.com/Jansens520/p/13287922.html
Copyright © 2011-2022 走看看