SSM笔记

这篇笔记详细记录了SSM(Spring、SpringMVC、MyBatis)整合过程,包括POM配置、YAML配置、Vo对象、全局异常处理、分页对象、自定义参数异常、SQL操作、ResultMap解析、动态SQL、AOP日志记录和事务管理。内容涵盖SQL编写、动态SQL(if、choose等)和拦截器的应用,是SSM单体架构开发的实用参考。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值