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();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)