文章目录
一、前言
最近见许多公司使用Mybatis-plus都说好用,就试一试结果是yyds,以下是我搭建框架以及流程步骤,为方便理解框架,注释基本都加上了。对于mybatis-plus的理解,后期会写一份单独的文章,目前有需要的小伙伴可以找度娘,看看别人写的
二、框架搭建步骤
本人使用开发工具IDEA+JDK8,创建简单的maven工程即可
1.pom.xml
数据库连接池用的是德鲁伊,最近看到网上说HikariCP连接池速度超过druid缺点是缺乏实践,下次可以使用试试,对于pom文件中的内容建议大家看一下,对于以后项目搭建有点用,免得出现导入一大堆jar包,出现jar包冲突。
代码如下:
<?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.guoke.cn</groupId>
<!--项目名称-->
<artifactId>GUOKE</artifactId>
<!--版本-->
<version>1.0-SNAPSHOT</version>
<!--项目名称(随意写)-->
<name>过客商城项目</name>
<!--项目介绍-->
<description>个人开发pc端项目</description>
<!--(继承)StringBoot父级依赖,只有继承它项目才是StringBoot项目,
string-boot-stater-parent它用来提供相关的Maven默认依赖,
使用它以后常用的包以来可以省去version标签,使用默认jar的版本
父依赖启动器的主要作用是进行版本统一管理-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!--string-boot-starter-web依赖启动器的主要作用是提供web开发场景所需的底层依赖
正因如此,在pom.xml中引入spring-boot-starter-web依赖启动器时,就可以实现web场景开发,
而不需要额外导入Tomcat服务器以及其他web依赖文件等,当然这些引入依赖文件的版本号
还是由string-boot-stater-parent父依赖进行统一管理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql-cinnector-java是mysql的jdbc驱动包,用JDBC连接MySQL数据库时必须使用该jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok能以简单的注解形式来简化java代码,提高开发效率-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mybatis-plus是mybatis的升级版,使用起来更加简洁,用于数据库操作-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<!--springboot单元测试jar-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--Druid数据库连接池组件-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
<!--spring-boot-maven-plugin插件是将String Boot的应用程序打包成jar包的插件,
将所有应用启动运行所需的jar包都包含进来,从逻辑上具备了独立运行的条件,当运行mvn-package进行打包后,
直接使用java-jar的命令就可以直接运行-->
<build>
<finalName>guoke</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.application.yml
对于配置文件中的内容也加入了一些注释方便理解,对于初学者可以尝试写的同时多想想为什么这么写。
代码如下(示例):
server:
port: 8090
spring:
thymeleaf:
prefix:
classpath: /templates
cache: false
profilse:
include: replysentence
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/jiaoyou_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
username: root
# 1.配置生成的password
password: root
# Druid数据源配置
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
testWhileIdle: true
#配置从连接池获取连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
testOnBorrow: false
#配置向连接池归还连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
testOnReturn: false
#打开PsCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
#合并多个DruidDatasource的监控数据
useGlobalDataSourceStat: true
#通过connectProperties属性来打开mergesql功能罗慢sQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500;
log:
root: debug
mybatis-plus:
# 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
# 如果是放在resource目录 classpath:/mapper/*Mapper.xml
mapper-locations: classpath:/mapper/*Mapper.xml
configuration:
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2.pojo(放在bo中)层,Student.java
这个对象与数据库表中的字段一一对应,查询数据用的
代码如下(示例):
package com.guoke.cn.pojo.bo;
import lombok.Data;
/**
* 测试CRUD表对应的实体类
* @author hjd
*/
@Data
public class Student {
private Integer id;
private String name;
private String age;
}
切记:类名与数据库表名需要完全一致,遵循驼峰命名,好奇的小伙伴可以试试别的名称,yml中打印了生成的sql语句,你可以去看看表名
3.mapper(dao)层StudentMapper.java
这一步是mybatis-plus的灵魂所在,关键点。
代码如下(示例):
package com.guoke.cn.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.guoke.cn.pojo.bo.Student;
/**
* 测试CRUD
* @author hjd
*/
public interface StudentMapper extends BaseMapper<Student> {
}
没错就是这样,不用加别的,因为BaseMapper已经为你封装好了,这就是mybatis-plus的强大,
BaseMapper<这里方的类名也就是你要查询的表名>
4.controller层CrudController.java
写好项目访问路径,注入mapper就好了
代码如下(示例):
package com.guoke.cn.controller;
import com.guoke.cn.mapper.StudentMapper;
import com.guoke.cn.pojo.bo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试mybatis-plusCRUD的使用方法
* @author hjd
*/
@RestController
@RequestMapping("/crud")
public class CrudController {
@Autowired
public StudentMapper studentMapper;
/**
* 根据主键id查询student表
* 查询id为1的用户信息
* @return
*/
@RequestMapping("/findById")
Student findAllUser() {
Student student = studentMapper.selectById(1);
return student;
}
}
selectById()方法就是mybatis-plus提供的根据主键id查询的方法,有小伙伴会问,他在吗知道你要查询那一张表,看看mapper层BaseMapper<这里方的类名也就是你要查询的表名>所以之前说要一一对应
别的方法可以去看看源码,源码也有注释的。
之列举了一个新增。别的一样看看源码中的方法就好,学得浅的小伙伴可以百度mybatis-plus的方法
5.启动类GuokeApplication.java
下面配置启动类就好了。
代码如下(示例):
package com.guoke.cn;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 测试mybatis-plusCRUD
* @author hjd
*/
@SpringBootApplication
@MapperScan("com.guoke.cn.mapper") //mapper文件的路径,springboot项目启动时会自动扫描这个包
public class GuokeApplication {
public static void main(String[] args) {
SpringApplication.run(GuokeApplication.class, args);
}
}
到这里项目就算完了,一个简单的crud,至于为什么没有service和xml写的sql,这就是mybatis-plus的强大,service你只需要专心写逻辑就好。
7.数据库表student.sql
数据库表给各位了
代码如下(示例):
DROP TABLE IF EXISTS `student`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `student` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `student`
--
LOCK TABLES `student` WRITE;
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
INSERT INTO `student` VALUES (1,'张三',18),(2,'李四',7),(3,'王二',16),(4,'麻子',99),(5,'坤坤',108);
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
UNLOCK TABLES;
总结
附上项目结构图片:
最后:对于复杂的sql,mybatis-plus也有对应的处理方式,后期也会专门写一篇文章,如果有问题欢迎各位提出来!!!!!