在spring boot中添加使用mybatis 
                                                    
                        
                    
                    
  
                    
                    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
以下是完整的项目目录结构,重点标注了与 UserMapper 相关的文件位置:
src/
├── main/
│   ├── java/
│   │   └── com/
│   │       └── example/
│   │           ├── YourApplication.java  // 项目入口类(带@SpringBootApplication)
│   │           ├── entity/               // 实体类包
│   │           │   └── SysUser.java      // 用户实体类
│   │           ├── mapper/               // MyBatis Mapper接口包
│   │           │   └── UserMapper.java   // Mapper接口(定义查询方法)
│   │           ├── service/              // 服务层
│   │           │   └── UserDetailsServiceImpl.java  // 实现Spring Security的用户加载
│   │           └── config/               // 配置类包
│   │               └── SecurityConfig.java  // Spring Security配置类
│   └── resources/
│       ├── application.yml  // 项目配置文件(数据库、MyBatis等配置)
│       └── mybatis/
│           └── mapper/      // MyBatis XML映射文件存放目录
│               └── UserMapper.xml  // UserMapper的SQL实现
└── pom.xml  // Maven依赖配置文件二、逐个文件说明(附代码)
1. 入口类:YourApplication.java
项目启动入口,需添加 @MapperScan 注解扫描 mapper 包(让 Spring 识别 MyBatis 接口):
package com.example;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.mapper") // 扫描Mapper接口所在的包
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}2. 实体类:entity/SysUser.java
对应数据库 sys_user 表的实体:
package com.example.entity;
public class SysUser {
    private Long id;         // 对应数据库id字段
    private String username; // 用户名(登录账号)
    private String password; // 加密后的密码
    private Integer enabled; // 账号状态:1=启用,0=禁用
    // 必须添加getter和setter(MyBatis需要通过它们赋值)
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password; }
    public Integer getEnabled() { return enabled; }
    public void setEnabled(Integer enabled) { this.enabled = enabled; }
}- Mapper 接口:mapper/UserMapper.java 
 定义数据库查询方法(与 XML 映射文件对应):- package com.example.mapper; import com.example.entity.SysUser; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper // 标记为MyBatis映射接口(也可通过入口类@MapperScan替代) public interface UserMapper { /** * 根据用户名查询用户信息 * @param username 用户名 * @return 用户实体(包含id、password、enabled等) */ SysUser selectByUsername(@Param("username") String username); /** * 根据用户ID查询角色列表 * @param userId 用户ID * @return 角色名集合(如["ROLE_ADMIN", "ROLE_USER"]) */ List<String> selectRolesByUserId(@Param("userId") Long userId); }
4. MyBatis XML 映射:resources/mybatis/mapper/UserMapper.xml
实现 UserMapper 接口的 SQL 逻辑:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 根据用户名查询用户 -->
<!-- id必须和接口中的方法名一致,resultType指定返回的实体类 -->
<select id="selectByUsername" resultType="com.example.entity.SysUser">
    SELECT id, username, password, enabled
    FROM sys_user  -- 数据库表名
    WHERE username = #{username}  -- #{username}对应接口方法的@Param参数
</select>
<!-- 根据用户ID查询角色列表 -->
<!-- resultType指定返回的单个元素类型(这里是String) -->
<select id="selectRolesByUserId" resultType="java.lang.String">
    SELECT r.role_name  -- 角色名,需以ROLE_开头(如ROLE_ADMIN)
    FROM sys_role r
    INNER JOIN sys_user_role ur ON r.id = ur.role_id  -- 关联用户-角色表
    WHERE ur.user_id = #{userId}  -- #{userId}对应接口方法的@Param参数
</select>5. 配置文件:resources/application.yml
配置数据库连接和 MyBatis 路径:
# 服务器端口(可选,默认8080)
server:
  port: 8080
# 数据库配置(以MySQL为例)
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: 数据库用户名(如root)
    password: 数据库密码
# MyBatis配置
mybatis:
  # 告诉MyBatis去哪里找XML映射文件
  mapper-locations: classpath:mybatis/mapper/*.xml
  # 实体类的包路径(可选,配置后XML中resultType可简写类名)
  type-aliases-package: com.example.entity6. Maven 依赖:pom.xml
关键依赖(确保包含以下内容):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 父工程:Spring Boot默认配置 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.3</version> <!-- 版本可根据需要修改 -->
        <relativePath/>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>spring-security-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-security-demo</name>
    <properties>
        <java.version>17</java.version> <!-- JDK版本 -->
    </properties>
    <dependencies>
        <!-- Spring Web(提供HTTP接口支持) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring Security(安全框架) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!-- MyBatis(数据库访问) -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.2</version>
        </dependency>
        <!-- MySQL驱动 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- 测试依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- Spring Boot打包插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>三、核心逻辑梳理
- 用户登录时: 
 Spring Security 会调用- UserDetailsServiceImpl的- loadUserByUsername方法,该方法通过- UserMapper.selectByUsername查询数据库中的用户信息。
- 角色查询: 
 拿到用户信息后,再通过- UserMapper.selectRolesByUserId查询该用户的角色,最终转换为 Spring Security 可识别的权限信息。
- MyBatis 作用: - UserMapper接口定义查询方法,- UserMapper.xml实现具体 SQL,两者通过 命名空间 + 方法名 关联,Spring 会自动创建- UserMapper的实现类并注入到- UserDetailsServiceImpl中。
 \

本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号