当前位置: 首页>后端>正文

springboot集成mybatis

本篇讲解下springboot集成mybatis的操作流程,springboot版本为2.7.0

1、工程结构

我们先创建一个maven工程(或springboot工程),并创建好必要的包目录和资源目录,工程结构如下:

spingboot-mybatis
--src
----main
      java
        com.xk.mybatis.springboot (包路径)
        --controller (控制器层的包名)
        --entity   (实体层的包名)
        --mapper   (mapper接口层的包名)
        --service  (服务层的包名)
        --App.java  (启动类)
      resources
        mapper  (存放xml映射文件的资源目录)
        application.yml (系统启动所需的配置文件)
----test
--pom.xml

实际工程截图如下所示:

springboot集成mybatis,第1张

2、工程配置

本节用到一张简单的数据表,在cloud数据库下面创建订单表,如下:

CREATE TABLE `t_order` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

对应的实体类Order如下:

package com.xk.mybatis.springboot.entity;


/**
 * @author xk
 * @since 2023.04.24 14:18
 */
public class Order {
   
    private Long id;

    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

2.1、引入mybatis-spring-boot-starter依赖

mybatis官方给出了如下的版本依赖表:

MyBatis-Spring-Boot-Starter Spring Boot MyBatis-Spring Java
3.0 3.0 3.0 17 或更高
2.3.x 2.5 - 2.7 2.1 8 或更高
2.2.x 2.5 - 2.7 2.0(2.0.6 以上可开启所有特性) 8 或更高
2.1.x 2.1 - 2.4 2.0(2.0.6 以上可开启所有特性) 8 或更高

由于我们的应用是先选择springboot版本,然后再基于springboot开发,因此,我们选择启动器对应的版本时,就结合自己使用的springboot的版本,来选择对应的starter版本。

在pom文件添加mybatis-spring-boot-starter启动器,该启动器会帮我们自动导入mybatis-spring-boot-autoconfigure.jar、mybatis.jar和mybatis-spring.jar这三个包,导入的启动器依赖具体内容如下:

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

由于我们要通过mybatis查询mysql数据库,所以我们还要引入mysql的jdbc驱动包

     <!--数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

2.1、编写xml映射文件

(1)首先,每一个xml映射文件都对应一个mapper接口文件,将xml文件中定义的select、insert、update和delete的元素的id值都当做方法名,然后在mapper接口创建相应同名的接口方法。

(2)在resources资源目录的mapper目录下创建OrderMapper.xml文件,写一个根据id查询订单的方法,其中namespace的值为该xml映射文件对应的mapper接口的全路径,内容如下:

<?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.xk.mybatis.springboot.mapper.OrderMapper">

    <select id="findById" parameterType="Long" resultType="com.xk.mybatis.springboot.entity.Order">
        select * from t_order where id=#{id};
    </select>

</mapper>

2.2、编写mapper接口

2.1节我们定义了映射文件的namespace的值为com.xk.mybatis.springboot.mapper.OrderMapper,并且里面只定义了一个id为findById的查询语句,所以我们就在src下面的mapper包创建OrderMapper接口文件,接口里面定义findById方法,内容如下:

package com.xk.mybatis.springboot.mapper;

import com.xk.mybatis.springboot.entity.Order;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author xk
 * @since 2023.04.24 14:21
 */
@Mapper
public interface OrderMapper {
    /**
     * 根据id获取订单
     * @param id
     * @return
     */
    Order findById(Long id);
}

2.3、配置application.yml文件

application.yml里面主要配置数据源信息和mybatis的个性化配置,内容如下:

server:
  port: 8080
  servlet:
    context-path: /mybatis


spring:
  application:
    name: springboot-mybatis
  # 配置数据源
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/cloud?useUnicode=true&characterEncoding=utf-8
    username: root
    password: zdan

#mybatis配置信息
mybatis:
  # xml映射文件所在的路径,一般用模糊匹配来指定最终的xml文件
  mapper-locations: classpath:/mapper/*.xml
  configuration:
    #采用驼峰形式将数据表中以‘_’分隔的字段映射到java类的某个属性,比如表字段user_name可以映射为类里面的userName属性
    map-underscore-to-camel-case: true

到此为止,mybatis的配置就结束了,mybatis-spring-boot-starter会为标记@Mapper接口的接口文件创建代理对象,并将代理对象放置到spring容器中,我们可以使用@Autowired或@Resource等注解,将其注入到其他bean对象中。

完整的pom文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.7.0</version>
    </parent>

    <artifactId>springboot-mybatis</artifactId>
    <groupId>com.xk</groupId>
    <version>1.0</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

        <!--mybatis启动器-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

    </dependencies>

</project>

下面我们来验证下我们的配置是否正确。

3、验证配置结果

3.1、创建service类

创建OrderService类,在类上标记@Service注解,并注入OrderMapper接口对应的bean对象

package com.xk.mybatis.springboot.service;

import com.xk.mybatis.springboot.entity.Order;
import com.xk.mybatis.springboot.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author xk
 * @since 2023.04.24 14:26
 */
@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    /**
     * 根据订单id获取订单
     * @param id
     * @return
     */
    public Order findById(Long id){
        return orderMapper.findById(id);
    }
}

3.2、创建controller类

创建OrderController控制器,对应暴露http接口,方便我们通过浏览器发送查询请求,内容如下:

package com.xk.mybatis.springboot.controller;

import com.xk.mybatis.springboot.entity.Order;
import com.xk.mybatis.springboot.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author xk
 * @since 2023.04.24 14:25
 */
@RequestMapping("/order")
@RestController
public class OrderController {

    @Autowired
    private OrderService orderService;

    @GetMapping("{id}")
    public Order findById(@PathVariable Long id){
        return orderService.findById(id);
    }
}

3.3、验证接口

目前我们的t_order数据表有如下数据


springboot集成mybatis,第2张
t_order表

浏览器访问http://localhost:8080/mybatis/order/1,查询订单id为1的订单数据,结果如下:

springboot集成mybatis,第3张
访问结果

说明我们的mybatis配置成功。

结束语


https://www.xamrdz.com/backend/3d81929011.html

相关文章: