springboot与mybatisPlus整合

整合之前说一下mybatisPlus的特征,也是官网原文:官网

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

框架结构:
在这里插入图片描述
整合项目结构图:
在这里插入图片描述
下面直接上代码:

1,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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>springboot_mybatisplus_demo</groupId>
    <artifactId>mybatisplus_demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatisplus_demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.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-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--引入swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>

        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>

        <!-- 使用数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>
        <!-- Druid 依赖 log4j包 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!-- mybatis分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.12</version>
        </dependency>

        <!-- mybatisplus集成,引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差异导致的问题。 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.1.2</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2,UserController.java

package springboot.mybatisplus.demo.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import springboot.mybatisplus.demo.model.User;
import springboot.mybatisplus.demo.services.UserService;

import java.util.Date;
import java.util.List;

/**
 * @desc:
 * @author: hwm
 * @date: 2019/7/24 18:23
 */
@Api(description = "用户操作")
@Controller
@RequestMapping("/user")
public class UserController {

    /**
     * MyBatis-Plus官网地址
     * https://mp.baomidou.com
     */

    @Autowired
    private UserService userService;

    @ApiOperation("自定义查询")
    @GetMapping("/getUserListLikeName")
    @ResponseBody
    public List<User> getUserListLikeName(int num, int size, String nickname) {

        PageHelper.startPage(num, size);
        return userService.getUserListLikeName(nickname);
    }

    @ApiOperation("分页查询条件")
    @GetMapping("/getPageParam")
    @ResponseBody
    public List<User> getPageParam(int num, int size, String nickname) {

        PageHelper.startPage(num, size);
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.like("nickname", nickname);
        List<User> list = userService.list(queryWrapper);
        return list;
    }

    @ApiOperation("分页查询")
    @GetMapping("/getPage")
    @ResponseBody
    public List<User> getPage(int num, int size) {

        PageHelper.startPage(num, size);
        List<User> list = userService.list();
        return list;
    }

    @ApiOperation("按照id查询")
    @GetMapping("/getUserById")
    @ResponseBody
    public User getUserById(Integer userId) {

        User user = userService.getById(userId);
        return user;
    }

    @ApiOperation("保存信息(检测事务是否生效)")
    @GetMapping("/addUser2")
    @ResponseBody
    @Transactional
    public User addUser2(String nickname, String userToken) {
        User user = new User();
        user.setNickname(nickname);
        user.setUserToken(userToken);
        user.setCreateTime(new Date());
        user.setValid(1);
        userService.save(user);

        int i = 3 / 0;

        return user;
    }

    @ApiOperation("保存信息")
    @GetMapping("/addUser")
    @ResponseBody
    public User addUser(String nickname, String userToken) {
        User user = new User();
        user.setNickname(nickname);
        user.setUserToken(userToken);
        user.setCreateTime(new Date());
        user.setValid(1);
        userService.save(user);

        return user;
    }
}

3,UserService.java

package springboot.mybatisplus.demo.services;


import com.baomidou.mybatisplus.extension.service.IService;
import springboot.mybatisplus.demo.model.User;

import java.util.List;

/**
 * @desc:
 * @author: hwm
 * @date: 2019/7/24 18:19
 */
public interface UserService extends IService<User> {

    List<User> getUserListLikeName(String nickName);

}

4,UserServiceImpl.java

package springboot.mybatisplus.demo.services.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import springboot.mybatisplus.demo.mappers.UserMapper;
import springboot.mybatisplus.demo.model.User;
import springboot.mybatisplus.demo.services.UserService;

import java.util.List;

/**
 * @desc:
 * @author: hwm
 * @date: 2019/7/24 18:21
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getUserListLikeName(String nickName) {

        return userMapper.getUserListLikeName(nickName);
    }
}

5,UserMapper.java

package springboot.mybatisplus.demo.mappers;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import springboot.mybatisplus.demo.model.User;

import java.util.List;

/**
 * @desc:
 * @author: hwm
 * @date: 2019/7/24 18:18
 */
public interface UserMapper extends BaseMapper<User> {
    List<User> getUserListLikeName(String nickName);
}

6,UserMapper.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="springboot.mybatisplus.demo.mappers.UserMapper">

    <select id="getUserListLikeName" resultType="springboot.mybatisplus.demo.model.User">
        SELECT user_id,nickname,user_token,create_time,valid
         FROM `user`
         WHERE nickname LIKE concat('%', nickName, '%')
    </select>

</mapper>

7,User.java

package springboot.mybatisplus.demo.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
@TableName("user")
public class User implements Serializable {

    @TableId(type = IdType.AUTO)
    private Integer userId;

    private String nickname;

    private String userToken;

    private Date createTime;

    private Integer valid;

}

8,MybatisplusDemoApplication.java

package springboot.mybatisplus;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("springboot.mybatisplus.demo.mappers") // 扫码mapper包
public class MybatisplusDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisplusDemoApplication.class, args);
    }
}

9,application.properties 配置文件:


#运行端口
server.port=8080

#日志配置
log.level=debug
log.out.path=C:\\www\\logs\\mybatisplus_demo

#数据库连接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.2.200:3306/springboot_mybatisplus_demo?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456

#阿里druid连接池驱动配置信息
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#连接池的配置信息
#初始化大小,最小,最大
spring.datasource.initialSize=2
spring.datasource.minIdle=2
spring.datasource.maxActive=3
#配置获取连接等待超时的时间
spring.datasource.maxWait=6000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
#是否自动回收超时连接
spring.dataSource.removeAbandoned=true
#超时时间(以秒数为单位)
spring.dataSource.removeAbandonedTimeout=180
#是否在自动回收超时连接的时候打印连接的超时错误
spring.dataSource.logAbandoned=true
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
#打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
#配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
#通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#druid登陆账号密码
spring.datasource.login.name=admin
spring.datasource.login.pass=123456

#mybatisplus配置
mybatis-plus.mapper-locations=classpath*:mappers/*Mapper.xml
mybatis-plus.typeAliasesPackage=springboot.mybatisplus.demo.model

#mapper文件目录
#mybatis.mapper-locations=classpath*:mappers/*Mapper.xml
##新增数据后自动获取数据库自增主键, 需要使用 keyProperty 指定主键
#mybatis.configuration.use-generated-keys=true
##开启自动驼峰命名转换
#mybatis.configuration.map-underscore-to-camel-case=true

#pagehelper分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.params=count=countSql

#时间戳统一转换
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
# 此配置会返回时间戳
#spring.jackson.serialization.write-dates-as-timestamps=true

#swagger配置
swagger.base.package=springboot.mybatisplus.demo.controller
#swagger映射目录
swagger.path.mapping=/
#是否激活 swagger true or false
swagger.is.enable=true

10,logback-spring.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <!-- 加载日志环境相关配置 -->
    <springProperty scope="context" name="logLevel" source="log.level" />
    <springProperty scope="context" name="logOutPath" source="log.out.path" />

    <!-- 日志输出格式:%d表示日期,%X{requestId}表示mdcid,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
    <property name="logPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{requestId}] [%thread] %-5level %logger{50} - %msg%n"/>

    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${logPattern}</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件(输出到文件) -->
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${logOutPath}/info.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${logPattern}</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>

        <!-- 日志文件只输出INFO以上级别日志,控制台按照配置logLevel级别输出 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${logLevel}</level>
        </filter>
    </appender>

    <!-- 配置定时任务启动时找不到默认的定时任务报错而使用info级别(不影响使用) -->
    <logger name="org.springframework.scheduling">
        <level value="info" />
    </logger>

    <!--myibatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>

    <!-- 日志输出级别 -->
    <root level="${logLevel}">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

11,MySwagger2Config.java

package springboot.mybatisplus.demo.swagger;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.List;

@Configuration
@EnableSwagger2 // 开启swagger
public class MySwagger2Config extends WebMvcConfigurerAdapter {

    @Value("${swagger.is.enable:true}")
    private boolean swagger_is_enable;
    @Value("${swagger.base.package}")
    private String swaggerBasePackage;
    @Value("${swagger.path.mapping:/}")
    private String swaggerPathMapping;

    @Bean
    public Docket createRestApi() {

        return new Docket(DocumentationType.SWAGGER_2)
                // swagger 状态:true 启动, false 禁用
                .enable(swagger_is_enable)
                .apiInfo(apiInfo()).select()
                //扫描指定包中的swagger注解
                .apis(RequestHandlerSelectors.basePackage(swaggerBasePackage))
                .paths(PathSelectors.any())
                .build()
                .pathMapping(swaggerPathMapping)
                .globalOperationParameters(buildHeaderParam());
    }

    /**
     * 设置在swagger里面的公共参数,如果有需要重写此方法
     * 设置公共的参数。
     * 如:设置在请求头里面的token,userId等
     *
     * @return
     */
    protected List<Parameter> buildHeaderParam() {

        // demo:设置在请求头里面公共参数token

        /*List<Parameter> pars = new ArrayList<>();
        ParameterBuilder tokenPar = new ParameterBuilder();
        tokenPar.name("token").description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
        pars.add(tokenPar.build());*/

        return null;
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("基础平台 RESTful APIs")
                .description("基础平台 RESTful 风格的接口文档,内容详细,极大的减少了前后端的沟通成本,同时确保代码与文档保持高度一致,极大的减少维护文档的时间。")
                .version("1.0.0")
                .build();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

    }
}

12,DruidDBConfig.java

package springboot.mybatisplus.demo.druid;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
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;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;
import java.sql.SQLException;

@Configuration
public class DruidDBConfig {

    private static final Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);

    private static final String DB_PREFIX = "spring.datasource";

    @Value("${spring.datasource.login.name}")
    private String spring_datasource_login_name;
    @Value("${spring.datasource.login.pass}")
    private String spring_datasource_login_pass;

    @Bean
    public ServletRegistrationBean druidServlet() {
        logger.info("init Druid Servlet Configuration ");
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        // IP白名单
        servletRegistrationBean.addInitParameter("allow", "");
        // IP黑名单(共同存在时,deny优先于allow)
        servletRegistrationBean.addInitParameter("deny", "");
        //控制台管理用户
        servletRegistrationBean.addInitParameter("loginUsername", spring_datasource_login_name);
        servletRegistrationBean.addInitParameter("loginPassword", spring_datasource_login_pass);
        //是否能够重置数据 禁用HTML页面上的“Reset All”功能
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }

    // 解决 spring.datasource.filters=stat,wall,log4j 无法正常注册进去
    @ConfigurationProperties(prefix = DB_PREFIX)
    @Data
    class IDataSourceProperties {
        private String url;
        private String username;
        private String password;
        private String driverClassName;
        private int initialSize;
        private int minIdle;
        private int maxActive;
        private boolean removeAbandoned;
        private int removeAbandonedTimeout;
        private boolean logAbandoned;
        private int maxWait;
        private int timeBetweenEvictionRunsMillis;
        private int minEvictableIdleTimeMillis;
        private String validationQuery;
        private boolean testWhileIdle;
        private boolean testOnBorrow;
        private boolean testOnReturn;
        private boolean poolPreparedStatements;
        private int maxPoolPreparedStatementPerConnectionSize;
        private String filters;
        private String connectionProperties;

        @Bean     //声明其为Bean实例
        @Primary  //在同样的DataSource中,首先使用被标注的DataSource
        public DataSource dataSource() {
            DruidDataSource datasource = new DruidDataSource();
            datasource.setUrl(url);
            datasource.setUsername(username);
            datasource.setPassword(password);
            datasource.setDriverClassName(driverClassName);

            //configuration
            datasource.setInitialSize(initialSize);
            datasource.setMinIdle(minIdle);
            datasource.setMaxActive(maxActive);
            datasource.setRemoveAbandoned(removeAbandoned);
            datasource.setRemoveAbandonedTimeout(removeAbandonedTimeout);
            datasource.setLogAbandoned(logAbandoned);
            datasource.setMaxWait(maxWait);
            datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
            datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
            datasource.setValidationQuery(validationQuery);
            datasource.setTestWhileIdle(testWhileIdle);
            datasource.setTestOnBorrow(testOnBorrow);
            datasource.setTestOnReturn(testOnReturn);
            datasource.setPoolPreparedStatements(poolPreparedStatements);
            datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
            try {
                datasource.setFilters(filters);
            } catch (SQLException e) {
                System.err.println("druid configuration initialization filter: " + e);
            }
            datasource.setConnectionProperties(connectionProperties);
            return datasource;
        }
    }

}


最后在上一下demo sql脚本:

CREATE TABLE `user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `nickname` varchar(126) DEFAULT NULL COMMENT '昵称',
  `user_token` varchar(250) DEFAULT NULL COMMENT '用户token(token记录方式更改,不在系统保存字段弃用)',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `valid` int(2) DEFAULT '1' COMMENT '有效标志:0无效,1有效',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4;

/*Data for the table `user` */

insert  into `user`(`user_id`,`nickname`,`user_token`,`create_time`,`valid`) values (1,'丹','5D3BFC0A-29bcc00ac8ff483cbcf19315e0d90e6b-0f9f4098c0c3b74bd90408f45848bbe7','2019-03-25 16:21:16',1),(2,'hwm','5D4D7F9D-45ec908c7c49427b9b3a69b9694c0b7c-15e16ae002d9d9f9141973a8e8e797ef','2019-07-01 15:47:01',1),(3,NULL,'40471561661e5c76c0a395f73ae5d057','2019-03-25 16:34:35',1),(4,'林慧珊','8b821fa9dfad781e3b106f58ccbbe126','2019-03-26 17:50:00',1),(5,'Memory Limit Exceeded','2eea1f234b220876efce13a062db95de','2019-03-28 10:50:00',1),(6,'~Suarez~','48a31f2d0723cdc7d6b7c6ec8fa5059b','2019-03-30 01:47:07',1),(7,'乘着叶片飞舞的蜗牛','35f83f7f08ff0d490155e875248a88ae','2019-03-30 03:10:45',1),(8,'一苇渡杭','c87adb9bc95321990e2026454e8a7419','2019-03-31 08:30:36',1),(9,'木树','c8da8aa6251b831b7531b8e4be62ff15','2019-04-01 20:12:27',1),(10,'Lignorance','5D478488-634051dca4d84e5883b69ae51793d233-bef7f23a46dc8c51db4f8f586a12052b','2019-04-01 20:48:00',1),(11,'credapple','2048efcf71d34181db119bb986eb8e50','2019-04-01 23:30:06',1),(12,'。陳燁','0da651a735cdfa5afcea3a8c9973b7bb','2019-04-03 07:54:20',1),(13,'张淑书','db3ae339df25f6342be68c8d9a40294c','2019-04-03 09:40:35',1),(14,'zch','212e6da760631364812574e6af40fc2f','2019-04-05 20:53:55',1),(15,'佪の࿐ོ忔','1374fe7b3161f672f64cd70412cdec8b','2019-04-05 23:56:54',1),(16,'HBin','e5b2d64877491a6f649403b47b71d54f','2019-04-06 20:39:51',1),(17,'浩','644b550f59e5a5700a28a09e8a780266','2019-04-07 00:41:54',1),(18,'KCº·º生活+态度','e72644bf76ccbf9f30d492596d2e65ce','2019-04-07 03:02:06',1),(19,NULL,'2aa91587233bbebcb2b94e824b5d2ea9','2019-04-08 10:01:49',1),(20,'成茹','715e3515db8f077e197de95047623d9e','2019-04-08 13:19:49',1),(21,'测试测试','测试测试','2019-07-25 15:00:34',1),(22,'测试测试2','测试测试2','2019-07-25 15:00:55',1),(23,'测试测试3','测试测试3','2019-07-25 15:01:26',1);

最终整合效果:
在这里插入图片描述

在这里整个整合就已经完成了,可以成功跑起来项目,也可以直接在
https://gitee.com/hwm0717/springboot_mybatisplus_demo
下载整个项目运行
如果需要面试题目复习可以扫码微信小程序二维码:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值