整合之前说一下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
下载整个项目运行
如果需要面试题目复习可以扫码微信小程序二维码: