sys
这个个人写SSM单体架构时整理的笔记,仅做个人使用.
1.准备工作
1.1pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.cy</groupId>
<artifactId>CGB-DB-SYS-V3.03</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>CGB-DB-SYS-V3.03</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 基于mybatis框架实现的一个分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
<!-- 添加AOP的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1.2 application.yml
#server
server:
port: 80
servlet:
context-path: /
tomcat:
threads:
max: 500
min-spare: 5
#HikariCp
spring:
datasource:
url: jdbc:mysql:///jtsys?serverTimezone=GMT%2B8&characterEncoding=utf8
username: root
password: 123
thymeleaf: #thymeleaf
prefix: classpath:/templates/pages/
aop:
proxy-target-class: false #jdk Proxy (优先使用jdk,但目标类没有实现接口会考虑实用cglib)
task:
execution:
pool:
core-size: 5
max-size: 128
queue-capacity: 128
keep-alive: 60000
thread-name-prefix: DB-SERVICE-THREAD-
shiro:
loginUrl: /doLoginUI
web:
enabled: true
sessionManager:
sessionIdCookieEnabled: true
sessionIdUrlRewritingEnabled: false
rememberMeManager:
cookie:
name: rememberMe
maxAge: 3600
#mybatis
mybatis:
mapper-locations:
- classpath:/mapper/*/*.xml
#log
logging:
level:
com.cy: debug
mybatis.configuration.default-statement-timeout=30
mybatis.configuration.map-underscore-to-camel-case=true
1.3 vo对象
@Data
@NoArgsConstructor
public class JsonResult {
/**消息表示状态码*/
private Integer state;//1 表示正确数据,0表示异常数据
/**状态码对应的具体信息*/
private String message;
/**数据(基于此属性封装业务层返回的数据)*/
private Object data;
public JsonResult(String message){
this.state=1;
this.message=message;
//方法2
//setState(1);
//setMessage(message);
}
public JsonResult(Object data){
this.state=1;
this.data=data;
}
//基于此构造方法进行错误信息的初始化
public JsonResult(Throwable e){//Throwable是所有异常类的父类
this.state=0;//error
this.message=e.getMessage();//获取异常信息
}
}
1.4 全局异常处理
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ShiroException.class)
@ResponseBody
public JsonResult doHandleShiroException(
ShiroException e) {
JsonResult r=new JsonResult();
r.setState(0);
if(e instanceof UnknownAccountException) {
r.setMessage("账户不存在");
}else if(e instanceof LockedAccountException) {
r.setMessage("账户已被禁用");
}else if(e instanceof IncorrectCredentialsException) {
r.setMessage("密码不正确");
}else if(e instanceof AuthorizationException) {
r.setMessage("没有此操作权限");
}else {
r.setMessage("系统维护中");
}
e.printStackTrace();
return r;
}
/**
* @ExceptionHandler 注解描述的方法为控制层的异常处理方法,此注解
* 中传入的异常类型,为它描述的方法可以处理的异常。
* @param e
* @return
*/
@ExceptionHandler(value=RuntimeException.class)
@ResponseBody
public JsonResult doHandleRuntimeException(RuntimeException e) {
e.printStackTrace();
return new JsonResult(e);
}
}
1.5 分页对象
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageObject<T> implements Serializable{
private static final long serialVersionUID = 5727659641634783999L;
/**当前页记录*/
private List<T> records;
/**总行数(通过查询获得)*/
private Integer rowCount;
/**总页数*/
private Integer pageCount;
/**每页要显示多少条记录*/
private Integer pageSize;
/**当前页的页码值*/
private Integer pageCurrent;
public PageObject(List<T> records, Integer rowCount,Integer pageSize, Integer pageCurrent) {
super();
thi