Spring Boot 整合MyBatis 和 Spring Boot 整合MyBatis-Plus

news2025/4/28 2:01:58

目录

Spring Boot 整合MyBatis

代码+配置实现

 创建数据库和表

使用灵活的方式创建maven

创建resources/application.yml ,配置数据源参数, 并完成Spring Boot 项目启动测试

测试DruidDataSourceConfig

创建MonsterMapper接口

创建resources\mapper\MonsterMapper.xml , 文件模板从mybatis 官方文档拷贝

创建 service/MonsterService.java接口

创建 service/impl/MonsterServiceImpl.java接口

创建MonsterController

修改resources/application.yml , 指定mybatis.xml 的配置参数

测试页面效果

注意事项和细节说明

Spring Boot 整合MyBatis-Plus

 基本介绍

整合MyBatis-Plus 实例

 需求说明/图解

 代码实现

创建数据库和表

创建springboot_mybatisplus 项目-pom.xml 引入必要的依赖

修改pom.xml 引入MyBatis-Plus starter

 创建resources/application.yml 配置数据源参数

切换数据源为druid ,修改pom.xml 

创建配置文件DruidDataSourceConfig.java 

创建主函数

测试是否能正确启动项目, 注意观察mybatis-plus 是否引入成功

创建ben/ Monster.java

创建/mapper/MonsterMapper.java

创建service/MonsterService.java

创建impl/MonsterServiceImpl.java

创建/controller/MonsterController.java

修改Application.java , 加入对Mapper 的扫描

​编辑启动项目,完成测试

整合MyBatis-Plus 注意事项和细节


Spring Boot 整合MyBatis


代码+配置实现

 创建数据库和表

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`)
) CHARSET=utf8

SELECT * FROM `monster`

insert into monster values(null, 20, '2000-11-11', 'nmw@sohu.com', '男', '牛魔王', 5000.88);
insert into monster values(null, 10, '2011-11-11', 'bgj@sohu.com', '女', '白骨精', 8000.88);

使用灵活的方式创建maven

注意我们这里使用的数据源为druid.

    <!--导入springboot父工程-规定写法-->
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.5.3</version>
    </parent>

    <!--引入相关的依赖-->
    <dependencies>
        <!--引入web starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--引入mybatis starter, 如果小伙伴看不到 版本,自己手写2.2.2-->
        <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 starter-->
        <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>

创建resources/application.yml ,配置数据源参数, 并完成Spring Boot 项目启动测试

server:
  port: 9090
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 自己的密码

测试DruidDataSourceConfig


/**
建议, 最好是先自己把这个类写出,然后拷贝自己需要的代码, 这样自己写代码也知道是为什么
 *
 */
@Configuration
public class DruidDataSourceConfig {


    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource =
                new DruidDataSource();
        return druidDataSource;
    }
}

创建/Monster.java -SSM整合在博客的项目有介绍

@Data
public class Monster {
    private Integer id;
    private Integer age;
    //这里通过注解来解决时区问题
    //GMT 就是格林尼治标准时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date birthday;
    private String email;
    private String name;
    private String gender;
    private Double salary;
}

创建MonsterMapper接口

@Mapper
public interface MonsterMapper {
    //方法,根据id返回Monster对象
    public Monster getMonsterById(Integer id);
}

创建resources\mapper\MonsterMapper.xml , 文件模板从mybatis 官方文档拷贝

<?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.wyx.springboot.mybatis.mapper.MonsterMapper">
    <!--配置getMonsterById-->
    <select id="getMonsterById" resultType="Monster">
        SELECT * FROM `monster` WHERE id=#{id}
    </select>
</mapper>

创建 service/MonsterService.java接口

public interface MonsterService {

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

创建 service/impl/MonsterServiceImpl.java接口

@Service
public class MonsterServiceImpl implements MonsterService {

    //装配MonsterMapper
    @Resource
    private MonsterMapper monsterMapper;

    @Override
    public Monster getMonsterById(Integer id) {
        return monsterMapper.getMonsterById(id);
    }
}

创建MonsterController

@Controller
public class MonsterController {

    //装配MonsterService
    @Resource
    private MonsterService monsterService;


    @ResponseBody
    @GetMapping("/monster")
    public Monster getMonsterById(@RequestParam(value = "id") Integer id){

        return monsterService.getMonsterById(id);
    }
}

修改resources/application.yml , 指定mybatis.xml 的配置参数

server:
  port: 9090
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 自己的密码


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

  #通过config-location 可以指定mybatis-config.xml,可以以传统的方式来配置mybatis
  #config-location:
  #config-location: classpath:mybatis-config.xml

  #我们也可以直接在application.yml进行配置
  #举例说明1. 比如配置原来的 typeAliases
  #举例说明2 配置输出底层的原生sql
  #还有很多其它的配置,我们使用到再说
  type-aliases-package: com.wyxdu.springboot.mybatis.bean
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

  #说明: 配置mybatis的两种方式的选择: 如果配置比较简单,就直接在application.yml配置即可
  #如果配置内容比较多,可以考虑单独的做一个mybatis-config.xml

测试页面效果

● 完成测试, 浏览器: http://localhost:10000/monster?id=1

注意事项和细节说明

spring boot 整合mybatis 取出的日期, 出现8 小时时差解决方案

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")


Spring Boot 整合MyBatis-Plus

官网https://baomidou.com

 基本介绍

1. MyBatis-Plus (简称MP)是一个MyBatis 的增强工具,在MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2. 强大的CRUD 操作:内置通用Mapper、通用Service,通过少量配置即可实现单表大部分CRUD 操作,更有强大的条件构造器,满足各类使用需求 

整合MyBatis-Plus 实例

 需求说明/图解

1. 将Spring Boot 和MyBatis-Plus 整合

2. 查询数据,如图 

 代码实现

创建数据库和表

CREATE DATABASE `springboot_mybatisplus`
USE `springboot_mybatisplus`
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`)
) CHARSET=utf8

SELECT * FROM `monster`

INSERT INTO monster VALUES(NULL, 20, '2000-11-11', 'xzj@sohu.com', ' 男', ' 蝎子精',
15000.88);
INSERT INTO monster VALUES(NULL, 10, '2011-11-11', 'ytj@sohu.com', ' 女', ' 玉兔精',
18000.88);

创建springboot_mybatisplus 项目-pom.xml 引入必要的依赖

    <!--导入springboot父工程-规定写法-->
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.5.3</version>
    </parent>

    <!--引入必要的依赖-->
    <dependencies>

        <!--引入web starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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 starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>


      
    </dependencies>

修改pom.xml 引入MyBatis-Plus starter

  <!--引入mybatis-plus starter-->
        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>

 创建resources/application.yml 配置数据源参数

server:
  port: 9090
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot_mybatisplus?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 自己的数据库密码

切换数据源为druid ,修改pom.xml 

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

创建配置文件DruidDataSourceConfig.java 

@Configuration
public class DruidDataSourceConfig {


    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource =
                new DruidDataSource();
        return druidDataSource;
    }
}

创建主函数

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

测试是否能正确启动项目, 注意观察mybatis-plus 是否引入成功

创建ben/ Monster.java

@Data
//说明:
//1. 如果这个类名Monster 和表名monster 一致,可以映射上,则@TableName 可以省略
//2. 如果这个类名Monster 和表名不一致,不能映射上,则@TableName 可以指定
@TableName("monster")
public class Monster {
    private Integer id;
    private Integer age;
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date birthday;
    private String email;
    private String name;
    private String gender;
    private Double salary;
}

创建/mapper/MonsterMapper.java

1. BaseMapper 已经默认提供了很多crud 方法, 可以直接用
2. 如果BaseMapper 提供的方法不满足需要,可以再开发MonsterMapper.xml

@Mapper
public interface MonsterMapper  extends BaseMapper<Monster> {
}

创建service/MonsterService.java

解读

1.在传统的方法中 在接口中定义方法/声明方法,然后在实现类进行实现

2. 在mybits-plus中我们可以继承父接口IService

这个IService接口声明很多方法比如crud

4. 如果默认方法不能满足需求,我们可以再声明需要的方法,然后在实现类去实现就可

@Service
public interface MonsterService extends IService<Monster> {
}

创建impl/MonsterServiceImpl.java

解读

以前的做法是MonsterServiceImpl  implements   MonsterService 接口.

但是这样做会报错 因为以前父接口没有继承接口可以直接这样

但是现在父接口继承了一个IService接口 所以你要实现IService的方法

但是那个太多了我们也用不了那么多

所以mybits-plus给我们提供一个ServiceImpl类来继承 这个类实现了IService接口

 所以我们可以看 ServiceImpl类 实现了IService接口.

MonsterService又继承了IService接口.

所以我们MonsterServiceImpl 继承了ServiceImpl类 就可以相当于实现了MonsterService接口.

@Service
public class MonsterServiceImpl extends ServiceImpl<MonsterMapper, Monster> implements MonsterService {
}

创建/controller/MonsterController.java

@Controller
public class MonsterController {
    @Autowired
    MonsterService monsterService;
    @ResponseBody
    @GetMapping("/monster")
    public Monster getByMonsterId(@RequestParam("id") Integer id) {
        return monsterService.getById(id);
    }
    @ResponseBody
    @GetMapping("/list")
    public List<Monster> listMonster() {
        return monsterService.list();
    }
}

修改Application.java , 加入对Mapper 的扫描

@MapperScan("com.wyx.mybatisplus.mapper")
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

启动项目,完成测试

浏览器: http://localhost:10000/list http://localhost:10000/monster?id=1

 

整合MyBatis-Plus 注意事项和细节

1. @TableName 作用.

如果这个类名Monster 和表名monster 一致,可以映射上,则@TableName 可以省略.

如果这个类名Monster 和表名不一致,不能映射上,则可以通过@TableName 指定.

 2. MyBatis-Plus starter 到底引入了哪些依赖?

3. 为了开发方便, 可以安装MyBatisX 插件,

参考文档:https://baomidou.com/guide/mybatisx-idea-plugin.html 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开发笔记之:文件读取溢出分析(QT C++版)

&#xff08;1&#xff09;引言 以下是QT C读取数据文件&#xff08;QDataStream&#xff09;的代码&#xff1a; /*** 按双字读取* param fis 文件输入流* param isBigEndian 是否大头&#xff08;字节序&#xff09;* return 双字值*/ DWORD FsFileUtil::readAsD…

工欲善其事必先利其器——开发神器(IDEA)

&#x1f525;IDEA 简介&#x1f525;IDEA的特色功能&#x1f525;IDEA的优点&#x1f525;IDEA 的使用&#x1f525;IDEA的常用快捷键 &#x1f525;IDEA 简介 IDEA 全称 IntelliJ IDEA&#xff0c;是 java 编程语言开发的集成环境&#xff0c;被公认为最好的 java 开发工具之…

如何轻松搭建一套行情回放系统

一个量化策略在生产&#xff08;交易&#xff09;环境中运行时&#xff0c;实时数据的处理通常是由事件驱动的。为确保研发和生产使用同一套代码&#xff0c;通常在研发阶段需将历史数据&#xff0c;严格按照事件发生的时间顺序进行回放&#xff0c;以此模拟交易环境。在 Dolph…

ChatGPT 提问,软件杂项部分

堆内存与栈内存一般分别 有多少 ChatGPT 堆内存和栈内存的大小取决于操作系统和编译器的限制以及程序的运行环境。以下是一些常见的默认大小范围&#xff0c;但请注意这些值可以因环境而异&#xff1a; 栈内存大小&#xff1a; Windows平台&#xff1a;默认情况下&#xff…

vue3 大致总结

一、开发、生产、测试环境的文件编写 需要以VITE开头&#xff01;&#xff01;&#xff01; 输出时&#xff1a;console.log(import.meta.env.VITE_ENV,"------***---------"); 二、路由守卫 1、全局路由守卫beforeEach和afterEach ①全局前置守卫beforeEach ②…

六、达梦8数据库适配记录

达梦数据库适配记录 记录关于我的业务微服务,适配国产达梦数据库的过程,以及遇到的一些错误问题和其解决方案。 目前的项目最初基于Mysql开发,现在要适配到达梦,不要以为迁移任务很easy,但实际过程中还是出现了很多问题。 基 由于达梦是的国产数据库,本身与MySQL数据库…

idea配置阿里云翻译

idea配置阿里云翻译 0前言1开通阿里云机器翻译2配置阿里云AccessKeyidea配置Translation 0前言 使用idea的码农们都应该对Translation这款插件不会陌生了&#xff0c;尤其是英语基础比较薄弱的盆友&#xff0c;在看源码的时候更是会经常使用Translation边翻边看源码。 但是由于…

EW代理工具的使用说明

一、EW介绍 Earthworm&#xff08;EW&#xff09; 是一套便携式的网络穿透工具&#xff0c;具有 SOCKS v5服务架设和端口转发两大核心功能&#xff0c;可在复杂网络环境下完成网络穿透。 该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道&#xff0c;直达…

基于REST风格的SpringMVC请求路径设置与参数传递

文章目录 1 REST简介2 RESTful入门案例2.1 环境准备2.2 思路分析2.3 修改RESTful风格新增删除传递路径参数 修改根据ID查询查询所有 知识点1&#xff1a;PathVariable 3 RESTful快速开发知识点1&#xff1a;RestController知识点2&#xff1a;GetMapping PostMapping PutMappin…

【STL】

目录 什么是STLSTL定义两大特点两个层次 STL主要构成容器容器概念容器分类vectordequestackqueuelistset/multiset容器map/multimap容器 算法迭代器仿函数适配器空间配置器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插…

选Ubuntu 还是 Fedora ?

提起开发&#xff0c;程序员们更青睐于不同版本的Linux操作系统而不是Windows。 为什么&#xff1f;因为Linux操作起来更安全、快捷&#xff0c;最重要的是&#xff0c;它的发行版本众多。你可以根据需要挑选最适合的那一款。那么&#xff0c;问题来了&#xff0c;到底哪个版本…

开源地质建模GemPy实战

推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 在设计任何类型的工程结构时&#xff0c;确定地面以下的东西并有效地将其映射出来是首要也是最重要的部分之一。 地下建模带有很大的误差范围&#xff0c;因为即使是我们今天使用的最先进的地下调查方法也无法完全绘制出…

【Linux】信号概述

目录 1、信号概念2、Linux常用信号表3、信号的5种默认处理动作 橙色 1、信号概念 信号是 Linux进程间通信的最古老的方式之一&#xff0c;是事件发生时对进程的通知机制&#xff0c;有时也称之为软件中断&#xff0c;它是在软件层次上对中断机制的一种模拟&#xff0c;是一种…

Vue3(6) Transition

目录 组件 基于CSS的过渡效果 JavaScript钩子 Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动画&#xff1a; <Transition> 会在一个元素或组件进入和离开 DOM 时应用动画。 <TransitionGroup> 会在一个 v-for 列表中的元素或组件被…

C++模板template

我们现在有几个变量&#xff0c;我们向要实现他们的交换&#xff0c;所以我们现在写了一个swap函数 我们现在可以实现对这两个变量之间的交换&#xff0c; 那么我们有有两个变量需要交换呢&#xff1f;&#xff1f; 我们刚才的Swap函数的参数是int类型的&#xff0c;我们现在的…

ChatGPT 和对话式 AI 的未来:2023 年的进展和应用

人工智能(Artificial Intelligence)在过去一段时间以来以前所未有的速度快速发展。从自动化日常任务到重要提醒的设定,AI以各种方式渗透到我们的生活中。然而,在这个领域中迈出的最重要一步是ChatGPT。 ChatGPT被瑞银(UBS)评为“有史以来增长最快的消费者应用程序”,于…

Cy5.5-PEG-SH近红外荧光PEG试剂 Cyanine5.5-PEG-SH,Thiol-PEG-Cy5.5可用于活体成像

Cy5.5-PEG-SH &#xff0c;Cy5.5聚乙二醇巯基 英文名称&#xff1a;Cy5.5-PEG-SH 中文名称&#xff1a;Cy5.5聚乙二醇巯基 性状: 深蓝色固体或粘性液体&#xff0c;取决于分子量 溶剂&#xff1a;溶于水、 DMSO等常规性有机溶剂 激发/发射波长&#xff1a;684 nm/710 nm …

Windows操作系统重要内容

windows 常用用户&#xff1a; SYSTEM&#xff1a;本地机器上拥有最高权限的用户。&#xff08;为系统核心组件访问文件资源提供权限&#xff09;Administrator&#xff1a;默认系统管理员用户。Guest&#xff1a;只拥有相对较少的权限&#xff0c;默认被禁用。 Windows 常见…

【中医推荐】33部中医书籍,中医医书精品(在线免费阅读),值得珍藏的国粹,涵盖中药、针灸、推拿、按摩、拔罐、气功,食疗等诸多领域

中医诞生于原始社会&#xff0c;春秋战国时期中医理论已基本形成&#xff0c;之后历代均有总结发展。除此之外对汉字文化圈国家影响深远&#xff0c;如日本医学、韩国韩医学、朝鲜高丽医学、越南东医学等都是以中医为基础发展起来的。 中医承载着中国古代人民同疾病作斗争的经…

(华三AC+AP)在华三AC上通过用户mac地址或者IP地址查询在那一台AP下

起因&#xff1a;用户终端的WiFi信号一直不停地断开重连&#xff0c;发现AP的信号消失了&#xff0c;经过检查配置并没有问题&#xff0c;但是在后来发现重启可以让AP恢复使用&#xff0c;但是过一段时间还是会出现这样的问题&#xff0c;因为AP没有备用换下维修&#xff0c;这…