三、Spring Boot之旅

引入MySQL数据库驱动

我们接着上一期的项目整合MyBatis,在项目中加入数据库连接驱动(这里我使用的是5.7版本的MySQL数据库)

<!-- 加入MySQL驱动 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.48</version>
</dependency>

引入Druid数据源

Druid是一个关系型数据库连接池,是阿里巴巴推出的开源项目,可访问地址:https://github.com/alibaba/druid 查看项目源码。优秀的Druid不但为我们提供连接池的功能,还提供了监控的功能,可以实时查看数据库连接池和SQL查询的工作情况,比如:sql语句执行时间等情况。

加入Druid依赖

<!-- 加入Druid连接池 -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.1.21</version>
</dependency>

配置Druid数据源

由于Springboot 2.0选择HikariCP作为默认数据库连接池,为了使用Druid连接池,需要在application.properties下配置:

##### 数据库配置,记得修改账号名 和 密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
######### 指定数据源的类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#####连接池配置
spring.datasource.druid.filters= stat
spring.datasource.druid.initial-size=10
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=8
#####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
#你可以配置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
#置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
####需要账号密码才能访问控制台
spring.datasource.druid.stat-view-servlet.login-username=user
spring.datasource.druid.stat-view-servlet.login-password=password
###IP白名单
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
####IP黑名单(共同存在时,deny优先于allow)
#spring.datasource.druid.stat-view-servlet.deny=192.168.10.1
## 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

这样我们就配置好了Druid跟MySQL数据库的连接,接下来启动项目访问http://localhost:8080/druid,输入设置的用户名和密码就可以查看到Druid的监控后台
在这里插入图片描述

MyBatis的使用

首先在MySQL数据库中创建一张学生表:

create table student(sno varchar(8) not null,sname varchar(22) not null,ssex char(2) not null);

insert into person values('0001','美美','0');
insert into person values('0002','兰兰','0');
insert into person values('0003','哆啦A梦','1');

然后引入MyBatis依赖:

<!-- MyBatis 依赖 -->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.1.2</version>
</dependency>

接着在项目中创建对应的实体类:

public class Student implements Serializable{
	
	/**
	 * @Fields serialVersionUID :TODO
	 */
	private static final long serialVersionUID = 1L;

	private String sno;
	private String name;
	private String sex;
	public String getSno() {
		return sno;
	}
	public void setSno(String sno) {
		this.sno = sno;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Student(String sno, String name, String sex) {
		super();
		this.sno = sno;
		this.name = name;
		this.sex = sex;
	}
}

然后创建一个对应的Mapper接口

public interface StudentMapper {
	public int add(Student student);
    public int update(Student student);
    public int deleteBySno(String sno);
    public Student queryStudentBySno(String sno);
}

这里为了方便我就以注解的形式编写了:

@Component
@Mapper
public interface StudentMapper {
	@Insert("insert into student(sno,sname,ssex) values(#{sno},#{name},#{sex})")
	public int add(Student student);
	
	@Update("update student set sname=#{name},ssex=#{sex} where sno=#{sno}")
    public int update(Student student);
	
	@Delete("delete from student where sno=#{sno}")
    public int deleteBySno(String sno);

	@Select("select * from student where sno=#{sno}")
    public Student queryStudentBySno(@Param("sno") String sno);
}

测试Mybatis

这里测试我们先创建Service层:

public interface StudentService {
	public int add(Student student);
	public int update(Student student);
	public int deleteBySno(String sno);
	Student queryStudentBySno(String sno);
}

接下来创建Service的实现类:

@Service("studentService")
public class StudentServiceImpl implements StudentService {

	@Autowired
	private StudentMapper studentMapper;
	
	@Override
	public int add(Student student) {
		// TODO Auto-generated method stub
		return studentMapper.add(student);
	}

	@Override
	public int update(Student student) {
		// TODO Auto-generated method stub
		return studentMapper.update(student);
	}

	@Override
	public int deleteBySno(String sno) {
		// TODO Auto-generated method stub
		return studentMapper.deleteBySno(sno);
	}

	@Override
	public Student queryStudentBySno(String sno) {
		// TODO Auto-generated method stub
		return studentMapper.queryStudentBySno(sno);
	}

}

继续编写Controller层:

@RestController
public class TestController {

    @Autowired
    private StudentService studentService;
    
    @RequestMapping("/findStudent")
    public Student queryStudentBySno(String sno) {
    	Student findStudent = studentService.queryStudentBySno(sno);
        return findStudent;
    }
}

完整的工程目录如下图所示:
在这里插入图片描述
最后我们启动项目,在浏览器上输入http://localhost:8080/findStudent?sno=0001,可以看到根据学生号查询出来的学生信息。
在这里插入图片描述
同时我们在输入http://localhost:8080/druid,输入配置文件中配置使用druid连接池的用户名和密码登录到监控后台查看sql语句的执行情况:
在这里插入图片描述
好了本期的Spring Boot讲解就到这里了,欢迎大家阅读,我们下期再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值