SpringBoot + MyBatis的demo
项目gitee地址:https://gitee.com/MiddleZqz/springboot_mybatisplus_demo
1.创建一个新的Springboot项目
2.准备配置
导入pom.xml
<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>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</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</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
<!-- 生成代码模板工具 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.9.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.14</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>
<!--打印sql语句执行时间-->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
建立Mysql数据库(localhost建立个demo数据库然后创建user表)
/*
Navicat MySQL Data Transfer
Source Server : localhost
Source Server Version : 50718
Source Host : localhost:3306
Source Database : demo
Target Server Type : MYSQL
Target Server Version : 50718
File Encoding : 65001
Date: 2022-04-06 11:12:58
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`userId` int(22) NOT NULL AUTO_INCREMENT COMMENT '用户表主键id',
`userName` varchar(255) NOT NULL COMMENT '用户名',
`userPwd` varchar(255) NOT NULL COMMENT '用户密码',
`sex` varchar(255) DEFAULT NULL COMMENT '性别',
`phone` varchar(255) DEFAULT NULL COMMENT '电话',
PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '张三', '123456', '男', '11111111111');
INSERT INTO `user` VALUES ('2', '李四', 'aaaaaa', '男', '11111111111');
3.配置文件信息
application.properties
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/demo?zeroDateTimeBehavior=convertToNull&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
#数据源
server.servlet.context-path=/hotSot
spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
#spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#spring.datasource.druid.initial-size=5
#spring.datasource.druid.min-idle=10
#spring.datasource.druid.max-active=20
## 配置获取连接等待超时的时间(单位:毫秒)
#spring.datasource.druid.max-wait=60000
#mybatis-plus配置
mybatis-plus.mapper-locations=classpath:mapper/xml/*.xml
mybatis-plus.configuration.map-underscore-to-camel-case=false
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
server.port=4090
logging.config=classpath:logback.xml
logging.file.name=hotSotlogging.log
logging.file.path=/home/urunadmin/zjx/peizhi/log
#log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<!--控制台输出内容的颜色转换以及格式-->
<substitutionProperty name="logging.pattern.console"
value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<!--日志文件输出内容的格式-->
<substitutionProperty name="logging.pattern.file"
value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--控制台使用layout节点-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
${logging.pattern.console}
</pattern>
</layout>
</appender>
<!--按天生成日志-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<!--滚动策略,我配置了按天生成日志文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--相对路径,生成的文件就在项目根目录下-->
<FileNamePattern>
logs/%d{yyyy-MM}/%d{yyyy-MM-dd}.log
</FileNamePattern>
<!--注意超过365天的日志文件会被删除,即使已经按天分开也会删除-->
<MaxHistory>365</MaxHistory>
</rollingPolicy>
<!--日志文件里只保存ERROR及以上级别的日志-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<!--文件使用encoder节点-->
<encoder>
<Pattern>
${logging.pattern.file}
</Pattern>
</encoder>
</appender>
<!--这个logger里的配置相当于之前yml里的logging.level.com.lpc: trace-->
<!--additivity的作用-->
<!--true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
<!--而这个logger里没配置appender,所以得交给root打印-->
<!--所以com.lpc包里的日志从TRACE级别开始-->
<!--其他包里的日志根据root的配置从INFO级别开始打印-->
<logger name="com.lpc" level="TRACE" additivity="true"></logger>
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>
spy.properties
#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2
4.创建实体类(bean)
建立一个User.java
@Data
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer userId;
private String userName;
private String userPwd;
private String sex;
private Integer phone;
}
建立一个Result类(用来返回数据)
@Data
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("返回对象")
/**
* JsonJsonInclude.Include.NON_NULL这个最常用,
* 即如果加该注解的字段为null,那么就不序列化这个字段了
* 意思就是说为null的时候就不会把实体类序列化为json字段
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Result implements Serializable {
@ApiModelProperty("状态码")
private String code;
@ApiModelProperty("返回消息")
private String message;
@ApiModelProperty("返回对象")
private Object data;
}
5.创建UserMapper
继承BaseMapper接口
@Mapper
public interface UserMapper extends BaseMapper<User> {
List<User> search();
}
6.建立对应的UserMapper.xml
在resources的mapper/xml包下创建对应的xml文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ejuke02j-1650770494349)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220406105050137.png)]
<?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.zqz.smp.springboot_mybatis_plus.mapper.UserMapper">
<select id="search" resultType="com.zqz.smp.springboot_mybatis_plus.bean.User">
select * from user;
</select>
</mapper>
通过编写对用的sql语句来完成所需功能
7.创建Userservice类
@Service
public class UserService {
@Autowired
UserMapper userMapper;
public List<User> search(){
return userMapper.search();
}
}
8.编写UserController
@RestController
@RequestMapping("/User")
public class UserController {
@Autowired
UserService userService;
@GetMapping("/Search")
public Result Search(){
Result result = new Result();
List<User> search = userService.search();
if (search.isEmpty()){
return new Result("404","没有该关键字的数据",null);
}else {
result.setMessage("搜索成功");
result.setCode("200");
result.setData(search);
}
return result;
}
}
所有的包
9.postman测试接口
项目源码
gitee:https://gitee.com/MiddleZqz/springboot_mybatisplus_demo
``