Spring Boot整合MyBatis
引入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讲解就到这里了,欢迎大家阅读,我们下期再见!