MyBatis(跨表查询)

1、建立数据库表如下:

复制代码
DROP TABLE IF EXISTS t_demo_user;
CREATE TABLE IF NOT EXISTS t_demo_user(
    userid varchar(255),
    username varchar(100),
    password varchar(100),
    PRIMARY KEY(userid)
)ENGINE=InnoDB  DEFAULT CHARSET=gbk;

insert into t_demo_user(userid, username, password) values("1001","fredric","fredric2001");


DROP TABLE IF EXISTS t_demo_role;
CREATE TABLE IF NOT EXISTS t_demo_role(
    roleid int(20) NOT NULL AUTO_INCREMENT,
    rolename varchar(100),
    userid varchar(255),
    FOREIGN KEY(userid) references t_demo_user(userid),
    PRIMARY KEY(roleid)
)ENGINE=InnoDB  DEFAULT CHARSET=gbk AUTO_INCREMENT=1 ;

insert into t_demo_role(rolename, userid) values("role1","1001"),("role2","1001");
复制代码

2、建立对应的模型和接口JAVA

public class Role {
    private int roleid;
    private String rolename;
    private String userid;
public class User {
    
    private String userid;
    private String username;
    private String password;
    private List<Role> roles;
public interface IUserOperation {
    List<User> queryAfterJoin();
}

3、配置对应的XML文件如下:

复制代码
<?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.example.mdemo.service.IUserOperation">
     <resultMap id="listMap" type="User">  
        <id column="userid" property="userid"/>  
        <result column="username" property="username"/>  
        <result column="password" property="password"/>  
        <collection property="roles" javaType="java.util.List" ofType="Role">  
            <id column="roleid" property="roleid"/>  
            <result column="rolename" property="rolename" />
        </collection>  
    </resultMap>  
    <select id="queryAfterJoin" resultMap="listMap">  
        SELECT  
          u.userid,  
          u.username,  
          u.password,
          r.roleid roleid, 
          r.rolename rolename
        FROM  
          t_demo_user u  
        LEFT JOIN  
          t_demo_role r  
        ON  
          u.userid = r.userid  
    </select>    
</mapper>
复制代码

4、使用测试如下:

复制代码
IUserOperation userOperation = session.getMapper(IUserOperation.class);
List<User> users = userOperation.queryAfterJoin();
            
    for(User u:users){
           System.out.println(u.getUserid());
           System.out.println(u.getUsername());
           System.out.println(u.getPassword());
           List<Role> roles = u.getRoles();
           for(Role r:roles){
               System.out.println(r.getRolename());
               System.out.println(r.getRoleid());
          }           
     }
            
     session.commit();
复制代码
posted @   Fredric_2013  阅读(1966)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示