SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)

news2025/2/28 3:33:07

文章目录

    • 1.整合MyBatis
        • 1.需求分析
        • 2.数据库表设计
        • 3.数据库环境配置
          • 1.新建maven项目
          • 2.pom.xml 引入依赖
          • 3.application.yml 配置数据源
          • 4.Application.java 编写启动类
          • 5.测试
          • 6.配置类切换druid数据源
          • 7.测试数据源是否成功切换
        • 4.Mybatis基础配置
          • 1.编写映射表的bean
          • 2.MonsterMapper.java 编写mapper接口
          • 3.MonsterMapper.xml 编写mapper.xml实现mapper接口
          • 4.application.yml 扫描mapper.xml配置文件的位置
          • 5.测试
        • 5.MyBatis高级配置
          • 1.方式一:在application.yml中配置mybatis.config-location指定mybatis-config.xml配置文件的位置
          • 2.方式二:直接在application.yml中配置
        • 6.继续编写Service层和Controller层
          • 1.MonsterService.java
          • 2.MonsterServiceImpl.java
          • 3.测试
          • 4.MonsterController.java
          • 5.测试
          • 6.解决时间问题
        • 7.完整文件目录
    • 2.整合MyBatis-Plus
        • 1.MyBatis-Plus基本介绍
        • 2.数据库表设计
        • 3.数据库环境配置
          • 1.创建maven项目
          • 2.pom.xml 导入依赖
          • 3.application.yml 配置数据源
          • 4.DruidDataSourceConfig.java 配置类切换druid数据源
          • 5.编写启动类Application.java,测试运行
        • 4.MyBatis-Plus基础配置
          • 1.编写映射表的bean
          • 2.MonsterMapper.java 编写Mapper接口
          • 3.测试接口方法使用
        • 5.MyBatis-Plus高级配置
          • application.yml 进行配置
        • 6.继续编写Service层和Controller层
          • 1.MonsterService.java
          • 2.MonsterServiceImpl.java
          • 3.测试
          • 4.细节说明
          • 5.MonsterController.java
        • 7.细节说明
          • 1.@MapperScan 扫描包下的所有Mapper
            • 启动类配置注解
          • 2.@TableName bean的类名与表名不一致时使用
          • image-20240317200951971
          • 3.MyBatis引入了哪些依赖
        • 8.MyBatisX快速开发
          • 1.安装插件
          • 2.使用方式
            • 1.挑一个带小鸟的方法
            • 2.直接alt + Enter
            • 3.生成sql语句
            • 4.查看生成的方法
            • 5.点击左边的小鸟就可以直接跳转到指定方法或者xml
        • 9.完整文件目录
        • 10.MyBatis-Plus小结

1.整合MyBatis

1.需求分析

image-20240317110407816

2.数据库表设计
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 values(null, 20, '2000-11-11', 'nmw@sohu.com', '男', '牛魔王', 5000.88);
insert into monster values(null, 10, '2011-11-11', 'bgj@sohu.com', '女', '白骨精', 2000.00);
3.数据库环境配置
1.新建maven项目

image-20240317111137777

2.pom.xml 引入依赖
    <!--导入springboot父工程-->
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.5.3</version>
    </parent>

    <!--引入相关依赖-->
    <dependencies>
        <!--常规依赖-->
        <!--web场景启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--引入测试场景启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--配置处理器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <!--数据库配置-->
        <!--引入data-jdbc数据源-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <!--mysql依赖使用版本仲裁-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- 引入 druid 依赖 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.17</version>
        </dependency>
        <!--MyBatis场景启动器-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
    </dependencies>
3.application.yml 配置数据源
  • 数据库名
  • 用户名
  • 密码
  • 驱动是mysql8的(因为上面使用了版本仲裁)
server:
  port: 8080
spring:
  datasource: #配置数据源
    url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
4.Application.java 编写启动类
package com.sun.springboot.mybatis;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

5.测试
package com.sun.springboot.mybatis;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.annotation.Resource;

/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootTest
public class ApplicationTest {
    //依赖注入
    @Resource
    private JdbcTemplate jdbcTemplate;

    @Test
    public void t1() {
        //查看目前数据源
        System.out.println(jdbcTemplate.getDataSource().getClass());
    }
}

image-20240317135531900

6.配置类切换druid数据源
package com.sun.springboot.mybatis.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Arrays;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Configuration
public class DruidDataSourceConfig {

    //注入一个德鲁伊数据源
    @ConfigurationProperties("spring.datasource") //读取yaml配置文件的参数,获取数据源配置
    @Bean
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setFilters("stat, wall"); //开启sql监控
        return druidDataSource;
    }

    //配置德鲁伊监控sql功能
    @Bean
    public ServletRegistrationBean statViewServlet() {
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean =
                new ServletRegistrationBean<>(statViewServlet, "/druid/*");
        //配置登录监控页面用户名和密码
        registrationBean.addInitParameter("loginUsername", "root");
        registrationBean.addInitParameter("loginPassword", "root");
        return registrationBean;
    }

    //配置webStatFilter
    @Bean
    public FilterRegistrationBean webStatFilter() {
        WebStatFilter webStatFilter = new WebStatFilter();
        FilterRegistrationBean<WebStatFilter> filterRegistrationBean =
                new FilterRegistrationBean<>(webStatFilter);
        //默认对所有 URL 请求监控
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
        //排除 URL
        filterRegistrationBean.addInitParameter
                ("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}
7.测试数据源是否成功切换
package com.sun.springboot.mybatis;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.annotation.Resource;

/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootTest
public class ApplicationTest {
    //依赖注入
    @Resource
    private JdbcTemplate jdbcTemplate;

    @Test
    public void t1() {
        //查看目前数据源
        System.out.println(jdbcTemplate.getDataSource().getClass());
    }
}

image-20240317153854191

4.Mybatis基础配置
1.编写映射表的bean
package com.sun.springboot.mybatis.bean;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.util.Date;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Data
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;
}

2.MonsterMapper.java 编写mapper接口
  • 使用注解注入容器
package com.sun.springboot.mybatis.mapper;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
@Mapper //将接口注入容器
public interface MonsterMapper {
    public Monster getMonsterById(Integer id);
}

3.MonsterMapper.xml 编写mapper.xml实现mapper接口
  • 使用namespace指定要实现的接口
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定要实现的接口-->
<mapper namespace="com.sun.springboot.mybatis.mapper.MonsterMapper">
    <select id="getMonsterById" resultType="com.sun.springboot.mybatis.bean.Monster" parameterType="Integer">
        select * from monster where id = #{id}
    </select>
</mapper>

image-20240317160222655

4.application.yml 扫描mapper.xml配置文件的位置
  • 扫描类路径下mapper文件夹下的所有文件
mybatis:
  #指定要扫描的mapper.xml
  mapper-locations: classpath:mapper/*.xml
5.测试
package com.sun.springboot.mybatis;

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

import javax.annotation.Resource;

/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootTest
public class ApplicationTest {
    //依赖注入
    @Resource
    private JdbcTemplate jdbcTemplate;
    //注意这里注入的是MonsterMapper的代理对象
    @Resource
    private MonsterMapper monsterMapper;

    @Test
    public void t1() {
        //查看目前数据源
        System.out.println(jdbcTemplate.getDataSource().getClass());
    }

    @Test
    public void t2() {
        //测试mybatis
        Monster monsterById = monsterMapper.getMonsterById(1);
        System.out.println(monsterById);
    }
}

image-20240317162322200

5.MyBatis高级配置
1.方式一:在application.yml中配置mybatis.config-location指定mybatis-config.xml配置文件的位置
2.方式二:直接在application.yml中配置
mybatis:
  #指定要扫描的mapper.xml
  mapper-locations: classpath:mapper/*.xml
  #配置类型别名包,这样只要在这个包下的类型都可以简写
  type-aliases-package: com/sun/springboot/mybatis/bean
  #输出日志
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
6.继续编写Service层和Controller层
1.MonsterService.java
package com.sun.springboot.mybatis.service;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
public interface MonsterService {
    public Monster getMonsterById(Integer id);
}

2.MonsterServiceImpl.java
package com.sun.springboot.mybatis.service.Impl;

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

import javax.annotation.Resource;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Service
public class MonsterServiceImpl implements MonsterService {
    @Resource
    private MonsterMapper monsterMapper; //返回代理对象
    @Override
    public Monster getMonsterById(Integer id) {
        return monsterMapper.getMonsterById(id);
    }
}
3.测试
package com.sun.springboot.mybatis;

import com.sun.springboot.mybatis.bean.Monster;
import com.sun.springboot.mybatis.mapper.MonsterMapper;
import com.sun.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;

/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootTest
public class ApplicationTest {
    //依赖注入
    @Resource
    private MonsterService monsterService;

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

image-20240317171924248

4.MonsterController.java
package com.sun.springboot.mybatis.Controller;

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

import javax.annotation.Resource;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Controller
public class MonsterController {
    @Resource
    private MonsterService monsterService;

    @GetMapping("/getMonster/{id}") //路径参数的请求
    @ResponseBody //响应一个json
    public Monster getMonsterById(@PathVariable("id") Integer id) {
        Monster monsterById = monsterService.getMonsterById(id);
        return monsterById;
    }
}

5.测试

image-20240317172341555

6.解决时间问题

image-20240317172733899

7.完整文件目录

image-20240317175408170

2.整合MyBatis-Plus

1.MyBatis-Plus基本介绍

image-20240317173128759

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`)
);
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);
3.数据库环境配置
1.创建maven项目

image-20240317173858334

2.pom.xml 导入依赖
  <!--导入springboot父工程-->
  <parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.5.3</version>
  </parent>

  <!--引入相关依赖-->
  <dependencies>
    <!--常规依赖-->
    <!--web场景启动器-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--lombok-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <!--引入测试场景启动器-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <!--配置处理器-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>

    <!--数据库配置-->
    <!--mysql依赖使用版本仲裁-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
    </dependency>
    <!-- 引入 druid 依赖 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.17</version>
    </dependency>
    
    <!--引入MyBatis-Plus场景启动器,会自动引入jdbc和MyBatis-->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.4.3</version>
    </dependency>
  </dependencies>
3.application.yml 配置数据源
  • 数据库名称
  • 用户名
  • 密码
server:
  port: 8080
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot_mybatisplus?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root

4.DruidDataSourceConfig.java 配置类切换druid数据源
package com.sun.springboot.mybatisplus.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Arrays;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Configuration
public class DruidDataSourceConfig {

    //注入一个德鲁伊数据源
    @ConfigurationProperties("spring.datasource") //读取yaml配置文件的参数,获取数据源配置
    @Bean
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setFilters("stat, wall"); //开启sql监控
        return druidDataSource;
    }

    //配置德鲁伊监控sql功能
    @Bean
    public ServletRegistrationBean statViewServlet() {
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean =
                new ServletRegistrationBean<>(statViewServlet, "/druid/*");
        //配置登录监控页面用户名和密码
        registrationBean.addInitParameter("loginUsername", "root");
        registrationBean.addInitParameter("loginPassword", "root");
        return registrationBean;
    }

    //配置webStatFilter
    @Bean
    public FilterRegistrationBean webStatFilter() {
        WebStatFilter webStatFilter = new WebStatFilter();
        FilterRegistrationBean<WebStatFilter> filterRegistrationBean =
                new FilterRegistrationBean<>(webStatFilter);
        //默认对所有 URL 请求监控
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
        //排除 URL
        filterRegistrationBean.addInitParameter
                ("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}
5.编写启动类Application.java,测试运行
package com.sun.springboot.mybatisplus;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

image-20240317175826043

4.MyBatis-Plus基础配置
1.编写映射表的bean
package com.sun.springboot.mybatisplus.bean;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.util.Date;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Data
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;
}
2.MonsterMapper.java 编写Mapper接口
package com.sun.springboot.mybatisplus.mapper;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
//直接继承BaseMapper接口
@Mapper //注入容器
public interface MonsterMapper extends BaseMapper<Monster> {
    //如果提供的方法不够用再自定义方法
}

3.测试接口方法使用
package com.sun.springboot.mybatisplus;

import com.sun.springboot.mybatisplus.bean.Monster;
import com.sun.springboot.mybatisplus.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 MonsterMapperTest {
    //注入针对Mapper接口的代理对象
    @Resource
    private MonsterMapper monsterMapper;
    @Test
    public void t1() {
        Monster monster = monsterMapper.selectById(1);
        System.out.println(monster);
    }
}

image-20240317181409483

5.MyBatis-Plus高级配置
application.yml 进行配置
#进行mybatis-plus配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
6.继续编写Service层和Controller层
1.MonsterService.java
package com.sun.springboot.mybatisplus.service.Impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sun.springboot.mybatisplus.bean.Monster;
import com.sun.springboot.mybatisplus.mapper.MonsterMapper;
import com.sun.springboot.mybatisplus.service.MonsterService;
import org.springframework.stereotype.Service;

/**
 * 这里
 * @author 孙显圣
 * @version 1.0
 */
@Service
public class MonsterServiceImpl extends ServiceImpl<MonsterMapper, Monster> implements MonsterService {
    //自定义方法实现
}

2.MonsterServiceImpl.java
package com.sun.springboot.mybatisplus.service.Impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sun.springboot.mybatisplus.bean.Monster;
import com.sun.springboot.mybatisplus.mapper.MonsterMapper;
import com.sun.springboot.mybatisplus.service.MonsterService;
import org.springframework.stereotype.Service;

/**
 * 这里
 * @author 孙显圣
 * @version 1.0
 */
@Service
public class MonsterServiceImpl extends ServiceImpl<MonsterMapper, Monster> implements MonsterService {
    //自定义方法实现
}

3.测试
package com.sun.springboot.mybatisplus;

import com.sun.springboot.mybatisplus.bean.Monster;
import com.sun.springboot.mybatisplus.mapper.MonsterMapper;
import com.sun.springboot.mybatisplus.service.MonsterService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootTest
public class MonsterServiceTest {
    @Resource
    private MonsterService monsterService;
    @Test
    public void t1() {
        Monster byId = monsterService.getById(2);
        System.out.println(byId);
    }
}

image-20240317193644393

4.细节说明
  • 简单来说就是MonsterServiceImpl只需要实现MonsterService接口的方法
  • 可以调用IService接口的方法,也可以调用MonsterService接口的方法

image-20240317193513003

5.MonsterController.java
package com.sun.springboot.mybatisplus.controller;

import com.sun.springboot.mybatisplus.bean.Monster;
import com.sun.springboot.mybatisplus.service.MonsterService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Controller
public class MonsterController {
    @Resource
    //注入的是MonsterServiceImpl的bean对象,可以直接调用IService接口的方法
    private MonsterService monsterService;
    @GetMapping("/getMonster/{id}")
    @ResponseBody
    public Monster getMonsterById(@PathVariable("id") Integer id) {
        Monster byId = monsterService.getById(id);
        return byId;
    }
}

image-20240317194934543

7.细节说明
1.@MapperScan 扫描包下的所有Mapper
启动类配置注解

image-20240317200417488

2.@TableName bean的类名与表名不一致时使用
image-20240317200951971
3.MyBatis引入了哪些依赖

image-20240317201044828

8.MyBatisX快速开发
1.安装插件

image-20240317201658927

2.使用方式
1.挑一个带小鸟的方法

image-20240317203048085

2.直接alt + Enter

image-20240317203124474

3.生成sql语句

image-20240317203146538

4.查看生成的方法

image-20240317203209726

5.点击左边的小鸟就可以直接跳转到指定方法或者xml

image-20240317203629654

image-20240317203639228

9.完整文件目录

image-20240317203723886

10.MyBatis-Plus小结

image-20240317203958723

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

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

相关文章

PHP序列化基础知识储备

一、序列化与反序列化 1、概念 PHP中的序列化是指将复杂的数据类型转换为可存储或可传输的字符串&#xff0c;而反序列化则是将这些字符串重新转换回原来的数据类型。 序列化通常使用 serialize() 函数完成&#xff0c;它可以将数组、对象、字符串等复杂数据类型压缩到一个字…

m3u8,一个超酷的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超酷的 Python 库 - m3u8。 Github地址&#xff1a;https://github.com/globocom/m3u8 在网络视频传输中&#xff0c;HLS&#xff08;HTTP Live Streaming&#xff09;是一…

后端系统开发之——创建SpringBoot工程

原文地址&#xff1a;后端框架系统开发之——创建SpringBoot工程 - Pleasure的博客 下面是正文内容&#xff1a; 前言 现在的市场环境&#xff0c;如果你单单只是作为前端工程师或者是后端工程师&#xff0c;在开发Web应用的时候都需要去读取企业提供的接口文档。而当你前后端…

python--剑指offer--中等--07. 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如&#xff0c;给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树&#xff1a; 3/ 9 20 / 15 7 …

数字后端 EDA 软件分享

数字后端 EDA 软件分享 推荐这几家的EDA工具吧&#xff0c;虽说我也支持国产工具&#xff0c;但是我还是选择了这几家的工具 apache cadence mentor synopsys 下图我现在用的eda环境&#xff0c;利用网上的资源&#xff0c;自己独立在vmware上搭建好的EDA环境 除去pdk&#…

mybatis项目中配置sql提示

2023版的idea好像内置了这个功能。 第一步&#xff1a; 第二步&#xff1a;第一步完成后user会爆红&#xff0c;这时我们需要连接数据库。

AI预测-一文解析AI预测数据工程

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

Mock 测试入门:什么是 Mock 测试

Mock测试 什么是 Mock &#xff1f; Mock 的意思就是&#xff0c;当你很难拿到源数据时&#xff0c;你可以使用某些手段&#xff0c;去获取到跟源数据相似的假数据&#xff0c;拿着这些假数据&#xff0c;前端可以先行开发&#xff0c;而不需要等待后端给了数据后再开发。 Mo…

【Spark编程基础】RDD 编程初级实践(附源代码)

目录 一、实验目的二、实验平台三、实验内容1.spark-shell 交互式编程2.编写独立应用程序实现数据去重3.编写独立应用程序实现求平均值问题 一、实验目的 1、熟悉 Spark 的 RDD 基本操作及键值对操作&#xff1b; 2、熟悉使用 RDD 编程解决实际具体问题的方法 二、实验平台 …

2024年5家香港服务器推荐,性价比top5

​​香港服务器是中小企业建站、外贸建站、个人博客建站等领域非常受欢迎的服务器&#xff0c;2024年有哪些云厂商的香港服务器是比较有性价比的&#xff1f;这里根据小编在IT领域多年服务器使用经验&#xff0c;给大家罗列5家心目中最具性价比的香港服务器厂商。 这五家香港服…

Gin 框架中前端向后端传值的几种方式介绍

我将为您详细讲解 Gin 框架中前端向后端传值的几种方式&#xff0c;并给出相应的简单例子。Gin 是一个高性能的 Web 框架&#xff0c;用于构建后端服务。在 Web 应用程序中&#xff0c;前端通常需要向后端发送数据&#xff0c;以便后端能够进行处理。以下是几种常见的前端向后端…

【基于HTML5的网页设计及应用】——改变文字和背景颜色

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

了解 HTTP 请求的五个关键要素

一个成功的 HTTP 请求不仅仅意味着简单地发送一个请求并接收到响应。事实上&#xff0c;每个 HTTP 请求都需要具备五大要点&#xff0c;这些要点确保了请求的正确性、可靠性和用户体验。在本文中&#xff0c;我们将探讨这五大要点&#xff0c;即发送适当的请求、显示加载状态、…

FFplay使用滤镜添加字幕到现有视频显示

1.创建字幕文件4k.srt 4k.srt内容: 1 00:00:01.000 --> 00:00:30.000 日照香炉生紫烟2 00:00:31.000 --> 00:00:60.000 遥看瀑布挂前川3 00:01:01.000 --> 00:01:30.000 飞流直下三千尺4 00:01:31.000 --> 00:02:00.000 疑是银河落九天2.通过使用滤镜显示字幕在视…

HarmonyOS-鸿蒙系统概述

你了解鸿蒙系统吗&#xff1f; 你看好鸿蒙系统吗&#xff1f; 今年秋季即将推出的HarmonyOS Next 星河版热度空前&#xff0c;一起来了解一下吧。本文将从HarmonyOS 的应用场景、发展历程、架构、开发语言、开发工具、生态建设六个角度聊一聊个人的理解。 1、应用场景 鸿蒙…

react-面试题

一、组件基础 1. React 事件机制 <div onClick{this.handleClick.bind(this)}>点我</div> React并不是将click事件绑定到了div的真实DOM上&#xff0c;而是在document处监听了所有的事件&#xff0c;当事件发生并且冒泡到document处的时候&#xff0c;React将事…

浅谈C/C++的常量const、指针和引用问题

今天我们来探讨C/C中const、指针和引用的相关问题。这些概念是编程中的重要组成部分&#xff0c;它们的正确使用对于代码的可读性和可维护性至关重要。通过深入了解const的不可变性、指针的灵活性以及引用的简洁性&#xff0c;我们能够更好地掌握编程的精髓&#xff0c;并写出更…

GEE错误——Line 12: xxx.size is not a function(计算列表长度出现错误)

简介 这里我们再计算研究区面积的时候出现了一个错误,这里的问题是Line 12: points8.size is not a function 主要问题是xxx不是一个数组或者对象,无法调用size方法。这里的问题是我们要获取这个对象的时候出现了问题,也就说你给函数传输的并不是一个对象,而不知道是什么…

研究生总结

Note:本博客更多是关于自己的感悟&#xff0c;没有翻阅文件详细查证&#xff0c;如果存在错过&#xff0c;也请提出指正。 1. 半监督回归 相比于半监督分类&#xff0c;半监督回归相对冷门。回归和分类之间有着难以逾越的天谴&#xff0c;预测精度。分类中的类别是可数的&…

STM32的简单介绍

STM32是一种基于ARM Cortex-M内核的32位微控制器&#xff0c;由意法半导体公司开发和生产。STM32具有丰富的外设和功能&#xff0c;适用于各种应用场合&#xff0c;如工业控制、消费电子、物联网、人机交互等。STM32的优势包括低功耗、高性能、高可靠性、易于开发等。STM32的系…