首页 > 其他分享 >day13-SpringBoot整合MyBatis/Plus

day13-SpringBoot整合MyBatis/Plus

时间:2023-03-25 22:23:50浏览次数:54  
标签:SpringBoot boot mybatis Plus org MyBatis import com springboot

SpringBoot整合MyBatis/Plus

1.SpringBoot整合MyBatis

1.1整合案例

需求:整合SpringBoot和Mybatis,向数据库中查询数据。

项目结构:

image-20230325185336841

1.1.1创建数据库和表

-- 创建数据库
DROP DATABASE IF EXISTS springboot_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;

插入测试数据:

image-20230325164153728

1.1.2引入依赖

在pom.xml中引入mybatis及相关的依赖

<!--导入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-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.2</version>
    </dependency>
    <!--mysql驱动,使用版本仲裁-->
    <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>
    <!--springboot 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>

1.1.3配置数据源

在resource/application.yml中配置数据源,并完成SpringBoot项目启动测试

spring:
  datasource: #配置数据源
    url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
server:
  port: 9090

创建配置类,设置Druid数据源:

这里如果引入的依赖是druid-starter,可以直接在yml文件中配置

package com.li.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;

/**
 * @author 李
 * @version 1.0
 */
@Configuration
public class DruidDataSourceConfig {
    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }
}

1.1.4指定mapper.xml路径

在application.yml文件中配置mybatis,指定要扫描的mapper.xml文件的路径

在ssm整合中,这一步也是在applicationContext.xml容器文件中指定

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

1.1.5代码实现

(1)创建JavaBean--Monster.java,用于表映射

package com.li.springboot.mybatis.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * @author 李
 * @version 1.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Monster {
    private Integer id;
    private Integer age;
    private Date birthday;
    private String email;
    private String name;
    private String gender;
    private Double salary;
}

(2)创建mapper接口,用于声明方法

package com.li.springboot.mybatis.mapper;

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

/**
 * @author 李
 * @version 1.0
 * 使用注解@mapper,就可以将mapper接口对象注入容器
 */
@Mapper//除了使用注解,也可以直接指定要扫描的包
public interface MonsterMapper {
    //根据id查询数据记录
    public Monster getMonsterById(Integer id);
}

(3)在resource/mapper目录下创建接口对应的mapper.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.li.springboot.mybatis.mapper.MonsterMapper">
    <!--配置getMonsterById方法-->
    <select id="getMonsterById" resultType="com.li.springboot.mybatis.bean.Monster">
        SELECT *
        FROM `monster`
        WHERE `id` = #{id}
    </select>
</mapper>

(4)进行测试:

如果要写测试类,一定要写主程序

package com.li.springboot.mybatis;

import com.li.springboot.mybatis.bean.Monster;
import com.li.springboot.mybatis.mapper.MonsterMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

/**
 * @author 李
 * @version 1.0
 */
@SpringBootTest
public class ApplicationTest {
    @Resource
    private MonsterMapper monsterMapper;//注入的实际上是它的代理类

    //测试MonsterMapper接口是否可用
    @Test
    public void getMonsterMapper() {
        Monster monster = monsterMapper.getMonsterById(1);
        System.out.println("monster=" + monster);
    }
}

测试结果:成功从数据库中获取信息。

image-20230325175049289

接下来的Service、Controller层和ssm没有多大区别,这里不再赘述

1.1.6补充-对mybatis的配置

  • SpringBoot对mybatis的配置有两种方式:

(1)使用传统方式配置,即使用mybatis-config.xml。不过要先在application.yml文件中指定mybatis配置文件的路径。

mybatis:
  config-location:  #指定mybatis-config.xml文件的路径

(2)直接使用application.yml文件进行配置,例如:

mybatis:
  type-aliases-package: com.li.springboot.mybatis.bean #指定别名
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定标准的日志输出
  • 两种方式的选择:
    1. 如果配置比较简单,可以在yml中直接配置
    2. 如果配置内容较多,可以单独地做一个配置文件

1.2注意事项和使用细节

SpringBoot中日期默认是格林尼治标准时间,和中国标准时相差8小时,可以通过注解@JsonFormat解决此问题:

image-20230325190915992

其中pattern表示日期格式,timezone表示时区,GMT是格林尼治时间

2.SpringBoot整合MyBatis-Plus

2.1MyBatis-Plus基本介绍

MyBatisPlus官方文档

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

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

2.2整合案例

需求:整合SpringBoot和MyBatis-Plus,向数据库中查询数据。

2.2.1创建数据库和表

略,表结构同上。

image-20230325192508855

2.2.2引入依赖

pom.xml文件中引入mybatis-plus starter和其他依赖。

<!--导入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-plus starter-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3</version>
    </dependency>

    <!--mysql驱动-->
    <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>

    <!--springboot 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>

2.2.3配置数据源

(1)在resource/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: 123456

(2)创建配置类,设置Druid数据源:这一步和mybatis整合相同,见上1.1.3操作

2.2.4代码实现

(1)创建JavaBean--Monster.java,用于表映射(同1.1.4的操作,略)

(2)创建mapper接口,用于声明方法

相比于mybatis需要自己声明方法,MP提供了一个通用的BaseMapper,有很多通用的方法,通过继承,我们就可以直接使用,简化开发

package com.li.springboot.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.li.springboot.mybatisplus.bean.Monster;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author 李
 * @version 1.0
 * BaseMapper是MyBatisPlus内置的通用Mapper,提供了很多的方法
 * 如果它提供的方法不能满足业务需求,我们可以在这里开发新的方法
 */
@Mapper
public interface MonsterMapper extends BaseMapper<Monster> { 
    
}

如果在这一步没有自定义的接口方法,就不需要使用Mapper.xml文件实现声明

(3)开发Service

MP也提供了一个通用的Service接口,里面也提供了很多方法

package com.li.springboot.mybatisplus.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.li.springboot.mybatisplus.bean.Monster;

/**
 * @author 李
 * @version 1.0
 * 1.在mybatis中,是在MonsterService声明方法,然后在其实现类实现
 * 2.而在MyBatis-Plus中,我们可以通过继承父接口:IService,从而使用里面的很多方法
 * 3.如果它提供的方法不能满足业务需求,再开发新的方法
 */
@Service
public interface MonsterService extends IService<Monster> {
}

注意:如果在业务Service接口声明了自定义方法,通常会创建一个实现类实现接口方法,问题是:由于业务Service接口继承了IService接口,那么业务Service的实现类要同时实现两个接口的方法才行,非常麻烦。

解决方案是:业务实现类通过继承ServiceImpl类解决问题。ServiceImpl类是MyBatis-Plus提供的一个类,它已经实现了IService的方法。这样业务实现类就只需要实现业务Service自定义的方法。

image-20230325210413312

业务实现类MonsterServiceImpl:

package com.li.springboot.mybatisplus.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.li.springboot.mybatisplus.bean.Monster;
import com.li.springboot.mybatisplus.mapper.MonsterMapper;
import com.li.springboot.mybatisplus.service.MonsterService;

/**
 * @author 李
 * @version 1.0
 */
public class MonsterServiceImpl
        extends ServiceImpl<MonsterMapper, Monster>
        implements MonsterService {
    //通过继承ServiceImpl,这个实现类中就只用实现业务Service自定义的方法
}

controller层的实现和mybatis的大同小异,这里就不写了

2.2.5补充-对MP的配置

  • MyBatis-Plus的配置和MyBatis配置几乎没有区别,在SpringBoot中,同样可以通过如下方式进行配置:

(1)使用传统的配置文件配置,不过要先在application.yml文件中指定配置文件的路径:

mybatis-plus:
  config-location: xxx #指定mp配置文件的路径

(2)直接使用application.yml文件进行配置,例如:

mybatis-plus:
  configuration: # 进行mybatis-plus配置,配置项和mybatis一样
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • @MapperScan注解(修饰于主程序)可以替代@Mapper(修饰于mapper接口),basePackages属性可以接收多个值

    image-20230325212533916

2.3注意事项和使用细节

MyBatis-Plus的注解

(1)@TableName

描述:表名注解,标识实体类对应的表。如果实体类的类名和表名一致,则该注解可以省略,否则需要通过@TableName指定表名

(2)为了开发方便,IDEA可以安装MyBatisX插件,参考文档。该插件具有如下功能:XML 跳转、生成代码(需先在 idea 配置 Database 配置数据源)、重置模板、JPA 提示(生成新增、生成查询、生成修改、生成删除)

标签:SpringBoot,boot,mybatis,Plus,org,MyBatis,import,com,springboot
From: https://www.cnblogs.com/liyuelian/p/17255766.html

相关文章

  • 关于Mybatis知识点
    什么是Mybatis?Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。......
  • mybatis xml文件热加载实现
    本文博主给大家带来一篇mybatisxml文件热加载的实现教程,自博主从事开发工作使用Mybatis以来,如果需要修改xml文件的内容,通常都需要重启项目,因为不重启的话,修改是不生......
  • Mybatis源码(十):Mybatis插件机制
    1、Mybatis插件支持拦截的对象MyBatis允许使用插件来拦截的方法调用,可在映射语句执行流程中进行拦截调用。Mybatis插件支持拦截的对象:1、Executor:执行器Execu......
  • SpringBoot 将PDF转成图片或World
    SpringBoot是一款非常流行的JavaWeb开发框架,可以用来构建各种Web应用程序。在本篇博客中,我们将介绍如何使用SpringBoot将PDF转换成图片或其他文件的方法。准备工......
  • SpringBoot集成SpringBootAdmin实现监控
    效果展示客户端maven引用<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifa......
  • SpringBoot集成SpringBootAdmin实现监控
    效果展示客户端maven引用<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artif......
  • 使用Docker 一键部署SpringBoot和SpringCloud项目
    Docker是一个非常流行的容器化技术,可以方便地将应用程序和服务打包成容器并运行在不同的环境中。在本篇博客中,我将向您展示如何使用Docker一键部署SpringBoot和SpringCloud......
  • 三大框架——持久层框架Mybatis
    持久层框架MyBatis1.mybatis介绍2.执行流程3.使用步骤代码实现举例:商品分类CRUD操作4.关联关系4.1一对一4.2一对多5.参数占位符6.复杂搜索6.......
  • MyBatis机制介绍与原理
    插件简介什么是插件插件是一种软件组件,可以在另一个软件程序中添加功能或特性。插件通常被设计成可以随时添加或删除的,而不影响主程序的功能。插件可以扩展软件程序的功......
  • mybatis实现查看详情
    查看详情1.编写接口方法:Mapper接口***参数:id结果BrandBrandselectByld(intid);2.编写SQL语句:SQL映射文件......