Java后台管理系统(九):代码整理优化

工程规划

为了统一配置和代码解耦,我们对代码重新进行了整理和规划。

重新规划后,代码结构如下:

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 依赖

<dependency>
    <groupId>com.louis</groupId>
    <artifactId>kitty-common</artifactId>
    <version>0.0.1-SNAPSHOT</version></dependency>

3. 添加统一控制器接口返回结果封装 HttpResult

HttpResult.java

package com.louis.kitty.core.http;

public class HttpResult {

    private int code;
    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;
    }

}

4. 添加通用CURD接口

CurdService.java

package com.louis.kitty.core.service;

import java.util.List;

import com.louis.kitty.core.page.PageRequest;
import com.louis.kitty.core.page.PageResult;

/**
 * 通用CURD接口
 */
public interface CurdService<T> {

    /**
     * 保存操作
     * @param record
     * @return
     */
    int save(T record);

    /**
     * 更新操作
     * @param record
     * @return
     */
    int update(T record);

    /**
     * 删除操作
     * @param record
     * @return
     */
    int delete(T record);

    /**
     * 批量删除操作
     * @param entities
     */
    int delete(List<T> records);

    /**
     * 根据ID查询
     * @param id
     * @return
     */
    T findById(Long id);

    /**
     * 分页查询
     * 这里统一封装了分页请求和结果,避免直接引入具体框架的分页对象, 如MyBatis或JPA的分页对象
     * 从而避免因为替换ORM框架而导致服务层、控制层的分页接口也需要变动的情况,替换ORM框架也不会
     * 影响服务层以上的分页接口,起到了解耦的作用
     * @param pageRequest 自定义,统一分页查询请求
     * @return PageResult 自定义,统一分页查询结果
     */
    PageResult findPage(PageRequest pageRequest);

}

5. 依赖父 pom

kitty-admin

1. 添加 kitty-common 依赖。

<dependency>
    <groupId>com.louis</groupId>
    <artifactId>kitty-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

2. 删除 page 包内容。

3. 把 Controller 的返回结果替换为 HttpResult 。

4. Service 接口统一继承 CurdService 接口。

5. 服务实现类,增删改查通用代码示例。

package com.louis.kitty.admin.sevice.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.louis.kitty.admin.dao.SysUserMapper;
import com.louis.kitty.admin.model.SysUser;
import com.louis.kitty.admin.sevice.SysUserService;
import com.louis.kitty.core.page.PageRequest;
import com.louis.kitty.core.page.PageResult;
import com.louis.kitty.core.page.PageUtils;

@Service
public class SysUserServiceImpl  implements SysUserService {

    @Autowired
    private SysUserMapper sysUserMapper;

    @Override
    public int save(SysUser record) {
        return sysUserMapper.insertSelective(record);
    }

    @Override
    public int update(SysUser record) {
        return sysUserMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int delete(SysUser record) {
        return sysUserMapper.deleteByPrimaryKey(record.getUserId());
    }

    @Override
    public int delete(List<SysUser> records) {
        for(SysUser record:records) {
            delete(record);
        }
        return 1;
    }

    @Override
    public SysUser findById(Long id) {
        return sysUserMapper.selectByPrimaryKey(id);
    }

    @Override
    public PageResult findPage(PageRequest pageRequest) {
        return PageUtils.getPageResult(pageRequest, getPageInfo(pageRequest));
    }

    /**
     * 调用分页插件完成分页
     * @param pageQuery
     * @return
     */
    private PageInfo<SysUser> getPageInfo(PageRequest pageRequest) {
        int pageNum = pageRequest.getPageNum();
        int pageSize = pageRequest.getPageSize();
        PageHelper.startPage(pageNum, pageSize);
        List<SysUser> sysMenus = sysUserMapper.findPage();
        return new PageInfo<SysUser>(sysMenus);
    }

    @Override
    public List<SysUser> findAll() {
        return sysUserMapper.findAll();
    }

}

6. 依赖父 pom

kitty-boot

1. 添加 kitty-common 依赖。

<dependency>
    <groupId>com.louis</groupId>
    <artifactId>kitty-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

2. 依赖父 pom

kitty-pom

1. 新建 kitty-pom 工程,添加 pom.xml。

2. 添加预依赖,汇总版本属性

3. 添加 Maven 子模块,添加打包配置

编译打包

选择 kitty-pom 下的 pom.xml 进行打包。

参考资料

http://maven.apache.org

https://www.yiibai.com/maven/

源码下载

码云:https://gitee.com/liuge1988/kitty



作者:朝雨忆轻尘
出处:https://www.cnblogs.com/xifengxiaoma/
版权所有,欢迎转载,转载请注明原文作者及出处。

原文地址:https://www.cnblogs.com/xifengxiaoma/p/9499408.html

时间: 2024-11-10 22:08:18

Java后台管理系统(九):代码整理优化的相关文章

Java后台管理系统(八):MyBatis分页功能实现

使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真不想花双倍的时间写 count 和 select,幸好我们有 pagehelper 分页插件,pagehelper 是一个强大实用的 MyBatis 分页插件,可以帮助我们快速的实现分页功能.那么,接下来我们就来一起体验下吧. 添加依赖 在 kitty-admin pom.xml 文件内添加分页插件依赖包. pom.xml <!-- pagehelp

Java后台管理系统(六):集成 Swagger API

spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于移动端.在实际开发过程中,这些接口还要提供给开发测试进行相关的白盒测试,那么势必存在如何在多人协作中共享和及时更新API开发接口文档的问题. 假如你已经对传统的wiki文档共享方式所带来的弊端深恶痛绝,那么尝试一下Swagger2 方式,一定会让你有不一样的开发体验. 使用 Swagger 集成文档具有以下几

jQuery和java后台的jsonp跨域问题

Jsonp原理: ajax本身是不可以跨域的,通过产生一个script标签来实现跨域.因为script标签的src属性是没有跨域的限制的.其实设置了dataType: 'jsonp'后,$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议.JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问. JSONP是一种脚本注入(Script Injection)行

从零开始实现放置游戏(九)——实现后台管理系统(7)地图选择控件

前面做了地图怪物的添加,删除,查询等功能.但添加怪物的时候,需要选择怪物所在地图.前几张的源代码中,我忘了把这部分改回去,所以如果想要成功添加,需要自己改一下html界面,手动填写怪物所在地图的ID.然而,我们配置的时候,地图ID并不是固定的,而是数据库自增的.所以这里最好做成一个弹窗,点击后弹出一个地图列表,让我们手动选择怪物所在地图. 本章我们就实现这样一个弹窗控件,实现对地图的选择.后面如果有选择怪物,选择装备等需求,都可照猫画虎.整个过程的流程大致如下: 实现步骤 首先,我们给弹出的地图

Java代码性能优化技巧

流方面: private FileOutputStream writer; writer = new FileOoutputStream(fileName); 使用BufferedOutputStream 对写入FileOutputStream的数据进行缓存 //将writer的类型由FileOutputStream 变更为BufferedOutputStream //private FileOutputStream writer; private BufferedOutputStream wr

java 线程返回值,优先级,后台线程 示例代码

ava 线程返回值,休眠,优先级,后台线程  示例代码 package org.rui.thread.basic; import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execu

Java(Android)代码的优化变化

[转自e良师益友网]随着Android的发展,Java语言也在不断的发展.从Android发布第一台手机开始注定了Android的不平凡之路,而代码优化却成为了Android切切实实的发展之路.下面看看Java(Android)代码不断发展的在哪些方面进行了优化. 1.降低执行时间 这部分包括:缓存.数据存储优化.算法优化.JNI.逻辑优化.需求优化几种优化方式. (1)缓存 缓存主要包括对象缓存.IO缓存.网络缓存.DB缓存,对象缓存能减少内存的分配,IO缓存减少磁盘的读写次数,网络缓存减少网

Java 代码性能优化总结

35 个 Java 代码性能优化总结 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了.代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率

iOS 基于APNS消息推送原理与实现(包括JAVA后台代码)

Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. 上图可以分为三个阶段. 第一阶段:Push服务器应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的