SpringBoot中使用MyBatis
MyBatis作为ORM框架,对JDBC操作数据库的流程进行了封装,让开发者更加注重SQL本身,极大的提高了开发中对数据库数据读取和写入的效率。
1. 添加MyBatis依赖信息
在SpringBoot中使用MyBatis还是比较简单的,首先需要在IDEA中创建一个SpringBoot项目,在选择起步依赖内容时可以选择引入MyBatis依赖信息:选择SQL -> MyBatis Framework:
如果项目已经创建完成或是在旧项目中使用MyBatis可以手动添加maven坐标信息:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
由于MyBatis连接数据库是基于jdbc的方式进行整合,SpringBoot配置数据源时需要jdbc连接驱动的类型,因此需要在maven中 引入jdbc共和mysql的依赖信息。
<!--jdbc依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2. 准备MySQL数据库信息
MyBatis作为持久层框架,是项目中用来与数据库交互的,因此需要提供数据库信息,可以使用本地安装的MySQL服务或者连接远程服务器的MySQL服务。
登录MySQL服务后,创建一个测试数据库用于MyBatis连接操作:
create database test ;
在测试数据库中创建MyBatis测试使用的数据表:
CREATE TABLE `mybatis_test` (
`id` int(32) NOT NULL comment "id" AUTO_INCREMENT,
`name` varchar(32) NOT NULL comment "名称",
`phone` varchar(50) NOT NULL comment "手机",
`email` varchar(32) DEFAULT NULL comment "邮箱",
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
为了测试查询时更为直观,数据表创建后插入一条数据:
insert into test(id, name, phone, email) values(1,tom,17778568765,123456@qq.com);
3. 配置MyBatis连接数据库
准备好数据库和相关数据后,在SpringBoot项目中的application.properties配置文件中配置数据库连接信息:
# 配置项目数据源信息
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 设置mybatis寻找对应.xml文件的位置
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.type-aliases-package=com.mybatis.entity
# 设置mapper文件层执行sql时日志输出级别
logging.level.com.example.mybatis.mapper=debug
4. 构建三层架构
4.1 数据表映射实体类:
Java中需要创建实体类来映射MySQL的数据表信息:
@Data
public class MybatisTest {
/**
* id
*/
private Integer id;
/**
* 名称
*/
private String name;
/**
* 手机
*/
private String phone;
/**
* 邮箱
*/
private String email;
}
其中@Data注解使用了lombok来快速实现Java类的getter()/setter()/toString()方法的生成,使用时引入lombok依赖信息即可。
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
</dependency>
4.2 创建Controller层
controller层主要用来对外提供接口请求的,其中提供了一个数据查询接口和数据保存接口:
@RestController
public class MybatisTestController {
@Autowired
private MybatisTestService mybatisTestService;
@RequestMapping("/getMybatisInfo/{id}")
public String getMybatisInfo(@PathVariable int id){
return mybatisTestService.queryById(id).toString();
}
@RequestMapping("/saveMybatisInfo")
public void saveMybatisInfo(@RequestBody MybatisTest mybatisTest){
mybatisTestService.insert(mybatisTest);
}
}
4.3 创建Service层
service层分为service接口和serviceImp实现,在实现类中,调用了Mapper文件来完成业务逻辑。
@Service
public class MybatisTestServiceImpl implements MybatisTestService {
@Autowired
private MybatisTestMapper mybatisTestMapper;
@Override
public MybatisTest queryById(int id) {
return mybatisTestMapper.queryById(id);
}
@Override
public int insert(MybatisTest mybatisTest) {
return mybatisTestMapper.insert(mybatisTest);
}
}
4.4 创建Mapper文件
Mapper文件是Mybatis中引入用来解决Dao层代码臃肿的文件,只需要在Mapper接口文件中定义抽象的数据库操作方法,并使用注解或者XML文件来实现即可。
1.使用注解配置简单的SQL
对于比较简单的SQL语句,可以直接在Mapper中使用注解完成定义:
@Mapper
public interface MybatisTestMapper {
@Select("select * from mybatis_test where id = #{id}")
MybatisTest queryById(int id);
@Insert("insert into mybatis_test(name, phone, email) values(#{name}, #{phone}, #{email})")
int insert(MybatisTest mybatisTest);
}
2.创建xml文件并写入SQL
对于比较复杂的表连接、或者动态SQL语句等可以使用Mapper..xml文件来完成定义使用.xml文件定义SQL语句时需要注意:
- *.xml文件应当创建在/resource路径下的文件夹中,并且需要在配置文件中指定位置
# 设置mybatis寻找对应文件的位置 mybatis.mapper-locations=classpath:mapping/*Mapper.xml mybatis.type-aliases-package=com.mybatis.entity
- 构建*.xml文件时需要在命名空间中指定该文件对应的Mapper文件
<mapper namespace="com.example.mybatis.mapper.MybatisTestMapper"> ... </mapper>
- *.xml文件中定义SQL语句的标签id应当和Mapper定义的抽象方法名称一致
5. 运行项目测试效果
所有业务逻辑开发完成后,执行当前项目,项目运行后打开浏览器,请求controller层提供的接口地址。
5.1 查询数据
当前数据库中拥有的数据信息:
查询数据接口中使用了参数id,可以直接拼接在url之后进行请求,查询数据库中id=1的记录:http://localhost:8080/getMybatisInfo/1
请求成功后浏览器得到数据的字符串结果如下:
Mapper文件日志输出为:
结果表面查询请求成功。
5.2 保存数据
由于保存数据是POST提交方式进行请求,浏览器连接无法模拟,因此使用Postman工具来请求save方法。 请求时,选择POST方式并在请求体Body中携带提交的参数信息:
点击请求后,数据提交保存至数据库中,可以看到此时数据库增加了一条数据信息:
并且在项目的控制台可以看到输出的Mapper文件日志信息:
保存功能也是没问题的,SpringBoot中已经成功接入MyBatis框架,可以通过MyBatis完成相关的数据库操作。
转载自:https://juejin.cn/post/7027473332454834207