用户云卷云舒 发表于 2024-9-18 21:58:59

十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)

十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)

@
目录

[*]十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)
[*]1. Spring Boot 配置 MyBatis 的详细步骤
[*]2. 末了:

MyBatis 的官方文档:https://mybatis.p2hp.com/
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036496-1741276713.png
关于 MyBatis 的学习的详细内容,各人可以移步至:✏️✏️✏️ MyBatis_ChinaRainbowSea的博客-CSDN博客 。
1. Spring Boot 配置 MyBatis 的详细步骤


[*]首先,我们创建相干测试的数据库,数据表。如下:
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222035999-1626878244.png
CREATE DATABASE `springboot_mybatis`
USE `springboot_mybatis`

CREATE TABLE `monster` (
`id` int not null auto_increment,
`age` int not null,
`birthday` DATE DEFAULT NULL,
`email` VARCHAR(255) DEFAULT NULL,
`gender` CHAR(1) DEFAULT null,
`name` VARCHAR(255) DEFAULT NULL,
`salary` DOUBLE not NULL,
PRIMARY KEY(`id`)
)

SELECT * from monster



INSERT INTO`monster` (`id`,`age` ,`birthday`,`email`,`gender`,`name`,`salary`)
VALUES (1,20,'2000-10-10','nmw@sohu.com','男','牛魔王',9000.99)
INSERT INTO`monster` (`id`,`age` ,`birthday`,`email`,`gender`,`name`,`salary`)
VALUES (2,10,'2000-12-12','bgj@sohu.com','女','白骨精',9999.99)
[*]导入相干的 jar 依靠。这里我们利用Druid 数据库毗连池,同时我们还必要导入 mybatis.spring.boot 的。
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036044-548090171.png
      
      <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
      </dependency>引入 Druid 数据库的 jar 依靠。
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222035978-292523756.png
      <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.17</version>
      </dependency>所有的 pom.xml 文件当中的 jar 依靠
    4.0.0    com.rainbowsea    springboot_mybaits    1.0-SNAPSHOT                org.springframework.boot      spring-boot-starter-parent      2.5.3                                    org.springframework.boot            spring-boot-starter-web               
      <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
      </dependency>                  mysql            mysql-connector-java                            org.springframework.boot            spring-boot-configuration-processor                                    org.projectlombok            lombok                            org.springframework.boot            spring-boot-starter-test                <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.17</version>
      </dependency>   
[*]编写对应 数据表的在Java当中对应的 Bean 对象。
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036371-782455481.png
特别说明:
这里利用 @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") 注解。来设置数据表当中的时间赋值到该 Bean 对象上的时间属性的一个时间格式。

[*]pattern = "yyyy-MM-dd" 是设置时间显示的格式样式
[*]timezone = "GMT+8" 是设置时区差。这里我们中国是东半球,时差为 + 8 个小时。
必要注意的是:这个注解只对前端显示,有结果,后端,控制台显示无效。
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036063-2055611858.png

[*]将Spring Boot 默认的 HikariCP 数据库毗连池,切换为我们想要的 Druid 数据库毗连池。
这里我们通过配置类的方式,举行切换。
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036414-1345570590.png
package com.rainbowsea.springboot.mybatis.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DruidDataSourceConfig {


    @ConfigurationProperties(value = "spring.datasource")// 读取 类路径下的application.yaml
    // 的信息,并为下面的 对应的 setXX 进行赋值操作
    @Bean
    public DataSource dataSource() {
      DruidDataSource druidDataSource = new DruidDataSource();

      return druidDataSource;

    }

}在 resource 类路径下创建一个,名为 applicaiton.yaml 文件,配置编写,相干对于,Druid 数据库毗连池的信息。如下:
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036027-1379179275.png
server:
port: 9090# 注意:使用空格

spring:
datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: MySQL123
    url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036413-1693561379.png

[*]编写项目的场景启动器
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036033-1555686164.png
package com.rainbowsea.springboot.mybatis;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
      ConfigurableApplicationContext ioc = SpringApplication.run(Application.class, args);

    }

}
[*]运行测试,我们是否成功切换为了,我们想要的 Duird 数据毗连池,由于在 Spring Boot 当中测试的话,必须要编写好对应的项目启动器,不然,是无法测试的,会报错。
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036025-1387820158.png
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036498-1000378830.png
package com.rainbowsea.springboot.mybatis;


import com.rainbowsea.springboot.mybatis.bean.Monster;
import com.rainbowsea.springboot.mybatis.mapper.MonsterMapper;
import com.rainbowsea.springboot.mybatis.service.MonsterService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.annotation.Resource;

@SpringBootTest(classes = Application.class)// 与 main 不同的需要指明 测试的是哪个Class类
public class ApplicationTest {


    @Resource
    private JdbcTemplate jdbcTemplate;




    @Test
    public void t1() {
      // 输出看看当前的数据源是什么
      System.out.println(jdbcTemplate.getDataSource().getClass());

    }



}
[*]创建一个mapper/dao 的包,在该包下创建一个名为 MonsterMapper 的接口,通过署理类的方式,在该接口下,编写我们要执行业务的 SQL 语句的方法。
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036500-1097821808.png
package com.rainbowsea.springboot.mybatis.mapper;

import com.rainbowsea.springboot.mybatis.bean.Monster;
import org.apache.ibatis.annotations.Mapper;


/**
* 在Mapper接口使用 @Mapper 就会扫描,并将Mapper接口对象注入
*/
@Mapper // 包扫描,加上了这个注解的话,那么
public interface MonsterMapper {


    // 方法 根据id 返回 Monster 对象
    public Monster getMonsterById(Integer id);

}特别说明:
这里我们在该 接口类当中,利用了 @Mapper 注解。该注解的作用就是,让Spring Boot 加载的时候,会扫描这个类。从而找到这个类。如许我们就不必要额外的配置,包扫描了 。

[*]在相应的对应的包,下创建对应的包,创建对应 SQl 语句的xml 文件。如下
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036391-489608456.png
<?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.rainbowsea.springboot.mybatis.mapper.MonsterMapper">



   
    <select id="getMonsterById" resultType="com.rainbowsea.springboot.mybatis.bean.Monster">
         select * from monster where id = #{id}
    </select>

</mapper>同时必要在,application.yaml 文件当中配置,Mybatis 的包扫描路径:如下;
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036444-1835332288.png
mybatis:
# 指定要扫描的 Xxxmapper.xml
mapper-locations: classpath:mapper/*.xmlserver:
port: 9090# 注意:使用空格

spring:
datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: MySQL123
    url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8mybatis:
# 指定要扫描的 Xxxmapper.xml
mapper-locations: classpath:mapper/*.xml# 通过config-location 可以指定mybatis-config.xml 可以以传统的方式来配置mybatis#config-location:# 我们可以直接在 application.yaml 举行配置# 举例说明1,比如配置原来的 typeAliases# 还有很多配置,等我们用到再说#type-aliases-package: com.rainbowsea.springboot.mybatis.bean#configuration:#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl#    map-underscore-to-camel-case: true# 老师说明: 配置mybatis的两种方式的选择: 假如配置比较简朴,就直接在application.yaml配置# 如配置内部比较多,可以思量单独的做一个mybatis-config.xml运行测试:
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036049-1451439707.png
package com.rainbowsea.springboot.mybatis;


import com.rainbowsea.springboot.mybatis.bean.Monster;
import com.rainbowsea.springboot.mybatis.mapper.MonsterMapper;
import com.rainbowsea.springboot.mybatis.service.MonsterService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.annotation.Resource;

@SpringBootTest(classes = Application.class)// 与 main 不同的需要指明 测试的是哪个Class类
public class ApplicationTest {




    @Resource
    private MonsterMapper monsterMapper;





    @Test
    public void getMonsterById() {
      Monster monsterById = monsterMapper.getMonsterById(1);
      System.out.println(monsterById);

    }





}https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036037-1223952352.png

[*]编写对应的 Severl 业务处置惩罚
首先,编写其接口:
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036497-407301317.png
package com.rainbowsea.springboot.mybatis.service;

import com.rainbowsea.springboot.mybatis.bean.Monster;

public interface MonsterService {

    // 根据id 返回 Monster 对象
    public Monster getMonsterById(Integer id);
}在编写其接口的实现类,
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036098-1801307936.png
package com.rainbowsea.springboot.mybatis.service.impl;


import com.rainbowsea.springboot.mybatis.bean.Monster;
import com.rainbowsea.springboot.mybatis.mapper.MonsterMapper;
import com.rainbowsea.springboot.mybatis.service.MonsterService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;


@Service
public class MonsterServiceImpl implements MonsterService {


    // 装配MonsterMapper

    @Resource
    private MonsterMapper monsterMapper;


    @Override
    public Monster getMonsterById(Integer id) {


      return monsterMapper.getMonsterById(id);
    }
}运行测试:
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036019-654967004.png
package com.rainbowsea.springboot.mybatis;


import com.rainbowsea.springboot.mybatis.bean.Monster;
import com.rainbowsea.springboot.mybatis.mapper.MonsterMapper;
import com.rainbowsea.springboot.mybatis.service.MonsterService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.annotation.Resource;

@SpringBootTest(classes = Application.class)// 与 main 不同的需要指明 测试的是哪个Class类
public class ApplicationTest {


    // 装配到MonsterService
    @Resource
    private MonsterService monsterService;




    // 测试 MonsterService
    @Test
    public void getMonsterById2() {

      Monster monster = monsterService.getMonsterById(2);
      System.out.println(monster);

    }



}https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036495-1227098091.png

[*]编写对应的 Controller 控制器,在前端处置惩罚显示。
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036415-2007645227.png
package com.rainbowsea.springboot.mybatis.controller;


import com.rainbowsea.springboot.mybatis.bean.Monster;
import com.rainbowsea.springboot.mybatis.service.MonsterService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

@Controller
public class MonsterController {

    // 装配MonsterService
    @Resource
    private MonsterService monsterService;


    @ResponseBody
    @GetMapping("/monster")
    public Monster getMonsterById( @RequestParam(value = "id") Integer id) {
      return monsterService.getMonsterById(id);
    }
}运行测试:注意:我们这里配置的端口是9090,并不是8080。
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036509-476861730.png
2. 末了:

“在这个末了的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上汲取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继承在其他的范畴奋斗。感谢你们,我们总会在某个时刻再次相遇。”
https://img2024.cnblogs.com/blog/3084824/202409/3084824-20240918222036102-513039256.gif

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)