springboot(三):数据库的配置(druid和mybatis)
这里我们采用druid的数据库连接池和mybatis进行数据库的操作。druid的配置Druid号称Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能。git官方地址:https://github.com/alibaba/druid1.首先是在pom.xml里面引入需要的依赖包(mybatis,驱动包,druid包)<!-- 引入 mybatis starter-->&
这里我们采用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的整个的使用过程。
创建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;
}
}
创建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}
就是简单通过账号查询出一条表记录。
创建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。
创建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后台管理教程。
欢迎关注本人公众号和小程序,谢谢
更多推荐
所有评论(0)