Browse Source

mybatis案例-rbac

WanJL 1 week ago
parent
commit
919a123633

+ 46 - 0
rbac01/pom.xml

@@ -0,0 +1,46 @@
+<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.sf</groupId>
+    <artifactId>rbac01</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <!--用来指定要依赖的外部库坐标-->
+    <dependencies>
+        <!--指定连接MySQL的依赖库坐标-->
+        <!--引入MySQL的依赖-->
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+            <version>8.0.33</version>
+        </dependency>
+        <!--引入mybatis的依赖-->
+        <dependency>
+            <groupId>org.mybatis</groupId>
+            <artifactId>mybatis</artifactId>
+            <version>3.5.7</version>
+        </dependency>
+        <!--引入Lombok依赖-->
+        <!--Lombok库的作用是可以帮我们省去手写构造方法、get set toString等方法,只需要添加3个注解,自动帮我们生成-->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.26</version>
+        </dependency>
+        <!--引入单元测试Junit依赖-->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>

+ 28 - 0
rbac01/src/main/java/com/sf/entity/SysMenu.java

@@ -0,0 +1,28 @@
+package com.sf.entity;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SysMenu
+ * @description
+ * @create 2025/11/16
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysMenu {
+    private Integer menuId;
+    private String menuName;
+    private Integer parentId;
+    private String url;
+    private String menuType;
+    private Integer sort;
+    private LocalDateTime createTime;
+}

+ 32 - 0
rbac01/src/main/java/com/sf/entity/SysRole.java

@@ -0,0 +1,32 @@
+package com.sf.entity;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SysRole
+ * @description
+ * @create 2025/11/16
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysRole {
+    private Integer roleId;
+    private String roleName;
+    private String roleCode;
+    private String description;
+    private LocalDateTime createTime;
+    /**
+     * 多对多:一个角色包含多个菜单
+     */
+    private List<SysMenu>  menuList;
+    private List<SysUser>  userList;
+}

+ 34 - 0
rbac01/src/main/java/com/sf/entity/SysUser.java

@@ -0,0 +1,34 @@
+package com.sf.entity;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SysUser
+ * @description
+ * @create 2025/11/16
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysUser {
+    private Integer userId;
+    private String username;
+    private String password;
+    private Integer status;
+    private LocalDateTime createTime;
+    /**
+     * 一对一:用户包含一个详情
+     */
+    private SysUserInfo userInfo;
+    /**
+     * 多对一:用户属于一个角色
+     */
+    private SysRole role;
+}

+ 28 - 0
rbac01/src/main/java/com/sf/entity/SysUserInfo.java

@@ -0,0 +1,28 @@
+package com.sf.entity;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SysUserInfo
+ * @description
+ * @create 2025/11/16
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysUserInfo {
+    private Integer infoId;
+    private Integer userId;
+    private String realName;
+    private String phone;
+    private String email;
+    private String gender;
+    private String address;
+}

+ 35 - 0
rbac01/src/main/java/com/sf/mapper/SysRoleMapper.java

@@ -0,0 +1,35 @@
+package com.sf.mapper;
+
+
+import com.sf.entity.SysRole;
+
+import java.util.List;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SysRoleMapper
+ * @description
+ * @create 2025/11/16
+ */
+public interface SysRoleMapper {
+    /**
+     * 查询所有角色信息,以及该角色下的用户列表
+     * @return
+     */
+    List<SysRole> findAll();
+
+    /**
+     * 根据id查询角色信息,以及该角色下的用户列表
+     * @param id
+     * @return
+     */
+    SysRole findById(Integer id);
+
+    /**
+     * 多对多查询,查询角色以及其关联的菜单
+     * @param roleId
+     * @return
+     */
+    SysRole findRoleWithMenus(Integer roleId);
+}

+ 54 - 0
rbac01/src/main/java/com/sf/mapper/SysUserInfoMapper.java

@@ -0,0 +1,54 @@
+package com.sf.mapper;
+
+
+import com.sf.entity.SysUserInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SysUserInfoMapper
+ * @description
+ * @create 2025/11/16
+ */
+public interface SysUserInfoMapper {
+    /**
+     * 根据用户的真实姓名进行模糊查询
+     * @param realName
+     * @return
+     */
+    List<SysUserInfo> findByName1(String realName);
+
+    List<SysUserInfo> findByName2(String realName);
+
+    List<SysUserInfo> findByName3(String realName);
+
+    List<SysUserInfo> findByName4(String realName);
+
+    List<SysUserInfo> findByName5(String realName);
+
+    /**
+     * 根据集合中的id,查询多条数据
+     * @param ids
+     * @return
+     */
+    List<SysUserInfo> findByIds(@Param("ids")List<Integer> ids);
+
+    /**
+     *
+     * @param start
+     * @param end
+     * @return
+     */
+    List<SysUserInfo> findByIds2(@Param("start") Integer start, @Param("end") Integer end);
+    /*
+        @Param() 注解的作用是给参数命名,这个命名是让mybatis的映射文件能够根据名称找到正确的参数值,
+        然后正确的把参数传入到SQL语句中
+            |-如果Mapper接口的某个方法中有多个参数,就需要使用@Param进行命名
+            |-方法的参数需要取别名
+            |-配置文件xml中如果使用${}进行参数传递的时候
+            |-动态SQL中使用了参数作为变量
+     */
+}

+ 38 - 0
rbac01/src/main/java/com/sf/mapper/SysUserMapper.java

@@ -0,0 +1,38 @@
+package com.sf.mapper;
+
+
+import com.sf.entity.SysUser;
+
+import java.util.List;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SysUserMapper
+ * @description
+ * @create 2025/11/16
+ */
+public interface SysUserMapper {
+    /**
+     * 查询所有用户信息,包含用户详情信息
+     * @return
+     */
+    List<SysUser> findAll();
+
+    /**
+     * 根据id查询用户信息,包含用户详情信息
+     * @param userId
+     * @return
+     */
+    SysUser findById(Integer userId);
+
+    /**
+     * 一对多+一对一  查询用户、用户详情、所属角色
+     * @param userId
+     * @return
+     */
+    SysUser findUserWithInfoAndRole(Integer userId);
+
+
+
+}

+ 55 - 0
rbac01/src/main/java/com/sf/util/SqlSessionFactoryUtils.java

@@ -0,0 +1,55 @@
+package com.sf.util;
+
+
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SqlSessionFactoryUtils
+ * @description 用来获取SqlSessionFactory的工具类
+ * @create 2025/10/26
+ */
+public class SqlSessionFactoryUtils {
+    private static SqlSessionFactory sqlSessionFactory;
+
+    static{
+        String resource = "mybatis-config.xml";
+        try {
+            InputStream inputStream = Resources.getResourceAsStream(resource);
+            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+    /**
+     * 获取Sql会话工厂
+     * @return
+     */
+    public static SqlSessionFactory getSqlSessionFactory(){
+        return sqlSessionFactory;
+    }
+
+    /**
+     * 获取Sql会话  自动提交事务
+     * @param autoCommit
+     * @return
+     */
+    public static SqlSession getSqlSession(boolean autoCommit){
+        return getSqlSessionFactory().openSession(autoCommit);
+    }
+
+    /**
+     * 获取Sql会话,手动提交事务
+     * @return
+     */
+    public static SqlSession getSqlSession(){
+        return getSqlSessionFactory().openSession();
+    }
+}

+ 75 - 0
rbac01/src/main/resources/com/sf/mapper/SysRoleMapper.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.sf.mapper.SysRoleMapper">
+
+    <resultMap id="roleAndUsersMap" type="sysRole">
+        <id property="roleId" column="role_id"/>
+        <result property="roleName" column="role_name"/>
+        <!-- 一对多关联用户(collection标签) -->
+        <collection property="userList" ofType="sysUser">
+            <id property="userId" column="user_id"/>
+            <result property="username" column="username"/>
+            <result property="status" column="status"/>
+            <!-- 嵌套一对一关联用户详情 -->
+            <association property="userInfo" javaType="sysUserInfo">
+                <result property="realName" column="real_name"/>
+                <result property="phone" column="phone"/>
+            </association>
+        </collection>
+    </resultMap>
+
+    <sql id="roleAndUserList">
+        SELECT r.*,u.*
+        FROM sys_role r
+        LEFT JOIN sys_user u
+        ON r.role_id=u.role_id
+    </sql>
+    <select id="findAll" resultMap="roleAndUsersMap">
+        <include refid="roleAndUserList"/>
+    </select>
+
+    <select id="selectRoleWithUsers" resultMap="roleWithUsersMap">
+        SELECT
+            r.*,
+            u.user_id, u.username, u.status,
+            i.real_name, i.phone
+        FROM sys_role r
+                 LEFT JOIN sys_user u ON r.role_id = u.role_id
+                 LEFT JOIN sys_user_info i ON u.user_id = i.user_id
+        WHERE r.role_id = #{roleId}
+    </select>
+
+    <select id="findById" resultMap="roleAndUsersMap" parameterType="integer">
+        <include refid="roleAndUserList"/>
+        <where>
+            r.role_id=#{id}
+        </where>
+    </select>
+
+    <select id="findRoleWithMenus" resultMap="roleWithMenusMap">
+        SELECT r.*,m.*
+        FROM sys_role r
+                 LEFT JOIN sys_role_menu rm ON r.role_id=rm.role_id
+                 LEFT JOIN sys_menu m ON m.menu_id=rm.menu_id
+        WHERE r.role_id=1
+    </select>
+    <resultMap id="roleWithMenusMap" type="sysRole">
+        <id column="role_id" property="roleId"/>
+        <result column="role_name" property="roleName"/>
+        <result column="role_code" property="roleCode"/>
+        <result column="description" property="description"/>
+        <result column="create_time" property="createTime"/>
+        <collection property="menuList" ofType="sysMenu">
+            <id column="menu_id" property="menuId"/>
+            <result column="menu_name" property="menuName"/>
+            <result column="parent_id" property="parentId"/>
+            <result column="url" property="url"/>
+            <result column="menu_type" property="menuType"/>
+            <result column="sort" property="sort"/>
+            <result column="create_time" property="createTime"/>
+        </collection>
+    </resultMap>
+</mapper>

+ 71 - 0
rbac01/src/main/resources/com/sf/mapper/SysUserInfoMapper.xml

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.sf.mapper.SysUserInfoMapper">
+    <!--在SQL语句中添加%通配符-->
+
+
+    <select id="findByName1" resultType="com.sf.entity.SysUserInfo">
+        SELECT *
+        FROM sys_user_info
+        WHERE real_name LIKE #{realName}
+    </select>
+    <!--${} 是一种拼接字符串的形式,有安全风险, 可能会造成SQL注入-->
+    <select id="findByName2" resultType="com.sf.entity.SysUserInfo">
+        SELECT *
+        FROM sys_user_info
+        WHERE real_name LIKE '${realName}'
+    </select>
+    <!--CONCAT('%',#{realName},'%') 可以避免SQL注入,同时可以把%通配符放到sql语句中,不用每次测试的时候添加。
+        最推荐
+    -->
+    <select id="findByName3" resultType="com.sf.entity.SysUserInfo">
+        SELECT *
+        FROM sys_user_info
+        WHERE real_name LIKE CONCAT('%',#{realName},'%')
+    </select>
+
+    <!--CONCAT('%',${realName},'%') 可以避免SQL注入,同时可以把%通配符放到sql语句中,不用每次测试的时候添加。-->
+    <select id="findByName4" resultType="com.sf.entity.SysUserInfo">
+        SELECT *
+        FROM sys_user_info
+        WHERE real_name LIKE CONCAT('%',${realName},'%')
+    </select>
+    <!--
+        使用双引号将%通配符括起来,可以不适用CONCAT函数
+    -->
+    <select id="findByName5" resultType="com.sf.entity.SysUserInfo">
+        SELECT *
+        FROM sys_user_info
+        WHERE real_name LIKE "%"#{realName}"%"
+    </select>
+
+    <select id="findByIds" resultType="com.sf.entity.SysUserInfo">
+        SELECT *
+        FROM sys_user_info
+        WHERE info_id IN
+        <foreach collection="list" item="id" index="i" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+    <select id="findByIds2" resultType="com.sf.entity.SysUserInfo">
+        SELECT * FROM sys_user_info
+        WHERE info_id BETWEEN #{start}	AND #{end}
+    </select>
+
+    <!--
+        ${}和#{}的区别:
+            编译过程中:
+                ${} 先编译再执行,有SQL注入的风险
+                #{} 是占位符,先进行预编译,再将值传入,最后执行
+            是否自动加引号:
+                ${}:对应的变量不会自动添加单引号
+                #{}:对应的变量会自动添加单引号
+            安全性:
+                ${}:不能防止SQL注入
+                #{}:能防止SQL注入
+    -->
+
+</mapper>

+ 62 - 0
rbac01/src/main/resources/com/sf/mapper/SysUserMapper.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.sf.mapper.SysUserMapper">
+    <!--以map形式返回的结果-->
+    <resultMap id="UserAndInfoMap" type="sysUser">
+        <id column="user_id" property="userId"/>
+        <result column="username" property="username"/>
+        <result column="password" property="password"/>
+        <result column="status" property="status"/>
+        <result column="create_time" property="createTime"/>
+        <association property="userInfo" javaType="sysUserInfo">
+            <id column="info_id" property="infoId"/>
+            <result column="real_name" property="realName"/>
+            <result column="user_id" property="userId"/>
+            <result column="phone" property="phone"/>
+            <result column="email" property="email"/>
+            <result column="gender" property="gender"/>
+            <result column="address" property="address"/>
+        </association>
+    </resultMap>
+
+    <!--sql语句片段-->
+    <sql id="findUserAndInfo">
+        SELECT u.*,ui.*
+        FROM sys_user u
+        LEFT JOIN sys_user_info ui
+        ON u.user_id=ui.user_id
+    </sql>
+
+    <select id="findAll" resultMap="UserAndInfoMap">
+        /*引入sql语句片段*/
+        <include refid="findUserAndInfo"/>
+    </select>
+
+    <select id="findById" resultMap="UserAndInfoMap" parameterType="integer">
+        <include refid="findUserAndInfo"/>
+        /*添加条件*/
+        <where>
+            u.user_id=#{userId}
+        </where>
+    </select>
+
+    <resultMap id="userWithInfoAndRoleMap" type="sysUser" extends="UserAndInfoMap">
+        <association property="role" javaType="sysRole">
+            <id column="role_id" property="roleId"/>
+            <result column="role_name" property="roleName"/>
+            <result column="role_code" property="roleCode"/>
+            <result column="description" property="description"/>
+            <result column="create_time" property="createTime"/>
+        </association>
+    </resultMap>
+    <select id="findUserWithInfoAndRole" resultMap="userWithInfoAndRoleMap" parameterType="integer">
+        SELECT u.*,ui.*,r.*
+        FROM sys_user u
+        LEFT JOIN sys_user_info ui ON u.user_id=ui.user_id
+        LEFT JOIN sys_role r ON u.role_id=r.role_id
+        WHERE u.user_id=#{userId}
+    </select>
+</mapper>

+ 43 - 0
rbac01/src/main/resources/mybatis-config.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--xml的标准是:版本是1.0,编码格式:UTF-8-->
+
+<!--mybatis的核心配置的DTD约束-->
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<!--configuration标签,mybatis核心配置文件中的核心根标签-->
+<configuration>
+    <settings>
+        <!-- 开启下划线转驼峰自动映射(如user_name → userName) -->
+        <setting name="mapUnderscoreToCamelCase" value="true"/>
+    </settings>
+
+    <!--设置类型的别名-->
+    <typeAliases>
+        <!--给指定包下的所有的类起别名,默认的起别名方式,就是类名改为全小写-->
+        <package name="com.sf.entity"/>
+    </typeAliases>
+
+    <!--配置数据库环境的标签-->
+    <!--可以通过切换default的值改变数据库配置-->
+    <environments default="d01">
+        <!--一个关于数据库的配置信息-->
+        <environment id="d01">
+            <!--事务管理器,type=JDBC是采用JDBC的默认的事务管理方式-->
+            <transactionManager type="JDBC"/>
+            <!--数据源  type="POOLED" 类型是连接池-->
+            <dataSource type="POOLED">
+                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
+                <property name="url" value="jdbc:mysql://localhost:3306/rbac01"/>
+                <property name="username" value="root"/>
+                <property name="password" value="123456"/>
+            </dataSource>
+        </environment>
+    </environments>
+
+    <!--引入映射配置文件-->
+    <mappers>
+        <!--直接引入整个文件夹里所有的xml映射文件-->
+        <package name="com/sf/mapper"/>
+    </mappers>
+</configuration>

+ 46 - 0
rbac01/src/test/java/com/sf/mapperTest/SysRoleMapperTest.java

@@ -0,0 +1,46 @@
+package com.sf.mapperTest;
+
+
+import com.sf.entity.SysMenu;
+import com.sf.entity.SysRole;
+import com.sf.mapper.SysRoleMapper;
+import com.sf.util.SqlSessionFactoryUtils;
+import org.apache.ibatis.session.SqlSession;
+import org.junit.Test;
+
+import java.util.List;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SysRoleMapperTest
+ * @description
+ * @create 2025/11/16
+ */
+public class SysRoleMapperTest {
+    @Test
+    public void findAllTest() {
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysRoleMapper sysRoleMapper = sqlSession.getMapper(SysRoleMapper.class);
+        List<SysRole> sysRoles = sysRoleMapper.findAll();
+        sysRoles.forEach(System.out::println);
+    }
+    @Test
+    public void findByIdTest() {
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysRoleMapper sysRoleMapper = sqlSession.getMapper(SysRoleMapper.class);
+        SysRole role = sysRoleMapper.findById(1);
+        System.out.println(role);
+    }
+    @Test
+    public void findRoleWithMenus(){
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysRoleMapper sysRoleMapper = sqlSession.getMapper(SysRoleMapper.class);
+        SysRole role = sysRoleMapper.findRoleWithMenus(1);
+        System.out.println(role.getRoleId());
+        System.out.println(role.getRoleName());
+        for(SysMenu menu:role.getMenuList()){
+            System.out.println(menu);
+        }
+    }
+}

+ 85 - 0
rbac01/src/test/java/com/sf/mapperTest/SysUserInfoMapperTest.java

@@ -0,0 +1,85 @@
+package com.sf.mapperTest;
+
+
+import com.sf.entity.SysUserInfo;
+import com.sf.mapper.SysUserInfoMapper;
+import com.sf.util.SqlSessionFactoryUtils;
+import org.apache.ibatis.session.SqlSession;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SysUserInfoMapperTest
+ * @description
+ * @create 2025/11/16
+ */
+public class SysUserInfoMapperTest {
+
+    @Test
+    public void findByNameTest1(){
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysUserInfoMapper sysUserInfoMapper = sqlSession.getMapper(SysUserInfoMapper.class);
+        //手动添加%通配符,在实际使用的时候添加
+        //如果在测试的时候忘了添加通配符,那就变成了普通的查询语句,匹配全部字符
+        List<SysUserInfo> userInfos = sysUserInfoMapper.findByName1("%十%");
+        for (SysUserInfo sysUserInfo : userInfos) {
+            System.out.println(sysUserInfo);
+        }
+    }
+    @Test
+    public void findByNameTest2(){
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysUserInfoMapper sysUserInfoMapper = sqlSession.getMapper(SysUserInfoMapper.class);
+        List<SysUserInfo> userInfos = sysUserInfoMapper.findByName2("十");
+        for (SysUserInfo sysUserInfo : userInfos) {
+            System.out.println(sysUserInfo);
+        }
+    }
+    @Test
+    public void findByNameTest3(){
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysUserInfoMapper sysUserInfoMapper = sqlSession.getMapper(SysUserInfoMapper.class);
+        List<SysUserInfo> userInfos = sysUserInfoMapper.findByName3("十");
+        for (SysUserInfo sysUserInfo : userInfos) {
+            System.out.println(sysUserInfo);
+        }
+    }
+    @Test
+    public void findByNameTest5(){
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysUserInfoMapper sysUserInfoMapper = sqlSession.getMapper(SysUserInfoMapper.class);
+        List<SysUserInfo> userInfos = sysUserInfoMapper.findByName5("十");
+        for (SysUserInfo sysUserInfo : userInfos) {
+            System.out.println(sysUserInfo);
+        }
+    }
+    @Test
+    public void findByIdsTest(){
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysUserInfoMapper sysUserInfoMapper = sqlSession.getMapper(SysUserInfoMapper.class);
+        List<Integer> ids = new ArrayList<>();
+        ids.add(1);
+        ids.add(2);
+        ids.add(3);
+        ids.add(4);
+        List<SysUserInfo> userInfoList = sysUserInfoMapper.findByIds(ids);
+        for (SysUserInfo sysUserInfo : userInfoList) {
+            System.out.println(sysUserInfo);
+        }
+    }
+
+    @Test
+    public void findByIds2Test(){
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysUserInfoMapper sysUserInfoMapper = sqlSession.getMapper(SysUserInfoMapper.class);
+        List<SysUserInfo> userInfoList = sysUserInfoMapper.findByIds2(3, 7);
+        for (SysUserInfo sysUserInfo : userInfoList) {
+            System.out.println(sysUserInfo);
+        }
+
+    }
+}

+ 51 - 0
rbac01/src/test/java/com/sf/mapperTest/SysUserMapperTest.java

@@ -0,0 +1,51 @@
+package com.sf.mapperTest;
+
+
+import com.sf.entity.SysUser;
+import com.sf.mapper.SysUserMapper;
+import com.sf.util.SqlSessionFactoryUtils;
+import org.apache.ibatis.session.SqlSession;
+import org.junit.Test;
+
+import java.util.List;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SysUserMapperTest
+ * @description
+ * @create 2025/11/16
+ */
+public class SysUserMapperTest {
+
+    /**
+     * SysUserMapper接口findById方法-单元测试
+     * @throws Exception
+     */
+    @Test
+    public void testFindById() throws Exception {
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
+        SysUser sysUser = sysUserMapper.findById(1);
+        System.out.println(sysUser);
+    }
+
+    /**
+     * SysUserMapper接口findAll方法-单元测试
+     * @throws Exception
+     */
+    @Test
+    public void testFindAll() throws Exception {
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
+        List<SysUser> sysUsers = sysUserMapper.findAll();
+        sysUsers.forEach(System.out::println);
+    }
+    @Test
+    public void findUserWithInfoAndRole(){
+        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
+        SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
+        SysUser sysUser = sysUserMapper.findUserWithInfoAndRole(1);
+        System.out.println(sysUser);
+    }
+}