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

文章目录

1.整合MyBatis

1.需求分析
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', '[email protected]', '男', '牛魔王', 5000.88);
insert into monster values(null, 10, '2011-11-11', '[email protected]', '女', '白骨精', 2000.00);
3.数据库环境配置
1.新建maven项目
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());
    }
}
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());
    }
}
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" ?> select * from monster where id = #{id}

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);
    }
}
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);
    }
}
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.测试
6.解决时间问题
7.完整文件目录

2.整合MyBatis-Plus

1.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`)
);
SELECT * FROM `monster`;
INSERT INTO monster VALUES(NULL, 20, '2000-11-11', '[email protected]', '男', ' 蝎 子 精 ',
15000.88);
INSERT INTO monster VALUES(NULL, 10, '2011-11-11', '[email protected]', '女', ' 玉 兔 精 ',
18000.88);
3.数据库环境配置
1.创建maven项目
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);
    }
}
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);
    }
}
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);
    }
}
4.细节说明
  • 简单来说就是MonsterServiceImpl只需要实现MonsterService接口的方法
  • 可以调用IService接口的方法,也可以调用MonsterService接口的方法
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;
    }
}
7.细节说明
1.@MapperScan 扫描包下的所有Mapper
启动类配置注解
2.@TableName bean的类名与表名不一致时使用
3.MyBatis引入了哪些依赖
8.MyBatisX快速开发
1.安装插件
2.使用方式
1.挑一个带小鸟的方法
2.直接alt + Enter
3.生成sql语句
4.查看生成的方法
5.点击左边的小鸟就可以直接跳转到指定方法或者xml
9.完整文件目录
10.MyBatis-Plus小结
相关推荐
跟着珅聪学java1 小时前
spring boot +Elment UI 上传文件教程
java·spring boot·后端·ui·elementui·vue
我命由我123452 小时前
Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)
java·开发语言·jvm·spring boot·spring·java-ee·logback
战族狼魂5 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
用键盘当武器的秋刀鱼8 小时前
springBoot统一响应类型3.5.1版本
java·spring boot·后端
小李同学_LHY9 小时前
三.微服务架构中的精妙设计:服务注册/服务发现-Eureka
java·spring boot·spring·springcloud
爱喝醋的雷达11 小时前
Spring SpringBoot 细节总结
java·spring boot·spring
嘵奇13 小时前
深入解析 Spring Boot 测试核心注解
java·spring boot·后端
兢兢业业的小白鼠13 小时前
Java高级JVM知识点记录,内存结构,垃圾回收,类文件结构,类加载器
java·开发语言·jvm·tomcat
技术liul14 小时前
解决Spring Boot Configuration Annotation Processor not configured
java·spring boot·后端
chushiyunen14 小时前
tomcat使用笔记、启动失败但是未打印日志
java·笔记·tomcat