Lecture02-快速入门-环境搭建与第一个查询

文章目录

    [toc]

    单词词性音标含义
    Startern./ˈstɑːtə(r)/启动器(Spring Boot 预配置的依赖集合,mybatis-plus-spring-boot3-starter 导入后自动完成 MP 与 Spring Boot 的整合)
    Mappern./ˈmæpə(r)/映射器(Mapper 接口负责声明数据访问方法,MyBatis-Plus 中继承 BaseMapper 即可获得全部单表方法)
    Configurationn./kənˌfɪɡəˈreɪʃn/配置(application.properties 中通过配置项控制框架行为)
    Logn./lɒɡ/日志(配置日志输出后,控制台会打印框架自动生成的 SQL,方便我们观察)

    Lecture02-快速入门-环境搭建与第一个查询

    一、功能目标

    搭建一个 Spring Boot 工程,集成 MyBatis-Plus,查询 t_emp 表中的全部员工数据,并在控制台打印。


    二、准备工作

    执行下面的建表语句:

    如果上一阶段 JdbcTemplate 课程的 t_emp 表已经存在,可以跳过建表,直接执行「插入测试数据」。

    -- 创建员工表
    CREATE TABLE t_emp (
        emp_id       INT PRIMARY KEY AUTO_INCREMENT COMMENT '员工ID,主键,自增',
        emp_no       VARCHAR(20)  NOT NULL COMMENT '员工编号',
        emp_name     VARCHAR(50)  NOT NULL COMMENT '员工姓名',
        emp_salary   DECIMAL(10,2) COMMENT '员工工资',
        emp_birthday DATE         COMMENT '出生日期',
        phone_num    VARCHAR(20)  COMMENT '手机号',
        dept_id      INT          COMMENT '部门ID'
    ) COMMENT '员工表';
    

    插入测试数据:

    INSERT INTO t_emp (emp_no, emp_name, emp_salary, emp_birthday, phone_num, dept_id) VALUES
    ('No.10001', '张三', 8000.00, '2000-01-15', '13511110001', 1),
    ('No.10002', '李四', 12000.00, '1998-05-20', '13511110002', 1),
    ('No.10003', '王五', 6000.00, '2002-09-08', '13511110003', 2),
    ('No.10004', '赵六', 15000.00, '1995-11-30', '13511110004', 2);
    

    三、创建工程

    1、创建普通 Maven module

    和之前 Spring 课程的工程创建方式一样:在 IDEA 中创建普通 Maven 模块,命名如 module-mp-demo。


    2、配置 pom.xml

    ①继承 Spring Boot 父工程

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.12</version>
        <relativePath/>
    </parent>
    

    ②导入依赖

    <dependencies>
        <!-- MyBatis-Plus 整合 Spring Boot 3 的启动器(核心依赖) -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>3.5.17</version>
        </dependency>
    
        <!-- MySQL 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </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>
    </dependencies>
    

    版本说明:Spring Boot 3.x 必须使用 mybatis-plus-spring-boot3-starter(3.5.x 系列);Spring Boot 2.x 才用 mybatis-plus-boot-starter,不要搞混。


    3、创建主启动类

    package com.atguigu.mp;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ModuleMpApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ModuleMpApplication.class, args);
        }
    
    }
    

    4、配置 application.properties

    # 应用名称
    spring.application.name=module-mp-demo
    
    # ===== 数据源配置(连接信息与 JdbcTemplate 课程一致)=====
    spring.datasource.username=atguigu
    spring.datasource.password=atguigu
    spring.datasource.url=jdbc:mysql://192.168.100.100/db_hr
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    # ===== MyBatis-Plus 配置 =====
    # 把框架自动生成的 SQL 打印到控制台,方便我们观察学习
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    

    log-impl 是学习阶段必须开启的配置:每个方法调用后,控制台都会打印它自动生成的 SQL,我们能直观看到「一行代码背后发生了什么」。


    四、编写代码

    1、创建实体类 Employee

    实体类与表 t_emp 对应,一个对象对应表中一行数据。

    package com.atguigu.mp.entity;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import lombok.Data;
    
    import java.math.BigDecimal;
    import java.util.Date;
    
    @Data
    @TableName("t_emp")   // 指定实体类对应的数据库表名
    public class Employee {
    
        @TableId(type = IdType.AUTO)   // 主键,数据库自增
        private Integer empId;
    
        private String empNo;
    
        private String empName;
    
        private BigDecimal empSalary;
    
        private Date empBirthday;
    
        private String phoneNum;
    
        private Integer deptId;
    
    }
    

    字段映射规则(本教程默认规则,第 3 章详解):

    • 类名 Employee → 表名:通过 @TableName("t_emp") 显式指定
    • 属性 empId → 列名 emp_id:驼峰命名自动转下划线,框架自动完成

    2、创建 Mapper 接口

    package com.atguigu.mp.mapper;
    
    import com.atguigu.mp.entity.Employee;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import org.apache.ibatis.annotations.Mapper;
    
    @Mapper  // 交给 MyBatis-Plus 扫描,放入 IoC 容器
    public interface EmployeeMapper extends BaseMapper<Employee> {
    
        // 什么都不用写!继承 BaseMapper 后,单表增删改查方法全部可用
    
    }
    
    • BaseMapper<Employee> 泛型指定操作哪张表对应的实体
    • 接口中不用写任何方法,单表增删改查方法由框架提供(第 4 章详细讲解)
    • 注意:由于我们需要让 Mybatis 来负责创建 Mapper 接口的实现类对象并把它放入 IoC 容器,所以必须使用 Mybatis 提供的 @Mapper;此时就不能使用 @Repository 了。

    3、编写测试类

    创建测试类,位置要求:src/test/java 下,主启动类所在包或子包。

    package com.atguigu.mp;
    
    import com.atguigu.mp.entity.Employee;
    import com.atguigu.mp.mapper.EmployeeMapper;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import java.util.List;
    
    @SpringBootTest
    public class EmployeeMapperTest {
    
        @Autowired
        private EmployeeMapper employeeMapper;
    
        @Test
        public void testSelectList() {
            // 查询全部员工:参数 null 表示不带任何查询条件
            List<Employee> employeeList = employeeMapper.selectList(null);
    
            for (Employee employee : employeeList) {
                System.out.println("employee = " + employee);
            }
        }
    
    }
    

    五、运行测试

    运行 testSelectList 测试方法,观察控制台输出:

    1、MyBatis-Plus 自动生成的 SQL

    ==>  Preparing: SELECT emp_id,emp_no,emp_name,emp_salary,emp_birthday,phone_num,dept_id FROM t_emp
    ==> Parameters:
    <==    Columns: emp_id, emp_no, emp_name, emp_salary, emp_birthday, phone_num, dept_id
    <==        Row: 1, No.10001, 张三, 8000.00, 2000-01-15, 13511110001, 1
    <==        Row: 2, No.10002, 李四, 12000.00, 1998-05-20, 13511110002, 1
    <==        Row: 3, No.10003, 王五, 6000.00, 2002-09-08, 13511110003, 2
    <==        Row: 4, No.10004, 赵六, 15000.00, 1995-11-30, 13511110004, 2
    <==      Total: 4
    

    2、程序打印的结果

    employee = Employee(empId=1, empNo=No.10001, empName=张三, empSalary=8000.00, empBirthday=2000-01-15, phoneNum=13511110001, deptId=1)
    employee = Employee(empId=2, empNo=No.10002, empName=李四, empSalary=12000.00, empBirthday=1998-05-20, phoneNum=13511110002, deptId=1)
    employee = Employee(empId=3, empNo=No.10003, empName=王五, empSalary=6000.00, empBirthday=2002-09-08, phoneNum=13511110003, deptId=2)
    employee = Employee(empId=4, empNo=No.10004, empName=赵六, empSalary=15000.00, empBirthday=1995-11-30, phoneNum=13511110004, deptId=2)
    

    观察要点:

    • SELECT 语句的列名是框架根据实体属性自动生成的:empId → emp_id
    • 查询结果的列又自动封装回了实体对象的属性
    • 我们只写了 employeeMapper.selectList(null) 一行代码

    六、图解:一次查询的完整流程

    一次 selectList 查询的完整流程

    流程说明:

    1. 测试类调用 employeeMapper.selectList(null)
    2. EmployeeMapper 是继承 BaseMapper 的接口,方法由框架动态实现
    3. MyBatis-Plus 根据实体类字段和注解自动生成 SQL
    4. 通过 JDBC 驱动连接数据库执行 SQL(连接信息来自 application.properties)
    5. 数据库返回结果集,框架把每一行封装成 Employee 对象,汇总成 List<Employee> 返回

    七、常见问题

    问题原因与解决
    启动报错 Invalid value of statement / factoryBeanObjectTypemybatis-plus-spring-boot3-starter 版本过低,升级到 3.5.9+(本教程 3.5.17)
    查询报 Table 'db_hr.employee' doesn't exist实体类没有加 @TableName("t_emp"),框架默认按类名找表
    控制台不打印 SQL检查 mybatis-plus.configuration.log-impl 配置是否写对
    连不上数据库检查 url / 用户名 / 密码是否与课程环境一致
    @Mapper 注解报红确认已导入 mybatis-plus-spring-boot3-starter 依赖

    八、本章小结

    • 集成步骤:导入依赖 → 配置数据源 → 创建实体类 → 创建 Mapper 接口
    • 实体类用 @TableName 指定表名,属性驼峰自动映射列名
    • Mapper 接口继承 BaseMapper<T>,方法开箱即用
    • 开启 log-impl 配置,可以在控制台看到框架自动生成的 SQL

    下一章我们学习实体类与表的映射规则、常用注解。

    end