ToB企服应用市场:ToB评测及商务社交产业平台

标题: 十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式) [打印本页]

作者: 用户云卷云舒    时间: 2024-9-18 21:58
标题: 十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)
十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)

@
目录

MyBatis 的官方文档:https://mybatis.p2hp.com/

关于 MyBatis 的学习的详细内容,各人可以移步至:✏️✏️✏️ MyBatis_ChinaRainbowSea的博客-CSDN博客
1. Spring Boot 配置 MyBatis 的详细步骤

  1. CREATE DATABASE `springboot_mybatis`
  2. USE `springboot_mybatis`
  3. CREATE TABLE `monster` (
  4. `id` int not null auto_increment,
  5. `age` int not null,
  6. `birthday` DATE DEFAULT NULL,
  7. `email` VARCHAR(255) DEFAULT NULL,
  8. `gender` CHAR(1) DEFAULT null,
  9. `name` VARCHAR(255) DEFAULT NULL,
  10. `salary` DOUBLE not NULL,
  11. PRIMARY KEY(`id`)
  12. )
  13. SELECT * from monster
  14. INSERT INTO  `monster` (`id`,`age` ,`birthday`,`email`,`gender`,`name`,`salary`)
  15. VALUES (1,20,'2000-10-10','nmw@sohu.com','男','牛魔王',9000.99)
  16. INSERT INTO  `monster` (`id`,`age` ,`birthday`,`email`,`gender`,`name`,`salary`)
  17. VALUES (2,10,'2000-12-12','bgj@sohu.com','女','白骨精',9999.99)
复制代码
  1.         
  2.         <dependency>
  3.             <groupId>org.mybatis.spring.boot</groupId>
  4.             <artifactId>mybatis-spring-boot-starter</artifactId>
  5.             <version>2.2.2</version>
  6.         </dependency>
复制代码
引入 Druid 数据库的 jar 依靠。
  1.         <dependency>
  2.             <groupId>com.alibaba</groupId>
  3.             <artifactId>druid</artifactId>
  4.             <version>1.1.17</version>
  5.         </dependency>
复制代码
所有的 pom.xml 文件当中的 jar 依靠
  1.     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               
  2.         <dependency>
  3.             <groupId>org.mybatis.spring.boot</groupId>
  4.             <artifactId>mybatis-spring-boot-starter</artifactId>
  5.             <version>2.2.2</version>
  6.         </dependency>                    mysql            mysql-connector-java                            org.springframework.boot            spring-boot-configuration-processor                                    org.projectlombok            lombok                            org.springframework.boot            spring-boot-starter-test                <dependency>
  7.             <groupId>com.alibaba</groupId>
  8.             <artifactId>druid</artifactId>
  9.             <version>1.1.17</version>
  10.         </dependency>   
复制代码

特别说明:
这里利用 @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") 注解。来设置数据表当中的时间赋值到该 Bean 对象上的时间属性的一个时间格式。
必要注意的是:这个注解只对前端显示,有结果,后端,控制台显示无效。

这里我们通过配置类的方式,举行切换。
  1. package com.rainbowsea.springboot.mybatis.config;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import javax.sql.DataSource;
  7. @Configuration
  8. public class DruidDataSourceConfig {
  9.     @ConfigurationProperties(value = "spring.datasource")  // 读取 类路径下的application.yaml
  10.     // 的信息,并为下面的 对应的 setXX 进行赋值操作
  11.     @Bean
  12.     public DataSource dataSource() {
  13.         DruidDataSource druidDataSource = new DruidDataSource();
  14.         return druidDataSource;
  15.     }
  16. }
复制代码
在 resource 类路径下创建一个,名为 applicaiton.yaml 文件,配置编写,相干对于,Druid 数据库毗连池的信息。如下:
  1. server:
  2.   port: 9090  # 注意:使用空格
  3. spring:
  4.   datasource:
  5.     driver-class-name: com.mysql.cj.jdbc.Driver
  6.     username: root
  7.     password: MySQL123
  8.     url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
复制代码

  1. package com.rainbowsea.springboot.mybatis;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.context.ConfigurableApplicationContext;
  5. @SpringBootApplication
  6. public class Application {
  7.     public static void main(String[] args) {
  8.         ConfigurableApplicationContext ioc = SpringApplication.run(Application.class, args);
  9.     }
  10. }
复制代码

  1. package com.rainbowsea.springboot.mybatis;
  2. import com.rainbowsea.springboot.mybatis.bean.Monster;
  3. import com.rainbowsea.springboot.mybatis.mapper.MonsterMapper;
  4. import com.rainbowsea.springboot.mybatis.service.MonsterService;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. @SpringBootTest(classes = Application.class)  // 与 main 不同的需要指明 测试的是哪个Class类
  10. public class ApplicationTest {
  11.     @Resource
  12.     private JdbcTemplate jdbcTemplate;
  13.     @Test
  14.     public void t1() {
  15.         // 输出看看当前的数据源是什么
  16.         System.out.println(jdbcTemplate.getDataSource().getClass());
  17.     }
  18. }
复制代码
  1. package com.rainbowsea.springboot.mybatis.mapper;
  2. import com.rainbowsea.springboot.mybatis.bean.Monster;
  3. import org.apache.ibatis.annotations.Mapper;
  4. /**
  5. * 在Mapper接口使用 @Mapper 就会扫描,并将Mapper接口对象注入
  6. */
  7. @Mapper // 包扫描,加上了这个注解的话,那么
  8. public interface MonsterMapper {
  9.     // 方法 根据id 返回 Monster 对象
  10.     public Monster getMonsterById(Integer id);
  11. }
复制代码
特别说明:
这里我们在该 接口类当中,利用了 @Mapper 注解。该注解的作用就是,让Spring Boot 加载的时候,会扫描这个类。从而找到这个类。如许我们就不必要额外的配置,包扫描了
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.rainbowsea.springboot.mybatis.mapper.MonsterMapper">
  5.    
  6.     <select id="getMonsterById" resultType="com.rainbowsea.springboot.mybatis.bean.Monster">
  7.          select * from monster where id = #{id}
  8.     </select>
  9. </mapper>
复制代码
同时必要在,application.yaml 文件当中配置,Mybatis 的包扫描路径:如下;
  1. mybatis:
  2.   # 指定要扫描的 Xxxmapper.xml
  3.   mapper-locations: classpath:mapper/*.xml
复制代码
  1. server:
  2.   port: 9090  # 注意:使用空格
  3. spring:
  4.   datasource:
  5.     driver-class-name: com.mysql.cj.jdbc.Driver
  6.     username: root
  7.     password: MySQL123
  8.     url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8mybatis:
  9.   # 指定要扫描的 Xxxmapper.xml
  10.   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
复制代码
运行测试:
  1. package com.rainbowsea.springboot.mybatis;
  2. import com.rainbowsea.springboot.mybatis.bean.Monster;
  3. import com.rainbowsea.springboot.mybatis.mapper.MonsterMapper;
  4. import com.rainbowsea.springboot.mybatis.service.MonsterService;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. @SpringBootTest(classes = Application.class)  // 与 main 不同的需要指明 测试的是哪个Class类
  10. public class ApplicationTest {
  11.     @Resource
  12.     private MonsterMapper monsterMapper;
  13.     @Test
  14.     public void getMonsterById() {
  15.         Monster monsterById = monsterMapper.getMonsterById(1);
  16.         System.out.println(monsterById);
  17.     }
  18. }
复制代码

首先,编写其接口:
  1. package com.rainbowsea.springboot.mybatis.service;
  2. import com.rainbowsea.springboot.mybatis.bean.Monster;
  3. public interface MonsterService {
  4.     // 根据id 返回 Monster 对象
  5.     public Monster getMonsterById(Integer id);
  6. }
复制代码
在编写其接口的实现类,
  1. package com.rainbowsea.springboot.mybatis.service.impl;
  2. import com.rainbowsea.springboot.mybatis.bean.Monster;
  3. import com.rainbowsea.springboot.mybatis.mapper.MonsterMapper;
  4. import com.rainbowsea.springboot.mybatis.service.MonsterService;
  5. import org.springframework.stereotype.Service;
  6. import javax.annotation.Resource;
  7. @Service
  8. public class MonsterServiceImpl implements MonsterService {
  9.     // 装配MonsterMapper
  10.     @Resource
  11.     private MonsterMapper monsterMapper;
  12.     @Override
  13.     public Monster getMonsterById(Integer id) {
  14.         return monsterMapper.getMonsterById(id);
  15.     }
  16. }
复制代码
运行测试:
  1. package com.rainbowsea.springboot.mybatis;
  2. import com.rainbowsea.springboot.mybatis.bean.Monster;
  3. import com.rainbowsea.springboot.mybatis.mapper.MonsterMapper;
  4. import com.rainbowsea.springboot.mybatis.service.MonsterService;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. @SpringBootTest(classes = Application.class)  // 与 main 不同的需要指明 测试的是哪个Class类
  10. public class ApplicationTest {
  11.     // 装配到MonsterService
  12.     @Resource
  13.     private MonsterService monsterService;
  14.     // 测试 MonsterService
  15.     @Test
  16.     public void getMonsterById2() {
  17.         Monster monster = monsterService.getMonsterById(2);
  18.         System.out.println(monster);
  19.     }
  20. }
复制代码

  1. package com.rainbowsea.springboot.mybatis.controller;
  2. import com.rainbowsea.springboot.mybatis.bean.Monster;
  3. import com.rainbowsea.springboot.mybatis.service.MonsterService;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RequestParam;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. import javax.annotation.Resource;
  9. @Controller
  10. public class MonsterController {
  11.     // 装配MonsterService
  12.     @Resource
  13.     private MonsterService monsterService;
  14.     @ResponseBody
  15.     @GetMapping("/monster")
  16.     public Monster getMonsterById( @RequestParam(value = "id") Integer id) {
  17.         return monsterService.getMonsterById(id);
  18.     }
  19. }
复制代码
运行测试:注意:我们这里配置的端口是9090,并不是8080。

2. 末了:

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4