likes
comments
collection
share

SpringBoot中使用MyBatis

作者站长头像
站长
· 阅读数 19

MyBatis作为ORM框架,对JDBC操作数据库的流程进行了封装,让开发者更加注重SQL本身,极大的提高了开发中对数据库数据读取和写入的效率。

1. 添加MyBatis依赖信息

在SpringBoot中使用MyBatis还是比较简单的,首先需要在IDEA中创建一个SpringBoot项目,在选择起步依赖内容时可以选择引入MyBatis依赖信息:选择SQL -> MyBatis Framework:

SpringBoot中使用MyBatis

如果项目已经创建完成或是在旧项目中使用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定义的抽象方法名称一致 SpringBoot中使用MyBatis SpringBoot中使用MyBatis

5. 运行项目测试效果

所有业务逻辑开发完成后,执行当前项目,项目运行后打开浏览器,请求controller层提供的接口地址。

5.1 查询数据

当前数据库中拥有的数据信息:

SpringBoot中使用MyBatis

查询数据接口中使用了参数id,可以直接拼接在url之后进行请求,查询数据库中id=1的记录:http://localhost:8080/getMybatisInfo/1

请求成功后浏览器得到数据的字符串结果如下:

SpringBoot中使用MyBatis

Mapper文件日志输出为:

SpringBoot中使用MyBatis

结果表面查询请求成功。

5.2 保存数据

由于保存数据是POST提交方式进行请求,浏览器连接无法模拟,因此使用Postman工具来请求save方法。 请求时,选择POST方式并在请求体Body中携带提交的参数信息:

SpringBoot中使用MyBatis

点击请求后,数据提交保存至数据库中,可以看到此时数据库增加了一条数据信息:

SpringBoot中使用MyBatis

并且在项目的控制台可以看到输出的Mapper文件日志信息:

SpringBoot中使用MyBatis

保存功能也是没问题的,SpringBoot中已经成功接入MyBatis框架,可以通过MyBatis完成相关的数据库操作。