6月15日笔记

SQLyog在安装时电脑的名不能是中文名不然会在Initializing database这部出错

1.微头条功能
登录 注册 发布 浏览 点赞 删除(用户)
2.全栈:前端 后端 数据库
3.JDBC 数据库连接
4.MySQL安装、建表、JDBC连接与注册功能-实现记录一、教学目标

  • 安装MySQL,创建数据库和user表。
  • 使用JDBC连接数据库,实现用户注册(PreparedStatement防止SQL注入)。

核心知识点(简要)

  • JDBC:Java连接数据库的标准API。
  • PreparedStatement:预编译SQL,防止注入,使用?占位符。
  • DriverManager:获取Connection对象。
  • executeUpdate():执行INSERT/UPDATE/DELETE,返回影响行数。

操作步骤

1.创建数据库和表

  • SQLyog左侧空白位置右键,新建数据库,名字叫:weitoutiao

    image-20260615094017571

    image-20260615094055646

  • 再新建查询,输入以下SQL脚本

    CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;-- 指定字符集为 utf8mb4
    
    USE weitoutiao;-- 进入微头条这个数据库
    
    CREATE TABLE `user` (-- 创建user表格存放用户信息
        `id` INT PRIMARY KEY AUTO_INCREMENT,-- id列:用户的唯一编号。INT是整数类型;PRIMARY KEY表示它是主键(相当于身份证号,绝对不能重复);自增,不用手动填编号
        `username` VARCHAR(50) NOT NULL UNIQUE,-- 字符不超过50;不能为空;不能重复
        `password` VARCHAR(100) NOT NULL,
        `role` VARCHAR(20) DEFAULT 'user',-- 默认是user
        `news_count` INT DEFAULT 0,
        `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP
    );
    

image-20260612212926734

image-20260612213049055

image-20260612213258227

2.用IDEA创建maven工程

image-20260612165125727

3. 创建Maven项目,添加MySQL驱动

pom.xml文件的</project>标签之上,添加如下依赖:

    <dependencies><!-- 【依赖管理区】这里用来声明当前项目需要用到哪些第三方工具包 -->
        <dependency><!-- 声明一个具体的依赖项-->
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId><!--JDBC驱动,连接数据库-->
            <version>8.0.33</version>
        </dependency>
    </dependencies>

添加完之后,点击maven的刷新(弹窗按钮也可),就不红了

image-20260612165931298

4.编写DBUtil(连接数据库工具类)

  • 右键java文件夹,创建java类

    image-20260612170201884

  • 输入:com.weitoutiao.util.DBUtil, 回车

    image-20260612170820221

  • 编写如下代码:

    package com.weitoutiao.util;// 声明这个工具类所在的包路径
    // 【导入依赖】引入 JDBC 操作数据库必须的核心接口和类
    import java.sql.Connection;// Connection 接口:代表与数据库的物理连接通道
    import java.sql.DriverManager;// DriverManager 类:用于管理数据库驱动并获取连接
    import java.sql.SQLException;// SQLException 类:处理数据库操作中可能出现的异常
    
    public class DBUtil {//【创建工具类】封装数据库操作的辅助类
        private static final String URL = "jdbc:mysql://localhost:3306/weitoutiao?useSSL=false&serverTimezone=Asia/Shanghai"; // 【配置连接参数】使用 private static final 修饰,表示这些是全局唯一且不可修改的常量
        private static final String USER = "root";//登录数据库的用户名
        private static final String PASSWORD = "root";//登录数据库的密码
    
        static { //【静态代码块】当这个类被加载到内存时,里面的代码只会执行一次
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");// 核心作用:加载并注册 MySQL 8.0+ 版本的驱动程序
            } catch (ClassNotFoundException e) {// 如果找不到这个驱动类,说明项目里没有引入 mysql-connector-java 依赖,打印错误信息
                e.printStackTrace();
            }
        }
    
        public static Connection getConnection() throws SQLException { //【获取连接方法】提供一个公开的静态方法,供外部业务代码(如 UserDao)直接调用
            return DriverManager.getConnection(URL, USER, PASSWORD);// 利用上面配置好的三要素(URL、账号、密码),向数据库服务器申请一个连接通道并返回
        }
    }
    

5. 编写User实体类

  • 右键java,创建User类

    image-20260612200653949

  • 编写如下代码:

    package com.weitoutiao.entity;// 【定义包名】声明这个实体类所在的包路径
    
    public class User {// 在实际开发中,它通常与数据库里的 user 表一一对应
        private Integer id;// 【主键ID】用户的唯一标识符。使用包装类 Integer
        private String username;
        private String password;
        private String role;
        private Integer newsCount;
        // 生成getter/setter(略)
    }
    

6. 编写UserDAO(数据访问层)实现注册

  • 右键com.weitoutiao包名,创建UserDA0

    image-20260612201050466

    image-20260612201526907

  • 编写如下代码:

    package com.weitoutiao.dao;// 【定义包名】声明这个类属于 dao (数据访问) 层,专门负责与数据库进行交互
    // 【导入依赖】引入用户实体类和刚才写的数据库工具类
    import com.weitoutiao.entity.User;
    import com.weitoutiao.util.DBUtil;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    // 【创建 DAO 类】UserDAO 专门负责处理 user 表的数据增删改查操作
    public class UserDAO {
        // 【注册方法】向数据库中插入一条新的用户记录
        public boolean register(String username, String password) {
             // SQL 语句:使用 ? 作为占位符,这是 PreparedStatement 的标准写法,可以有效防止 SQL 注入攻击
            String sql = "INSERT INTO user (username, password) VALUES (?, ?)";
            // 【核心逻辑】利用 try-with-resources 语法自动管理资源
            // 1. 调用 DBUtil 获取数据库连接
            // 2. 将 SQL 语句预编译成 PreparedStatement 对象
            try (Connection conn = DBUtil.getConnection();
                 PreparedStatement ps = conn.prepareStatement(sql)) {
                // 【参数赋值】给 SQL 中的两个 ? 占位符分别设置真实的用户名和密码
                ps.setString(1, username);
                ps.setString(2, password);
                return ps.executeUpdate() > 0; // 【执行并返回结果】executeUpdate() 用于执行 INSERT/UPDATE/DELETE 语句
            } catch (SQLException e) {
                e.printStackTrace();
                return false;
            }
        }
    }
    

7. 编写Main测试

  • 右键com.weitoutiao,创建Main

    image-20260612202149699

  • 编写Mian中代码:

    package com.weitoutiao;// 【定义包名】声明这个主类所在的包路径
    
    import com.weitoutiao.dao.UserDAO;// 【导入依赖】引入刚才写好的用户数据访问对象(DAO)
    
    public class Main {
        public static void main(String[] args) {
            UserDAO userDAO = new UserDAO();// 【实例化 DAO】创建一个 UserDAO 对象
            boolean success = userDAO.register("testuser", "123456");// 【调用注册方法】去数据库里插入一条测试数据
            System.out.println(success ? "注册成功" : "注册失败"); // 如果 success 为 true,输出 "注册成功";否则输出 "注册失败"
        }
    }
    

8.运行测试

  • 运行

    image-20260612202421614

  • 控制台打印:注册成功

    image-20260612202514293

  • 通过SQLyou查看数据库表中数据已经对应增加

    image-20260612202643199

    5.JDBC实现登录与新闻发布(含事务)一、教学目标

    • 实现登录查询(根据用户名密码查询用户)。
    • 实现发布新闻(插入news表,同时更新用户news_count),使用事务保证一致性。

    核心知识点(简要)

    • 事务:一组操作要么全部成功,要么全部失败。
    • setAutoCommit(false):关闭自动提交,开启事务。
    • commit()rollback():提交或回滚事务。
    • ResultSet:查询结果集,使用next()遍历。

    操作步骤

    1. 创建news

    • 打开SQLyog,选中weitout数据库,点+号,新建查询

      image-20260613155552170

    • 在新的询问中输入如下内容:

      CREATE TABLE `news` (-- 创建名为 news 的表
          `id` INT PRIMARY KEY AUTO_INCREMENT,-- 【主键】定义 id 字段,类型为整数,设为主键并开启自增
          `user_id` INT NOT NULL,--记录这条新闻是由哪个用户发布的,关联 user 表的 id
          `title` VARCHAR(200) NOT NULL, -- 【标题】
          `content` TEXT, -- 【正文】定义 content 字段,文本类型
          `publish_time` DATETIME DEFAULT CURRENT_TIMESTAMP,--【发布时间】定义 publish_time 字段,日期时间类型
          `view_count` INT DEFAULT 0,-- 【浏览量】默认为 0,后续可通过 UPDATE 语句累加
          FOREIGN KEY (`user_id`) REFERENCES `user`(`id`)-- 【外键约束】建立 user_id 与 user 表 id 之间的关联,确保发布的 user_id 必须在 user 表中真实存在
      );
      
    • 然后选中全部内容,点击运行

      image-20260613155801639

    • 点开weitoutiao数据库中的表,可以看到新增了一张名为news的表,再点击表数据,点击刷新,新的表就显示出来,表示news数据表已成功创建。

      image-20260613155955411

    2. 创建News实体类(包含id, userId, title, content, publishTime, viewCount)

    • 打开IDEA,继续在上个工程上修改,右键entity,新建java类,News类

      image-20260613161102146

      image-20260613161141458

    • News类中编写代码如下:

      package com.weitoutiao.entity;// 【包声明】表明该类属于 entity(实体)层
      
      import java.time.LocalDateTime;// 【导入包】引入 Java 8 的时间处理类,对应数据库中的 DATETIME 类型
      
      public class News {// News 实体类,对应数据库中的 news 表
          private Integer id; // 【主键】对应表中的 id 字段
          private Integer userId;// 【外键】对应表中的 user_id 字段,表示发布该新闻的用户ID
          private String title;// 存储新闻的简短标题
          private String content; // 存储新闻的详细内容
          private LocalDateTime publishTime;  //使用 LocalDateTime精确匹配数据库的DATETIME格式
          private Integer viewCount;// 统计该新闻被查看的次数
      
      }
      

    3. 在UserDAO中添加login方法

    • login方法如下:

      public User login(String username, String password) {
          String sql = "SELECT id, username, role, news_count FROM user WHERE username=? AND password=?";
          // 定义 SQL 查询语句:从 user 表中查找匹配的用户名和密码,并只查询需要的字段(id, username, role, news_count)
          try (Connection conn = DBUtil.getConnection();// 调用工具类获取数据库连接对象
               PreparedStatement ps = conn.prepareStatement(sql)) {// 预编译 SQL 语句,生成 PreparedStatement 对象
              ps.setString(1, username); // 设置 SQL 语句中第一个问号 (?) 的值为传入的 username 参数
              ps.setString(2, password);
              ResultSet rs = ps.executeQuery();// 执行 SQL 查询语句,并将结果存储在 ResultSet 结果集对象中
              if (rs.next()) {// 判断结果集中是否有数据(即是否找到了匹配的用户)
                  User user = new User();// 如果找到用户,实例化一个新的 User 对象用于封装数据
                  user.setId(rs.getInt("id"));// 从结果集中获取 "id" 字段的值,并设置到 user 对象的 id 属性中
                  user.setUsername(rs.getString("username"));
                  user.setRole(rs.getString("role"));
                  user.setNewsCount(rs.getInt("news_count"));
                  return user;// 将封装好数据的 user 对象返回给调用者,表示登录成功
              }
          } catch (SQLException e) {// 捕获在执行数据库操作过程中可能发生的 SQL 异常
              e.printStackTrace();// 在控制台打印异常的堆栈信息,方便开发者调试和排查错误
          }
          return null; //如果没有找到匹配的用户(if 条件不成立)or发生了异常,则返回null,表示登录失败
      }
      
    • UserDao类中,login方法添加的位置如下:

      image-20260613161644847

    • ResultSet会爆红,鼠标悬停之上,选择导入类

      image-20260613161744339

    • user的set方法还会爆红,这是因为User类的选择器没有配置,再返回到User实体类中添加

      image-20260613161947381

    • 在User实体类中的空白位置右键,选择生成,再选择Getter和Setter,生成set和get方法

      image-20260613162133296

      image-20260613164706811

    • 可以全选中,一次全部生成

      image-20260613162515279

    • 最后生成的方法如下所示:

      image-20260613162607697

    • 再看UserDao类中的set已经不红了。

    4. 创建NewsDAO实现发布新闻(事务)

    • 右键dao包名,新建NewsDAO

    • NewsDAO类中的代码如下:

      package com.weitoutiao.dao;// 【包声明】表明该类属于 dao(数据访问)层
      
      import com.weitoutiao.util.DBUtil;// 【导入工具类】引入自定义的数据库连接工具
      import java.sql.Connection;// 【导入类】数据库连接接口
      import java.sql.PreparedStatement;// 【导入类】预编译 SQL 语句接口
      import java.sql.SQLException;// 【导入异常】SQL 异常处理类
      
      public class NewsDAO {//新闻数据访问对象
          //发布新闻的方法
          public boolean publish(int userId, String title, String content) {
              //【定义 SQL】向 news 表中插入一条新记录,使用 ? 占位符防注入
              String insertSql = "INSERT INTO news (user_id, title, content) VALUES (?, ?, ?)";
              // 【定义 SQL】根据用户 id,将该用户的发帖总数 (news_count) 累加 1
              String updateSql = "UPDATE user SET news_count = news_count + 1 WHERE id = ?";
              Connection conn = null;
              PreparedStatement psInsert = null;
              PreparedStatement psUpdate = null;
              try {
                  conn = DBUtil.getConnection();// 【获取连接】通过工具类获取一个活跃的数据库连接
                  conn.setAutoCommit(false);  // 开启事务,关闭自动提交功能!这是保证数据一致性的关键一步
                  psInsert = conn.prepareStatement(insertSql);// 【准备插入语句】预编译第一条 SQL(插入新闻)
                  psInsert.setInt(1, userId);// 【设置参数】依次为占位符赋值:用户ID、标题、内容
                  psInsert.setString(2, title);
                  psInsert.setString(3, content);
                  psInsert.executeUpdate();// 【执行插入】将新闻写入数据库(此时尚未真正落盘)
                  psUpdate = conn.prepareStatement(updateSql);// 【准备更新语句】预编译第二条 SQL(增加用户发帖数)
                  psUpdate.setInt(1, userId);// 【设置参数】指定要更新的用户 ID
                  psUpdate.executeUpdate();// 【执行更新】增加发帖计数(同样尚未真正落盘)
                  conn.commit();  // 提交事务,两步操作都成功后,统一提交!让所有修改真正生效
                  return true; // 【返回结果】全部顺利执行,返回 true 表示发布成功
              } catch (SQLException e) {// 【捕获异常】如果上述任何一步发生错误(如插入成功但更新失败),进入此块
                 // 【回滚事务】检查连接是否存在,保证“插入新闻”和“更新用户发帖数”一致
                  if (conn != null) {
                      try { conn.rollback(); } catch (SQLException ex) { ex.printStackTrace(); }
                  }
                  e.printStackTrace();
                  return false;
              } finally {
                  try { if (psInsert != null) psInsert.close(); } catch (SQLException e) {}
                  try { if (psUpdate != null) psUpdate.close(); } catch (SQLException e) {}
                  try { if (conn != null) conn.close(); } catch (SQLException e) {}
              }
          }
      }
      

    5. 修改Main测试登录和发布新闻

    • 具体内容如下:

      package com.weitoutiao;// 【包声明】这是项目的根包,通常用于存放程序的启动类 Main
      
      import com.weitoutiao.dao.UserDAO;// 【导入 DAO 类】引入用户数据访问对象
      import com.weitoutiao.dao.NewsDAO;// 【导入 DAO 类】引入新闻数据访问对象
      import com.weitoutiao.entity.User;// 【导入实体类】引入 User 实体类,用于接收登录返回的数据
      
      public class Main {
          public static void main(String[] args) {
              UserDAO userDAO = new UserDAO();
              User user = userDAO.login("testuser", "123456");// 【调用登录方法】传入硬编码的用户名和密码进行验证
              if (user != null) {
                  System.out.println("登录成功,用户ID:" + user.getId());
                  NewsDAO newsDAO = new NewsDAO();
                  boolean published = newsDAO.publish(user.getId(), "我的第一条新闻", "内容");
                  System.out.println(published ? "发布成功" : "发布失败");
              } else {
                  System.out.println("登录失败");
              }
          }
      }
      

    6.运行测试

    • 控制台打印如下:

      image-20260613164903956

    • 打开SQLyog,查看news数据表如下:

      image-20260613165012998

6.SpringBoot项目创建 & 基础配置

教学目标

  • 创建SpringBoot 3.1.5项目,配置数据库连接和MyBatis-Plus。
  • 编写HelloController验证项目启动。

核心知识点(简要)

  • SpringBoot:自动配置,简化Spring应用开发。
  • application.yml:配置文件,使用YAML格式。
  • @RestController:标记控制器,返回JSON。
  • MyBatis-Plus:增强MyBatis,简化数据库操作。

操作步骤

1. 创建项目

  • 文件➡️新建➡️项目

    ![image-20260614091745501](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614091745501.png)

  • 配置如下:

    ![image-20260614101515785](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614101515785.png)

    配置完成后,点下一步

  • 先选一下SpringBoot的版本,用3.5.15,依赖选这3个:Spring Web、MySQL Driver、Lombok。

    ![image-20260614092611974](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614092611974.png)

    ![image-20260614092742327](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614092742327.png)

  • 选完之后,右侧会显示已添加的依赖,最后点击创建

    ![image-20260614092217308](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614092217308.png)

2. 添加MyBatis-Plus依赖(在pom.xml中):

  • 添加的内容:

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
        <version>3.5.5</version>
    </dependency><!--告别繁琐的 Connection、PreparedStatement-->
    
  • pom.xml中添加的位置如下,添加完之后点一下maven的刷新按钮,下载依赖,就不会红了。

    ![image-20260614093447711](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614093447711.png)

3. 配置application.yml

  • src/main/resources文件夹中,找到application.properties文件,重命名为application.yml

    ![image-20260614100928053](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614100928053.png)

  • 其中内容改为:

    #--JDBC:DBUtil
    # ======================== 服务器配置 ========================
    server:
      port: 8080 # 【端口号】指定当前 Web 应用启动时监听的端口为 8080
    # ======================== Spring 基础配置 ========================
    spring:
      application:
        name: WeiTouTiao-SpringBoot # 【应用名称】为当前项目命名,方便在日志或注册中心中识别
      datasource: # 【数据库连接 URL】指定 MySQL 数据库的地址、库名及连接参数
        url: jdbc:mysql://localhost:3306/weitoutiao? #本机 3306 端口下的 weitoutiao 数据库
        useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
        username: root # 【数据库账号】登录 MySQL 的用户名
        password: root # 【数据库密码】登录 MySQL 的密码
        driver-class-name: com.mysql.cj.jdbc.Driver
    # MyBatis-Plus 框架配置 
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
        map-underscore-to-camel-case: true
      global-config:
        db-config:
          id-type: auto
          # 【逻辑删除字段】指定表中用于标记“是否被删除”的字段名为 deleted
          logic-delete-field: deleted
          logic-delete-value: 1
          logic-not-delete-value: 0
    

4.编写HelloController

  • 右键com.weitoutiao包名,新建controller.HelloController

    ![image-20260614101839963](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614101839963.png)

    ![image-20260614102100065](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614102100065.png)

  • HelloController类中的代码如下:

    // 【包声明】表明该类属于 controller(控制)层,专门负责处理前端请求
    package com.weitoutiao.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;// 【导入注解】引入 GET 请求映射注解
    import org.springframework.web.bind.annotation.RestController;// 【导入注解】引入 REST 控制器注解
    // 【REST 控制器注解】这是一个组合注解(相当于 @Controller + @ResponseBody)
                    // 作用1:告诉 Spring 这是一个处理 Web 请求的控制器类,并将其注册到容器中
                    // 作用2:将该类中所有方法的返回值直接作为 HTTP 响应体(通常是 JSON 或纯文本)返回给前端
    @RestController
    public class HelloController {
        @GetMapping("/hello")// 【GET 请求映射】限定该方法只处理 GET 类型的 HTTP 请求
        public String hello() { // 当浏览器或前端访问 http://localhost:8080/hello 时,就会触发这个方法
            return "微头条后端启动成功!";// 【返回响应】将字符串直接写入 HTTP 响应体中
        }
    }
    

5.运行测试

  • 找到主程序,点击运行

    ![image-20260614102421899](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614102421899.png)

  • 访问:http://localhost:8080/hello

  • 可以看到主程序的返回值,说明程序运行成功。

    ![image-20260614102538377](D:\流程\课次23:SpringBoot项目创建 & 基础配置.assets\image-20260614102538377.png)

7.实体类与Mapper一、教学目标

  • 创建UserNews实体类,使用Lombok和MyBatis-Plus注解。
  • 创建UserMapperNewsMapper,继承BaseMapper
  • 测试基础查询。

核心知识点(简要)

  • @TableName:指定数据库表名。
  • @TableId:指定主键,IdType.AUTO表示自增。
  • @TableField(fill):自动填充。
  • @TableLogic:逻辑删除。
  • BaseMapper:提供通用CRUD方法。

操作步骤

本课次的操作是在上次课(课次23)的工程基础上继续操作。

1. 创建实体User

  • 右键com.weitoutiao包名,创建entity.User

    image-20260614110250319

    image-20260614110324836

  • 类中内容如下:

    package com.weitoutiao.entity;
    
    import com.baomidou.mybatisplus.annotation.*;
    import lombok.Data;
    import java.time.LocalDateTime;
    
    @Data
    @TableName("user")
    public class User {
        @TableId(type = IdType.AUTO)
        private Integer id;
        private String username;
        private String password;
        private String role;
        private Integer newsCount;
        @TableField(fill = FieldFill.INSERT)
        private LocalDateTime createTime;
    }
    

2. 创建实体News

  • 同样的操作,再创建News类

  • News类中的内容如下:

    package com.weitoutiao.entity;
    
    import com.baomidou.mybatisplus.annotation.*;
    import lombok.Data;
    import java.time.LocalDateTime;
    
    @Data
    @TableName("news")
    public class News {
        @TableId(type = IdType.AUTO)
        private Integer id;
        private Integer userId;
        private String title;
        private String content;
        private LocalDateTime publishTime;
        private Integer viewCount;
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private LocalDateTime updateTime;
        @TableLogic
        private Integer deleted;
    }
    

3. 创建Mapper接口

  • 右键com.weitoutiao,创建一个名为mapper的软件包

    image-20260614110923741

    image-20260614110940880

  • 右键mapper文件夹,新建UserMapper接口

    image-20260614111047237

    image-20260614111205310

  • UserMapper接口内容如下:

    package com.weitoutiao.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.weitoutiao.entity.User;
    import org.apache.ibatis.annotations.Mapper;
    
    @Mapper
    public interface UserMapper extends BaseMapper<User> {
    }
    
  • 同样的操作创建NewsMapper接口,内容如下:

    package com.weitoutiao.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.weitoutiao.entity.News;
    import org.apache.ibatis.annotations.Mapper;
    
    @Mapper
    public interface NewsMapper extends BaseMapper<News> {
    }
    

4. 在启动类添加@MapperScan

  • 更改启动类WeiTouTiaoSpringBootApplication中的内容如下:

    package com.weitoutiao;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @MapperScan("com.weitoutiao.mapper")
    public class WeiTouTiaoSpringBootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(WeiTouTiaoSpringBootApplication.class, args);
        }
    
    }
    

5. 编写测试类(可选)

  • 右键test文件夹中的com.weitoutiao,创建一个测试类testSelect

    image-20260614112256971

    image-20260614112424205

  • 内容如下:

    package com.weitoutiao;
    
    import com.weitoutiao.entity.User;
    import com.weitoutiao.mapper.UserMapper;
    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
    class UserMapperTest {
        @Autowired
        private UserMapper userMapper;
        @Test
        void testSelect() {
            List<User> users = userMapper.selectList(null);
            users.forEach(System.out::println);
        }
    }
    
  • 点击运行testSelect

    image-20260614112528584

  • 运行结果,可以查到数据库中所有的user信息

    image-20260614113346713

posted on 2026-06-30 21:48  毋凶  阅读(4)  评论(0)    收藏  举报