SpringBoot笔记:集成MyBatis

SpringBoot中使用MyBatis与MVC中本质是一样的,只是某些配置可以直接使用注解完成,使编码更加便捷了。

1. pom依赖

集成MyBatis通常需要MyBatis、Spring、数据库驱动三个依赖,但是由于MyBatis有一个整合的专门适配SpringBoot的依赖mybatis-spring-boot-starter,所以只需要配置两个依赖即可,并且由于SpringBoot自动集成了MySQL的数据库驱动,如果使用的是MySQL数据库,配置pom依赖的时候也可以不用配置数据库驱动,当然,一般我们会使用自己的MySQL驱动版本,所以可以修改父工程的默认驱动版本,或者配置依赖的时候指定对应的版本。

<properties>
    <java.version>17</java.version>
    <!-- 修改父工程管理的依赖版本号 -->
    <!-- <mysql.version>8.0.26</mysql.version> -->
</properties>
<dependencies>
    <!-- MySQL驱动依赖 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <!-- 可以单独指定版本,也可以在properties节点中修改父工程使用的版本 -->
        <version>8.0.26</version>
    </dependency>

    <!-- mybatis整合spring的起步依赖(不用再分开导入mybatis和spring了) -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.2</version>
    </dependency>
</dependencies>

2. 数据库连接配置

在application.properties核心配置文件中配置数据库连接信息:

# 连接数据库的配置信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

3. Mapper.xml配置文件

这个配置文件与Mapper.java接口对应,用于配置Mapper.java接口中方法对应的SQL。Mapper.xml文件的配置有两种,一种是xml文件就放在src/main/java包,编译时由于maven约定不会扫描java包下的非java文件,所以就需要在pom.xml中进行配置:

<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.xml</include>
        </includes>
    </resource>
</resources>

另一种方式就是直接在application.properties核心配置文件中配置Mapper.xml文件的路径:

# 指定MyBatis映射文件路径,此时所有的xxxMapper.xml就必须放在指定的这个路径下了,
# 使用了这个配置项之后,就不用在pom中指定resource配置了
mybatis.mapper-locations=classpath:mapper/*.xml

4. MyBatis使用

想要使用MyBatis,通常需要用到xxxMapper.java接口、xxxMapper.xml配置文件、实体类,然后使用xxxMapper.java接口获取数据库数据。以下示例中一些接口、实体类等代码就不给出了,只展示完整流程中的基础代码。

controller定义

package com.yun.demo.controller;

import com.yun.demo.model.Student;
import com.yun.demo.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class StudentController {
    @Autowired
    private StudentService studentService;

    @RequestMapping(value = "/student")
    @ResponseBody
    public Object queryStudentById(Integer id) {
        Student student = studentService.queryStudentById(id);
        return student;
    }
}

Service类定义

定义service接口和实现类(接口就不给出示例了,只给出实现类),由于在controller中使用了 @Autowired 进行自动装配,所以这里需要使用注解 @Service 将service实现类加入到Spring容器中:

package com.yun.demo.service.impl;

import com.yun.demo.mapper.StudentMapper;
import com.yun.demo.model.Student;
import com.yun.demo.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentMapper studentMapper;

    @Override
    public Student queryStudentById(Integer id) {
        return studentMapper.selectByPrimaryKey(id);
    }
}

Mapper.java接口定义

注意到service实现类中的Mapper接口也使用了 @Autowired 进行自动装配,那就意味着需要将Mapper接口也需要加入到Spring容器中,这里有两种方式可以将Mapper接口加入到Spring容器中:一种是在每个Mapper接口上使用 @Mapper 注解,另一种是在启动程序的Application类上使用注解 @MapperScan 将mapper接口的路径一次性配置好,这种方式会自动扫描指定路径下的所有Mapper接口并添加到Spring容器中。

方式一:使用注解@Mapper

package com.yun.demo.mapper;

import com.yun.demo.model.Student;
import org.apache.ibatis.annotations.Mapper;

// @Mapper注解会自动将接口到Spring容器中
@Mapper
public interface StudentMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(Student row);

    int insertSelective(Student row);

    Student selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Student row);

    int updateByPrimaryKey(Student row);
}

方式二:在启动类中通过注解@MapperScan指定需要扫面的包路径

package com.yun.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
// 自动扫描指定包及其子包下面的所有Mapper到容器中,使用了这个注解后就不用在每个Mapper接口上单独添加@Mapper注解了
@MapperScan(basePackages = "com.yun.demo.mapper")
public class Demo005MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(Demo005MybatisApplication.class, args);
    }

}
posted @ 2022-11-02 21:11  山上下了雪-bky  阅读(111)  评论(0编辑  收藏  举报