[随写笔记]spring boot整合myBatis连接MySql数据库
在生成spring boot时需要勾选myBatis,如未勾选则需要在pom.xml导入
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
需要导入mySql的驱动包,本例使用的是mySql8.0.21版本
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
在项目java项目新增一个dao包,在resources下新增一个mybatis文件夹
层级如下
- java
- com
- dao
- Application.java
- com
- resources
- mybatis
打开 application.properties 进行配置数据库
使用的连接池为spring boot默认的 HikariDataSource
# 连接池,使用spring boot默认数据源
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# mySql配置
# 驱动名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# mySql8 解决时差问题 serverTimezone=GMT%2B8
# 注:GMT%2B8是解决时差问题,北京时间与格林威治时间相差8个小时
# jdbc:mysql://ip:port/数据库名称?characterEncoding=utf-8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.url=jdbc:mysql://localhost:3306/xygg?characterEncoding=utf-8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
# 用户名、密码
spring.datasource.username=xygg
spring.datasource.password=123456
# 连接池配置
# 池中最大连接数,包括闲置和使用中的连接
spring.datasource.hikari.maximum-pool-size=10
# 池中维护的最小空闲连接数
spring.datasource.hikari.minimum-idle=5
# 等待来自池的连接的最大毫秒数
spring.datasource.hikari.connection-timeout=30000
# 连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置
spring.datasource.hikari.pool-name=myDataSourcePool
# 连接创建后执行的语句,作用于连接测试
spring.datasource.hikari.connection-init-sql=select sysdate() from dual
配置myBatis映射的xml和包路径
包路径为上面创建的dao包路径
映射xml路径为上面创建的mybatis,‘*’号是模糊匹配,统一xml文件名格式(接口名称+Mapper.xml)
# myBatis 配置
# 映射包路径
mybatis.type-aliases-package=com.dao
# 映射xml路径
mybatis.mapper-locations=mybatis/*Mapper.xml
在com.dao包下新增一个接口类
新增一个方法,用于获取mysql数据库中的user表
@Mapper:将mybatis交给spring管理
@Repository:其实使用@Mapper就可以了,增加这个注解只是用来在自动装箱时不出现警告信息
package com.dao;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository // 注入到Bean
@Mapper // 交给spring管理
public interface TestDao {
List<Map<String,Object>> getUsers();
}
在resources/mybatis目录新增一个空白xml文件,命名为testDaoMapper.xml
在testDaoMapper.xml里增加xml头声明
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
增加mapper标签,该标签的namespace属性指定dao接口类
<mapper namespace="com.dao.TestDao">
</mapper>
在mapper标签下新增子标签 select ,id属性为dao接口方法名,resultType为方法返回值类型
特别注意别把resultType和resultMap弄混
在select标签里写sql查询语句
<select id="getUsers" resultType="java.util.Map">
select * from user_ordinary
</select>
完整xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.TestDao">
<select id="getUsers" resultType="java.util.Map">
select * from user_ordinary
</select>
</mapper>
编写一个测试类进行测试
package com;
import com.dao.TestDao;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
import java.util.Map;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SqlApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class SqlApplicationTests {
@Autowired
TestDao testDao;
@Test
void contextLoads() {
List<Map<String, Object>> users = testDao.getUsers();
System.out.println(users);
}
}
[{user_sex=0, user_create_date=2020-08-06 11:21:43.0, user_id=1, user_name=晓宇哥哥, user_age=0, user_pwd=123, user_update_date=2020-08-06 11:21:43.0, user_acc=xygg}]
返回成功