写点什么

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

  • 2024-09-19
    福建
  • 本文字数:6285 字

    阅读完需:约 21 分钟

1. Spring Boot 配置 MyBatis 的详细步骤


1、首先,我们创建相关测试的数据库,数据表。如下:




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)
复制代码


2、导入相关的 jar 依赖。这里我们使用 Druid 数据库连接池,同时我们还需要导入 mybatis.spring.boot 的。



<!--        引入 mybatis starter-->        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>2.2.2</version>        </dependency>
复制代码


引入 Druid 数据库的 jar 依赖。



<!--        引入 druid 依赖-->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.1.17</version>        </dependency>
复制代码


所有的 pom.xml 文件当中的 jar 依赖


<?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>
<groupId>com.rainbowsea</groupId> <artifactId>springboot_mybaits</artifactId> <version>1.0-SNAPSHOT</version>

<!-- 导入SpringBoot 父工程-规定写法--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.3</version> </parent>
<!-- 导入web项目场景启动器:会自动导入和web开发相关的jar包所有依赖【库/jar】--> <!-- 后面还会在说明spring-boot-starter-web 到底引入哪些相关依赖--> <dependencies><!-- 引入 web starter 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<!-- 引入 mybatis starter--> <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency>
<!-- 引入 mysql 驱动: 这里老师使用版本仲裁 8.0.26--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
<!-- 引入配置处理器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>

<!--引入lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
<!-- 引入 test stater --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency>
<!-- 引入 druid 依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.17</version> </dependency> </dependencies>

</project>
复制代码


3、编写对应 数据表的在 Java 当中对应的 Bean 对象。



特殊说明:

这里使用 @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") 注解。来设置数据表当中的时间赋值到该 Bean 对象上的时间属性的一个时间格式。

  • pattern = "yyyy-MM-dd" 是设置时间显示的格式样式

  • timezone = "GMT+8" 是设置时区差。这里我们中国是东半球,时差为 + 8 个小时。

需要注意的是:这个注解只对前端显示,有效果,后端,控制台显示无效。




4、将 Spring Boot 默认的 HikariCP 数据库连接池,切换为我们想要的 Druid 数据库连接池。

这里我们通过配置类的方式,进行切换。



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;
@Configurationpublic class DruidDataSourceConfig {

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


在 resource 类路径下创建一个,名为 applicaiton.yaml 文件,配置编写,相关对于,Druid 数据库连接池的信息。如下:



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-8
复制代码



5、编写项目的场景启动器



package com.rainbowsea.springboot.mybatis;

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplicationpublic class Application {
public static void main(String[] args) { ConfigurableApplicationContext ioc = SpringApplication.run(Application.class, args);
}
}
复制代码


6、运行测试,我们是否成功切换为了,我们想要的 Duird 数据连接池,因为在 Spring Boot 当中测试的话,必须要编写好对应的项目启动器,不然,是无法测试的,会报错。




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());
}


}
复制代码


7、创建一个 mapper/dao 的包,在该包下创建一个名为 MonsterMapper 的接口,通过代理类的方式,在该接口下,编写我们要执行业务的 SQL 语句的方法。



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 加载的时候,会扫描这个类。从而找到这个类。这样我们就不需要额外的配置,包扫描了 。


8、在相应的对应的包,下创建对应的包,创建对应 SQl 语句的xml 文件。如下



<?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"><!-- 1. 扫描所有的dao接口的实现,加入到ioc容器中 2. 这里dao接口,就是mapper接口-->

<!-- 配置 getMonsterById--> <select id="getMonsterById" resultType="com.rainbowsea.springboot.mybatis.bean.Monster"> select * from monster where id = #{id} </select><!-- elect * from `monster` where id = #{id} 注意: 不是单引号处理 --></mapper>
复制代码


同时需要在,application.yaml 文件当中配置,Mybatis 的包扫描路径:如下;



mybatis:  # 指定要扫描的 Xxxmapper.xml  mapper-locations: classpath:mapper/*.xml
复制代码


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-8
mybatis: # 指定要扫描的 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
复制代码


运行测试:



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);
}




}
复制代码



9、编写对应的 Severl 业务处理


首先,编写其接口:



package com.rainbowsea.springboot.mybatis.service;
import com.rainbowsea.springboot.mybatis.bean.Monster;
public interface MonsterService {
// 根据id 返回 Monster 对象 public Monster getMonsterById(Integer id);}
复制代码


在编写其接口的实现类,



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;

@Servicepublic class MonsterServiceImpl implements MonsterService {

// 装配MonsterMapper
@Resource private MonsterMapper monsterMapper;

@Override public Monster getMonsterById(Integer id) {

return monsterMapper.getMonsterById(id); }}
复制代码


运行测试:



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);
}


}
复制代码



10、编写对应的 Controller 控制器,在前端处理显示。



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;
@Controllerpublic class MonsterController {
// 装配MonsterService @Resource private MonsterService monsterService;

@ResponseBody @GetMapping("/monster") public Monster getMonsterById( @RequestParam(value = "id") Integer id) { return monsterService.getMonsterById(id); }}
复制代码


运行测试:注意:我们这里配置的端口是 9090,并不是 8080。



文章转载自:Rainbow-Sea

原文链接:https://www.cnblogs.com/TheMagicalRainbowSea/p/18419490

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
Spring Boot 整合 MyBatis 的详细步骤(两种方式)_Spring Boot_不在线第一只蜗牛_InfoQ写作社区