我用的事IDEA,jdk版本是1.7.新建项目的时候这个地方的选择需要注意一下,springboot版本是1.5的,否则不支持1.7的jdk

pom.xml

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</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>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.20</version>
</dependency>

======================异常处理

ExceptionHandler.java

package com.springbootmybatis.demo.exceptiion;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; import java.util.HashMap;
import java.util.Map; /**
* 异常处理类
*/
@ControllerAdvice
public class ExceptionHandle {
private final static Logger logger= LoggerFactory.getLogger(ExceptionHandle.class);
/**
* 处理返回的Exception类型的异常
* @param e
* @return
*/
@ResponseBody
@ExceptionHandler(value = Exception.class)
public Map<String,Object> handler(Exception e){
Map<String,Object> map=new HashMap<String, Object>();
if(e instanceof MyException){//自定义异常
MyException me=(MyException)e;
map.put("status",me.getStatus());
map.put("msg",e.getMessage());
}else{
//logger.error("系统异常:{}",e);
map.put("status",2);
map.put("msg","程序异常");
}
return map;
}
}

MyException.java

package com.springbootmybatis.demo.exceptiion;

public class MyException extends RuntimeException {
private Integer status;
public MyException(Integer status,String message) {
super(message);
this.status=status;
} public Integer getStatus() {
return status;
} public void setStatus(Integer status) {
this.status = status;
}
}

================AOP

HttpAspect.java

package com.springbootmybatis.demo.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; /**
* Aop基本示例
*/
@Aspect
@Component
public class HttpAspect {
private final static Logger logger= LoggerFactory.getLogger(HttpAspect.class); /**
* 方法执行之前,拦截单个方法
*/
@Before("execution(public * com.springbootmybatis.demo.controller.TestBootController.getUser(..))")
public void aopOneBeforeMethod(JoinPoint joinpoint){
ServletRequestAttributes attributes= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request=attributes.getRequest();
//url
logger.info("url={}",request.getRequestURL());
//method
logger.info("method={}",request.getMethod());
//ip
logger.info("ip={}", request.getRemoteAddr());
//类方法
logger.info("class_method={}",joinpoint.getSignature().getDeclaringTypeName()+"."+joinpoint.getSignature().getName());
//参数
logger.info("args={}",joinpoint.getArgs());
System.out.println("请求了getUser方法-->前");
}
/**
* 方法执行之前,拦截所有的方法
*/
@Before("execution(public * com.springbootmybatis.demo.controller.TestBootController.*(..))")
public void aopAllBeforeMethod(){
System.out.println("执行了所有的方法拦截-->前");
} /**
* 方法执行之后,拦截单个方法
*/
@After("execution(public * com.springbootmybatis.demo.controller.TestBootController.getUser(..))")
public void aopOneAfterMethod(){
System.out.println("请求了getUser方法-->后");
}
/**
* 方法执行之前,拦截所有的方法
*/
@After("execution(public * com.springbootmybatis.demo.controller.TestBootController.*(..))")
public void aopAllAfterMethod(){
System.out.println("执行了所有的方法拦截-->后");
} }

HttpAspectNoRepeat.java

package com.springbootmybatis.demo.aspect;

import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; /**
* Aop基本示例,去除重复的拦截配置
*/
@Aspect
@Component
public class HttpAspectNoRepeat { private final static Logger logger= LoggerFactory.getLogger(HttpAspectNoRepeat.class); @Pointcut("execution(public * com.springbootmybatis.demo.controller.TestBootController.getUser(..))")
public void aopOne(){ }
@Pointcut("execution(public * com.springbootmybatis.demo.controller.TestBootController.*(..))")
public void aopAll(){ }
/**
* 方法执行之前,拦截单个方法
*/
@Before("aopOne()")
public void aopOneBeforeMethod(){
logger.info("去除重复配置后的单个方法拦截-->前-->logger");
}
/**
* 方法执行之前,拦截所有的方法
*/
@Before("aopAll()")
public void aopAllBeforeMethod(){
System.out.println("去除重复配置后的所有方法拦截-->前");
} /**
* 方法执行之后,拦截单个方法
*/
@After("aopOne()")
public void aopOneAfterMethod(){
System.out.println("去除重复配置后的单个方法拦截-->后");
}
/**
* 方法执行之前,拦截所有的方法
*/
@After("aopAll()")
public void aopAllAfterMethod(){
System.out.println("去除重复配置后的所有方法拦截-->后");
} @AfterReturning(returning = "object",pointcut = "aopOne()")
public void getReturnFromMethod(Object object){
logger.info("返回值:{}",object);
}
}

TestBootController.java

package com.springbootmybatis.demo.controller;

import com.springbootmybatis.demo.entity.Gys;
import com.springbootmybatis.demo.exceptiion.MyException;
import com.springbootmybatis.demo.service.GysServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map; @RestController
@RequestMapping("/testboot")
public class TestBootController { @RequestMapping("/getgys")
public Gys getUser() {
Gys user = new Gys();
user.setRoleName("test");
return user;
} @Autowired
private GysServiceImpl gysService;
@RequestMapping("/getlist")
public List<Gys> getlist() {
List<Gys> list=null;
try {
list=gysService.getGysList();
}catch (Exception e){
e.printStackTrace();
}
return list;
} @ResponseBody
@RequestMapping("/testException")
public Map<String,Object> testException() throws Exception {
boolean a=false;
if(a){
return new HashMap<String, Object>();
}else{
int c=0;
int v=5/c;
return null;
//throw new Exception("测试一个异常");
}
}
@ResponseBody
@RequestMapping("/testMyException")
public Map<String,Object> testMyException() throws Exception {
boolean a=false;
if(a){
return new HashMap<String, Object>();
}else{
throw new MyException(3,"测试一个自定义异常");
}
}
}

ITestDao.java

package com.springbootmybatis.demo.dao;

import com.springbootmybatis.demo.entity.Gys;

import java.util.List;

public interface IGysDao {
List<Gys> getUserList() throws Exception;
}

GysServiceImpl.java

package com.springbootmybatis.demo.service;

import com.springbootmybatis.demo.dao.IGysDao;
import com.springbootmybatis.demo.entity.Gys;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.util.List; @Service("gysService")
public class GysServiceImpl {
@Autowired
private IGysDao iGysDao; public List<Gys> getGysList() throws Exception{
return iGysDao.getUserList();
}
}

DemoApplication.java

package com.springbootmybatis.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.support.SpringBootServletInitializer; @SpringBootApplication
@MapperScan("com.springbootmybatis.demo.dao")
public class DemoApplication extends SpringBootServletInitializer{ public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

Gys.java

package com.springbootmybatis.demo.entity;

public class Gys {
private String roleName; public String getRoleName() {
return roleName;
} public void setRoleName(String roleName) {
this.roleName = roleName;
}
}

Gys.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.springbootmybatis.demo.dao.IGysDao">
<select id="getUserList" resultType="com.springbootmybatis.demo.entity.Gys">
SELECT * FROM gys;
</select>
</mapper>

application-dev.yml

mybatis:
mapper-locations: classpath:mapper/*.xml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springmvc-mybatis
username: root
password: gys
type: com.alibaba.druid.pool.DruidDataSource
server:
port: 8082
logging:
level: debug

application.yml

spring:
profiles:
active: dev

 ===============单元测试(可以在需要测试的界面右击==>go to==>test...)

测试service

package com.springbootmybatis.demo;

import com.springbootmybatis.demo.entity.Gys;
import com.springbootmybatis.demo.service.GysServiceImpl;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import java.util.List; /**
* 测试service
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestGysService { @Autowired
private GysServiceImpl gysService; @Test
public void getGysList() throws Exception{
List<Gys> list=gysService.getGysList();
Assert.assertEquals(2,list.size());
}
}

测试controller

package com.springbootmybatis.demo.controller;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import static org.junit.Assert.*; /**
* 测试controller
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class TestBootControllerTest { @Autowired
private MockMvc mvc; @Test
public void getUser() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/getgys"))
.andExpect(MockMvcResultMatchers.status().isOk());
} }

springboot+mybatis整合(单元测试,异常处理,日志管理,AOP)的更多相关文章

  1. SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版)

    SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版) ================================ ©Copyright 蕃薯耀 2 ...

  2. SpringBoot | 第二十三章:日志管理之整合篇

    前言 在本系列<第四章:日志管理>中,由于工作中日志这块都是走默认配置,也没有深入了解过,因为部署过程中直接使用了linux中的输出重定向功能,如java -jar xx.jar > ...

  3. SpringBoot+Mybatis整合入门(一)

    SpringBoot+Mybatis 四步整合 第一步 添加依赖 springBoot+Mybatis相关依赖 <!--springBoot相关--> <parent> < ...

  4. Mybatis整合Spring实现事务管理的源码分析

    一:前言 没有完整看完,但是看到了一些关键的地方,这里做个记录,过程会有点乱,以后逐渐补充最终归档为完整流程:相信看过框架源码的都知道过程中无法完全确定是怎样的流程,毕竟不可能全部都去测试一遍 ,但是 ...

  5. springboot(整合多数据源demo,aop,定时任务,异步方法调用,以及获取properties中自定义的变量值)

    有这么一个需求 每个部门,需要操作的数据库不同,A部门要将数据放test数据库,B 部门数据 要放在test1数据库 同一个项目 需要整合 多个数据源 上传个demo 方便自己以后回看!!!!!!!! ...

  6. SpringBoot+Mybatis整合实例

    前言 大家都知道springboot有几大特点:能创建独立的Spring应用程序:能嵌入Tomcat,无需部署WAR文件:简化Maven配置:自动配置Spring等等.这里整合mybatis,创建一个 ...

  7. 2、SpringBoot+Mybatis整合------一对一

    开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/SpringBoot_Mybatis01/tree/93398da60c647573645917b2 ...

  8. springboot mybatis 整合

    新建项目在上一篇. 第二步:创建表和相应的实体类 实体类:user.java package com.qtt.im.entity; import java.io.Serializable; publi ...

  9. springboot/Mybatis整合

    正题 本项目使用的环境: 开发工具:Intellij IDEA 2017.1.3 springboot: 1.5.6 jdk:1.8.0_161 maven:3.3.9 额外功能 PageHelper ...

随机推荐

  1. 基于.NET平台常用的框架整理 【转载】

    [转载] http://www.cnblogs.com/hgmyz/p/5313983.html 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个 ...

  2. vue-cli 2.x 项目优化之:引入本地静态库文件

    demo地址:https://github.com/cag2050/vue_cli_optimize_static_resource vue-cli 将静态资源文件放到 static 文件夹下并引用: ...

  3. eclipse卡死在search for main types 20 files to index

    run as application时,提示search for main types  20 files to index (*/*/*.jar)某个maven依赖jar出了问题,找不到main方法 ...

  4. 配置中心Client端

    配置中心Client端 1.在Order工程中的Order-Server模块的pom.xml中增加 <dependency> <groupId>org.springframew ...

  5. C# 继承、虚方法、方法重载和多态

    继承:继承属于单继承,只能继承一个父类. 继承的一个结果是派生于基类的子类在方法和属性上有一定的重叠. 继承只能够同时继承与一个基类:可以同时继承一个基类和多个接口,但是基类必须放在第一个.(注:C# ...

  6. HanLP用户自定义词典源码分析详解

    1. 官方文档及参考链接 l 关于词典问题Issue,首先参考:FAQ l 自定义词典其实是基于规则的分词,它的用法参考这个issue l 如果有些数量词.字母词需要分词,可参考:P2P和C2C这种词 ...

  7. ML: 聚类算法R包-K中心点聚类

    K-medodis与K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值, ...

  8. MYSQL优化浅谈,工具及优化点介绍,mysqldumpslow,pt-query-digest,explain等

    MYSQL优化浅谈 msyql是开发常用的关系型数据库,快速.稳定.开源等优点就不说了. 个人认为,项目上线,标志着一个项目真正的开始.从运维,到反馈,到再分析,再版本迭代,再优化… 这是一个漫长且考 ...

  9. 具有 Button 风格的 Panel

    unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  10. iphone越狱安装python2.7

    cydia  添加源地址:http://apt.so/whitefur 选择python 进行安装 打开ssh连接后输入python 显示python2.7.3 安装成功