【SpringBoot项目部署到Docker】二、Springboot+Mybatis+Druid 搭建简单项目

写在前面

这一篇讲讲 Springboot+Mybatis+Druid 搭建简单项目。

如果有谈及上一篇的内容,你可以先去看我的上一篇文章
【SpringBoot项目部署到Docker】一、搭建Ubuntu Docker环境

Springboot!简化简化再简化!

springboot是为了简化开发配置,提升快速开发效率而生的,所以我也就尽量遵循这个原则去搭建项目。
springboot也为开发者提供了初始化项目工具网站,Idea里新建项目时也默认集成了springboot Initializr 功能,过程大同小异
springboot Initializr

填好项目属性,然后加上spring web 依赖
项目属性

添加web依赖

很快就创建好了最简单的springboot web项目。
打开pom文件可以看到已经添加了spring-boot-starter-web依赖,里面包含了spring,spring mvc,tomcat集成等等内容。


            org.springframework.boot
            spring-boot-starter-web

此时,不用去配置什么繁琐的
web.xml
spring-serlet.xml
applicationContext.xml
只需要在application.properties配置基础内容就可以进行使用了(甚至不配也可以,会按默认配置启动)
比如下面的~~~

#application.properties
#指定web启动监听端口,默认是8080
server.port=8082
#数据源配置
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#spring.datasource.url=jdbc:mysql://localhost:3306/xxx
#spring.datasource.username=root
#spring.datasource.password=password
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
另外,springboot默认扫描启动类(带这个注解的类@SpringBootApplication)
包名下和同级包名的类,所以,这是大部分开发者推荐的包结构

com
    +- example
    +- myproject
    +- Application.java (启动类)
    |
    +- domain
    |  +- Customer.java
    |  +- CustomerRepository.java
    |
    +- service
    |  +- CustomerService.java
    |
    +- web
    |  +- CustomerController.java
    |


当然啦,你也可以不遵循springboot的默认扫描方式,但是就得去启动类里手动添加组件扫描注解了@ComponentScan

关于Mybatis、Druid

其实我真的不太喜欢mybatis,一直都觉得这种xml配置sql的方式真的太反人类了,但是国内环境就是这样,欸,面试他还就那个考你mybatis,我也不敢不用不敢不去熟悉(卑微)。
所以,我就在springboot上了解了一下如果快速用mybatis开发,其实mybatis也专门为整合springboot做了依赖包叫做

mybatis-spring-boot-starter

嗯,官方文档推荐使用注解写入sql进行快速开发,开发是快速了,以后维护可就龟速了。注解写入sql带来的问题还是很多的,那么还是得找到一个辅助工具,就是mybatis-plus,这样的辅助工具还有很多比如tk.mybatis,选择是我遵循简单快速原则做出的选择。

Druid是阿里巴巴开发的数据连接池,说实话我对这块的知识量也只是停留在数据库连接管理,减少建立数据库连接的消耗上,因为它们都是即写即用,以后得补补这块知识了。选Druid除了它的性能不比其他流行连接池差以外,它还带监控服务,很想玩玩哈哈哈,同样Druid也有springboot整合版本,叫

druid-spring-boot-starter
补充资料:Druid手册

首先pom里添加以下依赖

    
    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        2.1.1
    
    
        mysql
        mysql-connector-java
     
    
    
        com.alibaba
        druid-spring-boot-starter
        1.1.21
    
    
    
        com.baomidou
        mybatis-plus-boot-starter
        3.3.1.tmp
    
    

接下来会发生一件很可怕的事,就是配置文件很长,而且以后可能会越来越长,所以可以尝试换成yml配置,springboot默认支持这种格式的配置文件,我项目暂时就不换先了,记得有yml就好

配置Mybatis 和 Druid

因为都用上了springboot版本的依赖,那么就只需要根据官方给的配置文档写入application.properties就好了。
下面是一份简单的配置:
打开了Druid监控和统计功能,监听8082端口,连接本地的数据库float,指定数据源

server.port=8082
# mybatis 配置,暂时用不到
#mybatis.config-location=classpath:mybatis-config.xml
# 设置数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/float
spring.datasource.username=root
spring.datasource.password=pw
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# druid 连接池补充
# 初始化大小,最小,最大
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
# 配置获取连接等待超时的时间
spring.datasource.druid.max-wait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙, log4j2用于输出sql日志
spring.datasource.druid.filters=stat,wall
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true

# WebStatFilter配置
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
spring.datasource.druid.web-stat-filter.session-stat-enable=false
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
spring.datasource.druid.web-stat-filter.principal-session-name=xxx.user
spring.datasource.druid.web-stat-filter.principal-cookie-name=xxx.user
spring.datasource.druid.web-stat-filter.profile-enable=true

#StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=false
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=123
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
spring.datasource.druid.stat-view-servlet.deny=192.168.16.111

然后我们写几个基本的文件,再建个数据库表user(id,name,age)

-- 表设计
CREATE TABLE `user` (
  `ID` varchar(32) NOT NULL COMMENT '用户id',
  `NAME` varchar(255) NOT NULL COMMENT '昵称',
  `AGE` int(11) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';

-- 创建一条数据
INSERT INTO `user`(`ID`, `NAME`, `AGE`) VALUES ('1', '张三', 18);

写几个简单的业务文件,先看看写完后的项目结构
(不能忘记刚刚上面说的项目结构的问题):

项目结构

用户实体UserEntitiy

package com.roy.demo.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;

// 注解别忘了,不然会默认根据实体名以驼峰转下划线来转化
@TableName("user")
public class UserEntity implements Serializable {
    // 注解别忘了
    @TableId("id")
    private String Id;

    private String name;

    private Integer age;

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

UserMapper接口

package com.roy.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.roy.demo.entity.UserEntity;
import org.apache.ibatis.annotations.Mapper;

//如果没有在application.Java启动类中定义MapperScan扫描的话,就要写这个注解
//继承mybatis-plus的BaseMapper<实体>,基本的查询都不用再重写了!
@Mapper
public interface UserMapper extends BaseMapper {
}

简单的UserController

package com.roy.demo.controller;

import com.roy.demo.entity.UserEntity;
import com.roy.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

// 没什么好说的,很常规的Controller
@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @GetMapping("getById")
    public UserEntity getUserById(@RequestParam String id) {
        UserEntity user = userMapper.selectById(id);
        return user == null ? null : user;
    }
}

SpringBoot 启动!

万事俱备就可以启动了,监听8082端口,我们在浏览器上访问
http://127.0.0.1:8082/user/getById?id=1
就可以获取到我们的user信息了。
user

Druid后台监控

Druid的后台配置已经在applicaiton配置里写了我们访问项目本地地址,然后后面加上/druid就可以访问了
http://127.0.0.1:8082/druid/
输入配置文件中的账号密码,然后就可以看到统计信息和SQL记录了

druid

可以看到刚刚访问userController查询的用户SQL

最后

总体看来步骤还是很简单吧,其实中间也花了很多时间研究Druid,因为druid-springboot的文档还不是很全,也折磨了我几天了。
还有新的日志框架log4j2,启动完以后肯定不能少了关键日志输出,springboot默认使用common-loggin,嗯但是,好像真的不太好用,但是本篇就不讲日志先,留着下篇讲吧。

劳动节到了,休息休息,研究一下下个阶段的东西,
下一篇文章主要讲:日志框架log4j2 + Springboot后台Docker部署
希望早点有空写吧。节日快乐~

你可能感兴趣的:(springboot,druid,mybatis,mybatis-plus,docker)