一. 简介

 1. 版本

springboot版本为2.0.3.RELEASE,mybatisplus版本为2.1.9, druid版本为1.1.9,swagger版本为2.7.0

  2. 项目地址

    https://gitee.com/wbsxch/ssm.git

 3. 留个记录,方便查找

    开发步骤:

    1. 新建springboot项目。

    2. 导入依赖   -->  devtools,lombok,web,thymeleaf,mysql,aop,mybatisplus,druid,swagger。

    3. maven多环境配置。

    4. 编写application.yml  -->  项目端口,项目路径名,mybatisplus配置,mysql多数据源配置。

    5. 新建DataSourceContextHolder 用于设置,获取,清空 当前线程内的数据源变量。

    6. 新建 MultipleDataSource 实现 AbstractRoutingDataSource 类。重写determineCurrentLookupKey(),通过

      DataSourceContextHolder 获取数据源变量,用于当作lookupKey取出指定的数据源。

    7. 新建DataSourceEnum 用于存放数据源名称。

    8. 新建注解 DataSource,用于aop类中当作切入点来选择数据源。

     编写aop类 --> DataSourceAspect.java

    9. 新建并配置DruidConfiguration,MybatisplusConfiguration,SwaggerConfiguration 三个类。

    DruidConfiguration -->  StatViewServlet 和 WebStatFilter Druid监控配置和监控过滤器。

    MybatisplusConfiguration -->  mybatisplus 分页插件,SQL执行效率插件

                    数据源Bean,MultipleDataSource 注入

                    SqlSessionFactory注入

    SwaggerConfiguration --> 常规配置。

    10. crud Controller接口。

    11. 完整项目结构

    

二. 详细步骤

  1. 新建springboot项目

    idea新建Empty项目 然后创建springboot项目 勾选 devtools,lombok,web,thymeleaf,mysql

  2. 导入依赖

    pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.seawaterbt</groupId><artifactId>ssm</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>ssm</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><druid.version>1.1.9</druid.version><swagger.version>2.7.0</swagger.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></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.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>2.1.9</version></dependency><!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${swagger.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency></dependencies><profiles><profile><id>prod</id><properties><config.dir>prod</config.dir></properties></profile><profile><id>dev</id><properties><config.dir>dev</config.dir></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>qa</id><properties><config.dir>qa</config.dir></properties></profile></profiles><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><filtering>true</filtering><directory>src/main/resources/config/${config.dir}</directory><includes><include>*.*</include></includes></resource><resource><directory>src/main/resources/</directory></resource></resources></build></project>

pom.xml

  3. Maven多环境配置 看pom文件

  4. 编写application.yml

    application.yml

server:port: 8080servlet:context-path: /ssm
spring:datasource:druid:db1:username: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql:///mdsinitialSize: 5minIdle: 5maxActive: 20db2:username: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql:///ssjinitialSize: 5minIdle: 5maxActive: 20
mybatis-plus:# 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml# 如果是放在resource目录 classpath:/mapper/*Mapper.xmlmapper-locations: classpath:/mapper/*Mapper.xml#实体扫描,多个package用逗号或者分号分隔typeAliasesPackage: com.seawatebt.ssm.entityglobal-config:#主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";id-type: 0#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"field-strategy: 2#驼峰下划线转换db-column-underline: true#mp2.3+ 全局表前缀 mp_#table-prefix: mp_#刷新mapper 调试神器refresh-mapper: true#数据库大写下划线转换#capital-mode: true#逻辑删除配置(下面3个配置)logic-delete-value: 4logic-not-delete-value: 0configuration:#配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)map-underscore-to-camel-case: truecache-enabled: false#配置JdbcTypeForNull, oracle数据库必须配置jdbc-type-for-null: 'null'

application.yml

  5. 新建DataSourceContextHolder

    DataSourceContextHolder.java

package com.seawaterbt.ssm.multiple;public class DataSourceContextHolder {private static final ThreadLocal<String> contextHolder = new InheritableThreadLocal<>();/***  设置数据源* @param db*/public static void setDataSource(String db){contextHolder.set(db);}/*** 取得当前数据源* @return*/public static String getDataSource(){return contextHolder.get();}/*** 清除上下文数据*/public static void clear(){contextHolder.remove();}
}

DataSourceContextHolder.java

  6. 新建 MultipleDataSource

    MultipleDataSource.java

package com.seawaterbt.ssm.multiple;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class MultipleDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DataSourceContextHolder.getDataSource();}
}

MultipleDataSource.java

  7. 新建DataSourceEnum

    DataSourceEnum.java

package com.seawaterbt.ssm.enums;public enum DataSourceEnum {DB1("db1"),DB2("db2");private String value;DataSourceEnum(String value){this.value=value;}public String getValue() {return value;}
}

DataSourceEnum.java

  8. 新建注解 DataSource

    DataSource.java

package com.seawaterbt.ssm.annotation;import com.seawaterbt.ssm.enums.DataSourceEnum;import java.lang.annotation.*;@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSource {DataSourceEnum value() default DataSourceEnum.DB1;
}

DataSource.java

    DataSourceAspect.java

@Component
@Slf4j
@Aspect
@Order(-1)
public class DataSourceAspect {@Pointcut("@within(com.seawaterbt.ssm.annotation.DataSource) || @annotation(com.seawaterbt.ssm.annotation.DataSource)")public void pointCut(){}@Before("pointCut() && @annotation(dataSource)")public void doBefore(DataSource dataSource){log.info("选择数据源---"+dataSource.value().getValue());DataSourceContextHolder.setDataSource(dataSource.value().getValue());}@After("pointCut()")public void doAfter(){DataSourceContextHolder.clear();}
}

  9. 新建并配置DruidConfiguration,MybatisplusConfiguration,SwaggerConfiguration

    DruidConfiguration.java

package com.seawaterbt.ssm.config;import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class DruidConfiguration {@Beanpublic ServletRegistrationBean startViewServlet(){ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");// IP白名单servletRegistrationBean.addInitParameter("allow","127.0.0.1");// IP黑名单(共同存在时,deny优先于allow)servletRegistrationBean.addInitParameter("deny","127.0.0.1");//控制台管理用户servletRegistrationBean.addInitParameter("loginUsername","admin");servletRegistrationBean.addInitParameter("loginPassword","123456");//是否能够重置数据servletRegistrationBean.addInitParameter("resetEnable","false");return servletRegistrationBean;}@Beanpublic FilterRegistrationBean statFilter(){FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());//添加过滤规则filterRegistrationBean.addUrlPatterns("/*");//忽略过滤的格式filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");return filterRegistrationBean;}
}

DruidConfiguration.java

    MyBatiesPlusConfiguration.java

package com.seawaterbt.ssm.config;import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.baomidou.mybatisplus.MybatisConfiguration;
import com.baomidou.mybatisplus.entity.GlobalConfiguration;
import com.baomidou.mybatisplus.mapper.LogicSqlInjector;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.plugins.PerformanceInterceptor;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
import com.seawaterbt.ssm.enums.DataSourceEnum;
import com.seawaterbt.ssm.multiple.MultipleDataSource;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;@Configuration
@MapperScan("com.seawaterbt.ssm.mapper*")
public class MyBatiesPlusConfiguration {/** 分页插件,自动识别数据库类型* 多租户,请参考官网【插件扩展】*/@Beanpublic PaginationInterceptor paginationInterceptor() {PaginationInterceptor paginationInterceptor = new PaginationInterceptor();// 开启 PageHelper 的支持paginationInterceptor.setLocalPage(true);return paginationInterceptor;}/*** SQL执行效率插件*/@Bean@Profile({"dev","qa"})// 设置 dev test 环境开启public PerformanceInterceptor performanceInterceptor() {PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();performanceInterceptor.setMaxTime(1000);performanceInterceptor.setFormat(true);return performanceInterceptor;}@Bean(name = "db1")@ConfigurationProperties(prefix = "spring.datasource.druid.db1" )public DataSource db1() {return DruidDataSourceBuilder.create().build();}@Bean(name = "db2")@ConfigurationProperties(prefix = "spring.datasource.druid.db2" )public DataSource db2() {return DruidDataSourceBuilder.create().build();}/*** 动态数据源配置* @return*/@Bean@Primarypublic DataSource multipleDataSource(@Qualifier("db1") DataSource db1, @Qualifier("db2") DataSource db2) {MultipleDataSource multipleDataSource = new MultipleDataSource();Map< Object, Object > targetDataSources = new HashMap<>();targetDataSources.put(DataSourceEnum.DB1.getValue(), db1);targetDataSources.put(DataSourceEnum.DB2.getValue(), db2);//添加数据源
        multipleDataSource.setTargetDataSources(targetDataSources);//设置默认数据源
        multipleDataSource.setDefaultTargetDataSource(db1);return multipleDataSource;}@Bean("sqlSessionFactory")public SqlSessionFactory sqlSessionFactory() throws Exception {MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();sqlSessionFactory.setDataSource(multipleDataSource(db1(),db2()));//sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/*/*Mapper.xml"));
MybatisConfiguration configuration = new MybatisConfiguration();//configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
        configuration.setJdbcTypeForNull(JdbcType.NULL);configuration.setMapUnderscoreToCamelCase(true);configuration.setCacheEnabled(false);sqlSessionFactory.setConfiguration(configuration);sqlSessionFactory.setPlugins(new Interceptor[]{ //PerformanceInterceptor(),OptimisticLockerInterceptor()paginationInterceptor() //添加分页功能
        });//sqlSessionFactory.setGlobalConfig(globalConfiguration());return sqlSessionFactory.getObject();}/*@Beanpublic GlobalConfiguration globalConfiguration() {GlobalConfiguration conf = new GlobalConfiguration(new LogicSqlInjector());conf.setLogicDeleteValue("-1");conf.setLogicNotDeleteValue("1");conf.setIdType(0);//conf.setMetaObjectHandler(new MyMetaObjectHandler());conf.setDbColumnUnderline(true);conf.setRefresh(true);return conf;}*/
}

MyBatiesPlusConfiguration.java

    SwaggerConfiguration.java

package com.seawaterbt.ssm.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2
public class SwaggerConfiguration {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.seawaterbt.ssm.controller")).paths(PathSelectors.any()).build().apiInfo(apiInfo());}private ApiInfo apiInfo(){return new ApiInfoBuilder().title("多数据源 SSM 测试服务").description("多数据源 SSM 测试文档").termsOfServiceUrl("http://www.seawaterbt.com")//.contact(new Contact("海水不甜","http://www.seawaterbt.com","809318068@qq.com")).version("1.0").build();}}

SwaggerConfiguration.java

  10. crud Controller接口

    1. Entity

      Student.java

package com.seawaterbt.ssm.entity;import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Api("学生实体对象")
@Data
@TableName("t_student")
public class Student {@ApiModelProperty("学生id")@TableId(type = IdType.AUTO)private Integer id;@ApiModelProperty("学生姓名")private String name;@ApiModelProperty("学生年龄")private Integer age;@ApiModelProperty("学生班级")private String classname;}

Student.java

      Teacher.java

package com.seawaterbt.ssm.entity;import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Api("老师实体对象")
@Data
@TableName("t_teacher")
public class Teacher {@ApiModelProperty("老师id")@TableId(type = IdType.AUTO)private Integer id;@ApiModelProperty("老师姓名")private String name;@ApiModelProperty("老师年龄")private Integer age;@ApiModelProperty("老师所教学科")private String subject;
}

Teacher.java

    2. Mapper 接口及其xml

      StudentMapper.java

package com.seawaterbt.ssm.mapper;import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.seawaterbt.ssm.entity.Student;public interface StudentMapper extends BaseMapper<Student> {
}

StudentMapper.java

      StudentMapper.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.seawaterbt.ssm.mapper.StudentMapper"></mapper>

StudentMapper.xml

      TeacherMapper.java

package com.seawaterbt.ssm.mapper;import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.seawaterbt.ssm.entity.Teacher;public interface TeacherMapper extends BaseMapper<Teacher> {
}

TeacherMapper.java

      TeacherMapper.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.seawaterbt.ssm.mapper.TeacherMapper"></mapper>

TeacherMapper.xml

    3. Service 接口及其实现类

      StudentService.java

package com.seawaterbt.ssm.service;import com.baomidou.mybatisplus.service.IService;
import com.seawaterbt.ssm.entity.Student;public interface StudentService extends IService<Student> {
}

StudentService.java

      StudentServiceImpl.java

package com.seawaterbt.ssm.service.impl;import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.seawaterbt.ssm.entity.Student;
import com.seawaterbt.ssm.mapper.StudentMapper;
import com.seawaterbt.ssm.service.StudentService;
import org.springframework.stereotype.Service;@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper,Student> implements StudentService {
}

StudentServiceImpl.java

      TeacherService.java

package com.seawaterbt.ssm.service;import com.baomidou.mybatisplus.service.IService;
import com.seawaterbt.ssm.entity.Teacher;public interface TeacherService extends IService<Teacher> {
}

TeacherService.java

      TeacherServiceImpl.java

package com.seawaterbt.ssm.service.impl;import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.seawaterbt.ssm.annotation.DataSource;
import com.seawaterbt.ssm.entity.Teacher;
import com.seawaterbt.ssm.enums.DataSourceEnum;
import com.seawaterbt.ssm.mapper.TeacherMapper;
import com.seawaterbt.ssm.service.TeacherService;
import org.springframework.stereotype.Service;import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;@Service
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper,Teacher> implements TeacherService {@Override@DataSource(DataSourceEnum.DB2)public boolean insert(Teacher entity) {return super.insert(entity);}@Override@DataSource(DataSourceEnum.DB2)public boolean deleteById(Serializable id) {return super.deleteById(id);}@Override@DataSource(DataSourceEnum.DB2)public boolean updateById(Teacher entity) {return super.updateById(entity);}@Override@DataSource(DataSourceEnum.DB2)public Teacher selectById(Serializable id) {return super.selectById(id);}@Override@DataSource(DataSourceEnum.DB2)public List<Teacher> selectList(Wrapper<Teacher> wrapper) {return super.selectList(wrapper);}@Override@DataSource(DataSourceEnum.DB2)public Page<Teacher> selectPage(Page<Teacher> page) {return super.selectPage(page);}@Override@DataSource(DataSourceEnum.DB2)public Page<Teacher> selectPage(Page<Teacher> page, Wrapper<Teacher> wrapper) {return super.selectPage(page, wrapper);}
}

TeacherServiceImpl.java

    4. Vo

      StudentVo.java

package com.seawaterbt.ssm.vo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
@ApiModel("学生vo")
public class StudentVo {@ApiModelProperty("学生姓名")private String name;@ApiModelProperty("学生年龄")private Integer age;@ApiModelProperty("学生班级")private String classname;
}

StudentVo.java

      TeacherVo.java

package com.seawaterbt.ssm.vo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
@ApiModel("老师vo")
public class TeacherVo {@ApiModelProperty("老师姓名")private String name;@ApiModelProperty("老师年龄")private Integer age;@ApiModelProperty("老师教的学科")private String subject;
}

TeacherVo.java

    5. Controller

      StudentController.java

package com.seawaterbt.ssm.controller;import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.seawaterbt.ssm.entity.Student;
import com.seawaterbt.ssm.service.StudentService;
import com.seawaterbt.ssm.vo.StudentVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@Api("对学生表CRUD")
@RestController
@RequestMapping("/student")
public class StudentController {@Autowiredprivate StudentService studentService;@ApiOperation("添加学生")@PostMapping("/add")public String add(@RequestBody StudentVo student){Student stu = new Student();stu.setName(student.getName());stu.setAge(student.getAge());stu.setClassname(student.getClassname());return studentService.insert(stu)?"添加成功":"添加失败";}@ApiOperation("删除学生")@DeleteMapping("/delete/{id}")public String delete(@ApiParam("学生的主键id")@PathVariable(value = "id") Integer id){return studentService.deleteById(id)?"删除成功":"删除失败";}@ApiOperation("修改学生")@PostMapping("/update")public String update(@RequestBody Student student){return studentService.updateById(student)?"修改成功":"修改失败";}@ApiOperation(value = "查询学生")@GetMapping("/list")public List<Student> list(){Wrapper<Student> wrapper = new EntityWrapper<>();return studentService.selectList(wrapper);}
}

StudentController.java

      TeacherController.java

package com.seawaterbt.ssm.controller;import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.seawaterbt.ssm.entity.Teacher;
import com.seawaterbt.ssm.service.TeacherService;
import com.seawaterbt.ssm.vo.TeacherVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@Api("对老师表CRUD")
@RestController
@RequestMapping("/teacher")
public class TeacherController {@Autowiredprivate TeacherService teacherService;@ApiOperation(value = "添加老师")@PostMapping("/add")public String add(@RequestBody TeacherVo teacher){Teacher tea = new Teacher();tea.setName(teacher.getName());tea.setAge(teacher.getAge());tea.setSubject(teacher.getSubject());return teacherService.insert(tea)?"添加成功":"添加失败";}@ApiOperation("删除老师")@DeleteMapping("/delete/{id}")public String delete(@ApiParam("老师的主键id")@PathVariable(value = "id") Integer id){return teacherService.deleteById(id)?"删除成功":"删除失败";}@ApiOperation("修改老师")@PostMapping("/update")public String update(@RequestBody Teacher teacher){return teacherService.updateById(teacher)?"修改成功":"修改失败";}@ApiOperation(value = "查询老师")@GetMapping("/list")public List<Teacher> list(){Wrapper<Teacher> wrapper = new EntityWrapper<>();return teacherService.selectList(wrapper);}
}

TeacherController.java

转载于:https://www.cnblogs.com/hsbt2333/p/9347249.html

使用springboot + druid + mybatisplus完成多数据源配置相关推荐

  1. springboot+druid+mybatis-Plus 配置详解

    网上找了很多关于springboot+druid+mybatis-Plus的配置,遇见的很多问题 也没找到好的解决方案.折腾了好几天终于自己配置通过了. springboot的pom文件 1 < ...

  2. 基于springboot和mybatis的多数据源配置

    基于springboot和mybatis的多数据源配置 1.首先新建一个springboot项目,项目结构如下: 引入mybatis和mysql依赖: <dependency><gr ...

  3. 基于SpringBoot、MyBatis-plus实现双数据源定时同步

    1.项目目录结构 2.双数据源配置 在Application上添加注解,不自动加载默认数据源 @SpringBootApplication(exclude = {DataSourceAutoConfi ...

  4. springboot+druid+mybatis+mysql+多数据源

    一.项目依赖 pom.xml中添加atomikos的springboot相关依赖: <!--分布式事务--><dependency><groupId>org.spr ...

  5. SpringBoot重点详解--dbcp2数据源配置

    目录 DBCP2详细的配置表 常用链接配置 数据源连接数量配置 事务属性配置 数据源连接健康状况检查 缓存语句 连接泄露回收 DBCP2详细的配置表 常用链接配置 参数 描述 username 传递给 ...

  6. SpringBoot+自定义注解实现多数据源配置

  7. mysql druid 多数据源_SpringBoot使用阿里数据库连接池Druid以及多数据源配置

    SpringBoot使用阿里数据库连接池Druid以及多数据源配置 引入依赖 com.alibaba druid 1.0.29 数据源配置 1.数据源 #master数据源 spring.dataso ...

  8. springboot+mybatis多数据源配置

    目录 1.前言 2.多数据源配置 2.1  AbstractRoutingDataSource 2.2.首先maven依赖 2.3 数据源配置 2.4 mybatis配置 2.5 设置数据源的路由ke ...

  9. springboot+mybatis实现动态切换数据源

    目前有个需求,需要使用不同的数据源,例如某业务要用A数据源,另一个业务要用B数据源. 如何在spring框架中解决多数据源的问题 使用springboot 整合多数据源 遇到的坑 1.添加依赖 < ...

最新文章

  1. python窗口显示图片imread() imshow()_Python-OpenCV学习之imread,imshow
  2. 影响网站各个页面权重高低的因素有哪些?
  3. 哪些模块可用于python性能分析_提升Python程序性能的方法有哪些?看完你就知道啦!...
  4. mysql可以存储标点么_MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》...
  5. yarn timeline1,timeline2官网解释
  6. struts2遍历select
  7. TIOBE 11月编程语言排行榜: Haskell 要进前20了?
  8. 汇编程序:成绩分段统计
  9. ubuntu 15.10 升级 到Ubuntu 16.04.3 LTS
  10. 用Java实现修改头像
  11. 笔记 GWAS 操作流程2-1:缺失质控
  12. 小白操作Win10扩充C盘(把D盘内存分给C盘)亲测多次有效
  13. 写给4年前开始编程序的自己
  14. 中职计算机应用专业核心素养的,基于职业发展的中职学生核心素养的研究与培养...
  15. 【论文写作】——懒人怎么进行论文排版?文献引用怎么引?图表题注怎么加?怎么一键更新全文?如何添加目录、图录、表录?
  16. 爱思国际获戈壁创投数百万美元Pre-A 轮融资,意做菲律宾的分众传媒...
  17. ROS深度图转化为点云
  18. C++ 什么是继承和派生
  19. thinking in uml 大象 用例
  20. Android 项目必备(四十二)-->Android 多窗口模式

热门文章

  1. python分割压缩_Python读取分割压缩TXT文本文件实例
  2. linux ip地址本地缓存,ip-address – 如何解析组织的IP地址(使用缓存)
  3. node如何输出html页面,【自己的整理】node.js直接输出一个非常简单的HTML页面-Go语言中文社区...
  4. 数据库设计_SQL数据库设计(数据建模)
  5. 多输出模型实例的数据加载
  6. 基于深度学习的农作物病害检测
  7. css背景图毛玻璃,css实现背景图片的毛玻璃效果
  8. 对GCN,Transformer, XLNet, ALBERT, CRF等技术仍然一知半解?再不学习就OUT了!
  9. 计算机主机红灯不闪硬盘工作,电脑主机红灯一直闪正常吗
  10. 删除oracle补丁包,最新Oracle关键补丁:更新包括248个修复