java项目前期设计,项目设计模板

项目结构

bVcKsXu

前期的准备工作

common---parent---admin

1.删除parent项目中的src(含有启动类)的文件,删除common项目中的启动类;

2.将与新拓展子项目admin有关的资源进行加载,具体步骤如下:

在src--main---resource目录下分别创建static、templates/modules两个文件夹,并将需要的资源分别粘贴到对应的文件夹;

3.在admin项目的src目录下创建一个类PageController,用来处理客户端所有页面请求;

4.在common项目下的src目录下创建exception、pojo、web包,各种包的具体作用如下:

*1.exception包 用来填写一些自定义异常,具体代码如下:

public class ServiceException extends RuntimeException{

快捷键 Alt+Insert+constructor 添加所有异常属性

}

*2.pojo包下创建一个PageObject类,借助此对象在业务逻辑层封装分页信息(可以理解为业务层pojo对象),格式代码如下:

@Data

@NoArgsConstructor

@AllArgsConstructor

public class PageObject implements Serializable {//当泛型定义在类或接口名的右侧时这种泛型叫类泛型

private static final long serialVersionUID = -8770600233998974797L;

/*总记录数/

private Integer rowCount;

/*当前页记录/

private List records;//new PageObject(),new PageObject()

/*总页数/

private Integer pageCount;

/每页最多显示多少条记录/

private Integer pageSize;

/*记录当前页的页码值/

private Integer pageCurrent;

public PageObject(Integer rowCount, List records, Integer pageSize, Integer pageCurrent) {

this.rowCount = rowCount;

this.records = records;

this.pageSize = pageSize;

this.pageCurrent = pageCurrent;

this.pageCount=rowCount/pageSize;

if(rowCount%pageSize!=0)this.pageCount++;

}}

*

注意:

在java所有封装数据对象,尽量都是实现Serializable接口,目的是方便对对象进行序列化和反序列化1)序列化:将对象装换为字节

2)反序列化:将字节转换为对象

序列化的应用场景?

1)将对象转换为字节以后缓存到内存

2)将内存中的对象存储到文件

3)将对象转换为字节在网络中进行加密传输

序列化对象设计规范?

1)实现序列化接口Serializable

2)添加序列化ID

.(序列化的安全、序列化的力度,自行拓展了解)................................

*/

序列化相关设置及操作如图:

bVcKvYsbVcKvYt

*3.pojo包下创建一个JsonResult类,借助此对象封装控制层响应到客户端的数据(且希望将来返回的数据是一个Jason格式的字符串,做响应标准的设计),格式代码如下:

*package com.cy.pj.common.pojo;

import lombok.Setter;

import java.io.Serializable;

/*借助此对象封装控制层响应到客户端的数据/

@Data //@Setter

public class JsonResult implements Serializable {

private static final long serialVersionUID = -8722122492343039602L;

/*响应状态码/

private Integer state=1;//1 表示ok,0表示error

/*响应状态码对应的具体信息/

private String message="ok";

/*响应数据(一般是查询时获取到的正确数据)/

private Object data;

public JsonResult(){}

public JsonResult(String message){

this.message=message;

}

public JsonResult(Object data){

this.data=data;

}

public JsonResult(Throwable e){

this.state=0;

this.message=e.getMessage();

}

public Integer getState() {

return state;

}

public String getMessage() {

return message;

}

public Object getData() {

return data;

}}

*4.在web包下创建一个GlobalExceptionHandler类(全局异常处理类),模板代码如下:

package com.cy.pj.common.web;

import com.cy.pj.common.pojo.JsonResult;

import lombok.extern.slf4j.Slf4j;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.bind.annotation.RestControllerAdvice;

@Slf4j//此注解用于将异常信息记录到日志文件,slf4j只是一个日志标准,并不是日志系统的具体实现,作用:1.提供日志接口2.提供获取具体日志对象的方法

@RestControllerAdvice//==@ControllerAdvice+@ResponseBody

public class GlobalExceptionHandler {

@ExceptionHandler(RuntimeException.class)

public JsonResult doHandleRuntimeException(RuntimeException e){

e.printStackTrace();//输出到控制台

log.error("e.message {}",e.getMessage());

return new JsonResult(e);

} //...............

}

bVcKzow

bVcKzJ5

菜单模块“查询”的设计思路及步骤:

思路:1.先创建数据层接口-->2.创建对应方法的映射文件-->3.创建业务层接口及数据层接口的实现类-->4.控制层没有实现接口,直接创建一个类(has a Service属性),再提供对应的(增删改查)方法即可-->5.借助PageController类中的方法处理页面请求;-->6.点击“菜单管理”按钮之后需要呈现一些菜单信息,需要对“菜单管理”按钮进行事件注册,在html文件中编写注册事件的前端代码(了解);

1.定义一个接口方法,用于查询所有菜单以及菜单对应的上级菜单名称,代码如下:

package com.cy.pj.sys.dao;

import org.apache.ibatis.annotations.Mapper;

import java.util.List;

import java.util.Map;

/**系统菜单数据层对象*/

@Mapper

public interface SysMenuDao {

/*查询所有菜单以及菜单对应的上级菜单名称/

List> findObjects();

}

2.定义好查询方法之后再创建映射文件及编写查询的sql语句方法:

1)其中映射文件的头文件部分可以查阅mybatis官网的映射文件,复制粘贴过来;

2)定义mapper标签:

3)在...内部编写查询的SQL语句如下:

//id 指的是上面接口中定义的方法,resultType是返回的结果集方法;

select c.*,(select namefrom sys_menus p

where c.parentId=p.id) parentName

from sys_menus c

3.创建业务层接口及数据层接口的实现类

1)创建业务层接口及提供方法:

package com.cy.pj.sys.service;

import java.util.List;

import java.util.Map;

public interface SysMenuService {

List> findObjects();

}

2)创建数据层接口的实现类:

package com.cy.pj.sys.service.impl;

import com.cy.pj.sys.dao.SysMenuDao;

import com.cy.pj.sys.service.SysMenuService;

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

import org.springframework.stereotype.Service;

import java.util.List;

import java.util.Map;

@Service

public class SysMenuServiceImpl implements SysMenuService {

@Autowired

private SysMenuDao sysMenuDao;

@Override

public List> findObjects() {

return sysMenuDao.findObjects();

}}

4.控制层引用业务层方法并基于此方法提供其对应方法(增删改查)的映射路径:

package com.cy.pj.sys.controller;

import com.cy.pj.common.pojo.JsonResult;

import com.cy.pj.sys.service.SysMenuService;

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

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.List;

import java.util.Map;

@RestController

@RequestMapping("/menu/")

public class SysMenuController {

@Autowired

private SysMenuService sysMenuService;

@RequestMapping("doFindObjects")

public JsonResult doFindObjects(){

return new JsonResult(sysMenuService.findObjects());

}}

5.借助PageController类中的方法处理页面请求(所有页面请求都可以在此类对象中操作)

package com.cy.pj.sys.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

/*借助PageController处理客户端所有页面请求/

@RequestMapping("/")

@Controller

public class PageController {

@RequestMapping("/{module}/${modulUI}")//传入括号内的内容要注意通用性

public String doModuleUI(@PathVariable String moduleUI){

return "sys/"+moduleUI;

}}

### 菜单模块“添加”的相关代码实现步骤:

思路:1.在html文件中找到“添加”按钮,进行注册click(点击)事件的代码编写(前端内容,了解),可参考src--main--resources--templates.modules--sys--menu_list文件进行编写;-->2.针对于“上级菜单”是树状结构,所以需要在数据层SysMenuDao接口中提供一个查询树状菜单的方法,查询所有菜单中的ID,name,parentId字段的值,然后每行记录封装为一个Node对象,这样的对象可以适配类似zTree结构的数据呈现,因为今后在项目中创建其他子系统(如商品goods子系统)只要涉及到树结构的查询需求都需要使用Node对象,所以可以在common项目中的src--main-java--pojo文件下创建Node类并提供get/set方法,所有pojo都允许被序列化,所以要implements Serializable ;-->3.点击“添加”--点击“上级菜单”后,按F12查看报错提示,并按照提示在控制层添加所需方法;

1.在html文件中找到“添加”按钮,进行注册click(点击)事件的代码编写(前端内容,了解),可参考src--main--resources--templates.modules--sys--menu_list文件进行编写;

2.针对于“上级菜单”是树状结构,所以需要在数据层SysMenuDao接口中提供一个查询树状菜单的方法及Node对象等代码如下:

1) package com.cy.pj.sys.dao;

import com.cy.pj.common.pojo.Node;

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Select;

import java.util.List;

import java.util.Map;

/**系统菜单数据层对象*/

@Mapper

public interface SysMenuDao {

/**查询所有菜单中的ID,name,parentId字段的值,然后每行记录封装为一个Node对象,

这样的对象可以适配类似zTree结构的数据呈现.

@return */ @Select("select id,name,parentId from sys_menus")

List findZtreeMenuNodes();

}

2) Node对象代码:

package com.cy.pj.common.pojo;

import lombok.Data;

import java.io.Serializable;

@Data

public class Node implements Serializable {

private static final long serialVersionUID = -7437395435719036861L;

private Integer id;

private String name;

private Integer parentId;

}

3)将封装的Node对象引入到第1)步中;

4)将数据层SysMenuDao接口中的“List findZtreeMenuNodes();”添加到业务层接口SysMenuService中,同时在SysMenuService实现类SysMenuServiceIml中补充此方法,代码如下:

业务层

package com.cy.pj.sys.service;

import com.cy.pj.common.pojo.Node;

import java.util.List;

import java.util.Map;

public interface SysMenuService {

List findZtreeMenuNodes();

List> findObjects();

}

业务层实现类

package com.cy.pj.sys.service.impl;

import com.cy.pj.common.pojo.Node;

import com.cy.pj.sys.dao.SysMenuDao;

import com.cy.pj.sys.service.SysMenuService;

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

import org.springframework.stereotype.Service;

import java.util.List;

import java.util.Map;

@Service

public class SysMenuServiceImpl implements SysMenuService {

@Autowired

private SysMenuDao sysMenuDao;

@Override

public List findZtreeMenuNodes() {

return sysMenuDao.findZtreeMenuNodes();

}

}

3.在控制层代码实现:

bVcKzVf

package com.cy.pj.sys.controller;

import com.cy.pj.common.pojo.JsonResult;

import com.cy.pj.sys.service.SysMenuService;

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

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.List;

import java.util.Map;

@RestController

@RequestMapping("/menu/")

public class SysMenuController {

@Autowired

private SysMenuService sysMenuService;

@RequestMapping("doFindZtreeMenuNodes")

public JsonResult doFindZtreeMenuNodes(){

return new JsonResult(sysMenuService.findZtreeMenuNodes());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值