springboot(三):数据库的配置(druid和mybatis)

这里我们采用druid的数据库连接池和mybatis进行数据库的操作。

druid的配置

Druid号称Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能。
git官方地址:https://github.com/alibaba/druid

1.首先是在pom.xml里面引入需要的依赖包(mybatis,驱动包,druid包)

 <!-- 引入 mybatis starter-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <!-- MySQL的JDBC驱动包	-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <!-- 引入第三方数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.22</version>
        </dependency>

2.在application.properties进行配置

#可以自动识别
#spring.datasource.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/demo?autoReconnect=true&serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username =root
spring.datasource.password =123456
#如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource

#初始化时建立物理连接的个数
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.stat-view-servlet.login-username=admin
#配置监控页面访问密码
spring.datasource.druid.stat-view-servlet.login-password=123456
#是否开启慢sql查询监控
spring.datasource.druid.filter.stat.log-slow-sql=true
#慢SQL执行时间
spring.datasource.druid.filter.stat.slow-sql-millis=1
#配置监控统计拦截的filters,去掉后监控界面SQL无法进行统计,’wall’用于防火墙
spring.datasource.druid.filters=config,stat,wall,slf4j


#####druid监控配置
## WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
#是否启用StatFilter默认值true
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,*.png,*.css,*.ico,/druid/*
#session统计功能
spring.datasource.druid.web-stat-filter.session-stat-enable=true
#最大session数
spring.datasource.druid.web-stat-filter.session-stat-max-count=100000
#置profileEnable能够监控单个url调用的sql列表。
spring.datasource.druid.web-stat-filter.profile-enable=true

## StatViewServlet配置,说明请参考Druid Wiki,配置_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=true
#你可以配置principalSessionName,使得druid能够知道当前的session的用户是谁
spring.datasource.druid.web-stat-filter.principal-session-name=admin
#你可以配置principalSessionName,使得druid能够知道当前的cookie的用户是谁
spring.datasource.druid.web-stat-filter.principal-cookie-name=admin
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
spring.datasource.druid.stat-view-servlet.deny=

## Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
spring.datasource.druid.aop-patterns= org.lsh.dubhe.service.*

#配置wall filter
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=mysql
spring.datasource.druid.filter.wall.config.alter-table-allow=false
spring.datasource.druid.filter.wall.config.truncate-allow=false
spring.datasource.druid.filter.wall.config.drop-table-allow=false
#是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽DDL。
spring.datasource.druid.filter.wall.config.none-base-statement-allow=false
#检查UPDATE语句是否无where条件,这是有风险的,但不是SQL注入类型的风险
spring.datasource.druid.filter.wall.config.update-where-none-check=true
#SELECT ... INTO OUTFILE 是否允许,这个是mysql注入攻击的常见手段,缺省是禁止的
spring.datasource.druid.filter.wall.config.select-into-outfile-allow=false
#是否允许调用Connection.getMetadata方法,这个方法调用会暴露数据库的表信息
spring.datasource.druid.filter.wall.config.metadata-allow=true
#对被认为是攻击的SQL进行LOG.error输出
spring.datasource.druid.filter.wall.log-violation=true
#对被认为是攻击的SQL抛出SQLExcepton
spring.datasource.druid.filter.wall.throw-exception=true

备注:数据库demo.sql已经放在git上面了,大家可以自行安装。
这样配置完成之后,运行项目,就可以通过
http://localhost:8080/druid/login.html
进行监控页面访问
在这里插入图片描述
其中的账号和密码通过以下配置文件的方式进行设置。

#配置监控页面访问登录名称
spring.datasource.druid.stat-view-servlet.login-username=admin
#配置监控页面访问密码
spring.datasource.druid.stat-view-servlet.login-password=123456

能正常访问就算druid配置成功了,具体druid能监控数据库的哪些东西,大家伙就自个研究了。

mybatis配置和使用

首先pom.xml引入依赖包,上面配置druid的时候已经有写进去了,这边就不展示了。
这里我准备通过对demo数据库用户信息的请求读取,来描述mybatis的整个的使用过程。

  1. 创建实体类

创建model包,在里面建一个用户的实体类TAdminUser.java。字段都跟相应的用户表字段相对应。

TAdminUser.java

package com.admin.zhou.model;
import java.util.Date;
public class TAdminUser {

    /**
     * id
     */
    private Long id;

    /**
     * 状态
     */
    private int state;


    /**
     * 名字
     */
    private String name;


    /**
     * 头像
     */
    private String head_img_url;

    /**
     * 手机号
     */
    private String mobile;

    /**
     * 加盐
     */
    private String salt;

    /**
     * 账号
     */
    private String account;

    private String password;


    /**
     * 创建时间
     */
    private Date ctime;

    /**
     * 0未删除 1.已删除
     */
    private Integer deleted;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    public String getName() {
        return name;
    }

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

    public String getHead_img_url() {
        return head_img_url;
    }

    public void setHead_img_url(String head_img_url) {
        this.head_img_url = head_img_url;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Date getCtime() {
        return ctime;
    }

    public void setCtime(Date ctime) {
        this.ctime = ctime;
    }

    public Integer getDeleted() {
        return deleted;
    }

    public void setDeleted(Integer deleted) {
        this.deleted = deleted;
    }
}

  1. 创建mapper层

创建mapper包,在里面建一个用户的mapper操作接口类。

TAdminUserMapper.java

package com.admin.zhou.mapper;

import com.admin.zhou.model.TAdminUser;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;


/**
 * @author: zhou
 * @Date: 2019/12/7
 * Describe: 管理用户表mapper
 */
@Mapper
@Repository
public interface TAdminUserMapper {

    @Select("select * from t_admin_user where account=#{account}")
    TAdminUser getAdminUserByAcount(String account);
}

因为我们是通过注解方式进行映射,所以@Mapper和@Repository不能少。
select * from t_admin_user where account=#{account}就是简单通过账号查询出一条表记录。

  1. 创建service层

创建service包,先建一个TAdminUserService.java的接口类

package com.admin.zhou.service;

import com.admin.zhou.model.TAdminUser;

/**
 * @author: zhou
 * @Date: 2019/2/7
 * Describe: 用户业务接口类
 * @return
 */
public interface TAdminUserService {

    //获取用户
    TAdminUser getAdminUserByAcount(String account);

}

在service里面建impl的包名,这里主要存放接口的实现类。如TAdminUserService的接口实现类。

TAdminUserServiceImpl.java

package com.admin.zhou.service.impl;

import com.admin.zhou.mapper.TAdminUserMapper;
import com.admin.zhou.model.TAdminUser;
import com.admin.zhou.service.TAdminUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
public class TAdminUserServiceImpl implements TAdminUserService {

    @Autowired
    private TAdminUserMapper tAdminUserMapper;


    @Override
    public TAdminUser getAdminUserByAcount(String account) {
        return tAdminUserMapper.getAdminUserByAcount(account);
    }
}

这里通过@Autowired注入了TAdminUserMapper。

  1. 创建controller层

创建controller包,因为是用户管理的操作,所以我在controller单独建一个admin的文件夹存放AdminerController的操作类。

AdminerController.java

package com.admin.zhou.controller.admin;

import com.admin.zhou.model.TAdminUser;
import com.admin.zhou.service.TAdminUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class AdminerController {

    @Autowired
    private TAdminUserService tAdminUserService;



    @GetMapping("/getAccount")
    public String getAccount(String account) throws Exception {


        TAdminUser user = tAdminUserService.getAdminUserByAcount(account);
        
        if (user == null){
            return "用户不存在";
        }
        return "用户昵称: "+user.getName();
        
    }
}

这样,所以的方法就写好了,运行项目。

访问http://localhost:8080/api/getAccount?account=admin123
结果:
在这里插入图片描述
访问http://localhost:8080/api/getAccount
在这里插入图片描述
大功告成。

源码地址:https://gitee.com/stonezry/Springboot-Admin-Demo.git

备注:该demo项目主要是用来配合vue后台管理教程写的。如果对vue感兴趣的话也可以看看我写的vue后台管理教程。

欢迎关注本人公众号和小程序,谢谢
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/stonezry/article/details/106058781