多表查询mybatis 多对多
时间: 2023-11-17 11:55:53 浏览: 91
MyBatis多对多映射初识教程
在 MyBatis 中进行多表查询的多对多关系,可以通过以下步骤实现:
1. 创建对应的数据库表,包括主要的两个表和一个中间表。
2. 在 Java 代码中创建对应的实体类,并进行关联映射。
3. 创建 XML 映射文件,编写 SQL 查询语句。
4. 在 MyBatis 的配置文件中配置对应的映射关系。
5. 调用 MyBatis 的接口方法进行多表查询。
具体步骤如下:
1. 创建数据库表,假设有两个表:`users` 和 `roles`,中间表为 `user_role`。其中 `users` 表包含用户信息,`roles` 表包含角色信息,`user_role` 表用于关联用户和角色。
2. 创建 Java 实体类,分别对应 `User` 和 `Role`,并在 `User` 类中包含一个 `List<Role>` 的属性。
```java
public class User {
private int id;
private String username;
private List<Role> roles;
// Getters and setters
}
public class Role {
private int id;
private String roleName;
// Getters and setters
}
```
3. 创建 XML 映射文件 `UserMapper.xml`,编写 SQL 查询语句。
```xml
<!-- 查询用户及其角色信息 -->
<select id="getUserWithRolesById" resultMap="userMap">
SELECT u.id, u.username, r.id AS role_id, r.roleName
FROM users u
INNER JOIN user_role ur ON u.id = ur.userId
INNER JOIN roles r ON r.id = ur.roleId
WHERE u.id = #{id}
</select>
<!-- 映射结果 -->
<resultMap id="userMap" type="User">
<id property="id" column="id" />
<result property="username" column="username" />
<collection property="roles" ofType="Role">
<id property="id" column="role_id" />
<result property="roleName" column="roleName" />
</collection>
</resultMap>
```
4. 配置 MyBatis 的配置文件 `mybatis-config.xml`,包括连接数据库的配置和映射文件的配置。
```xml
<!-- 数据库连接配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 映射文件配置 -->
<mappers>
<mapper resource="com/example/mappers/UserMapper.xml" />
</mappers>
```
5. 调用 MyBatis 的接口方法进行多表查询。
```java
// 创建 MyBatis 的 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
// 获取 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 获取 Mapper 接口实例
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 调用接口方法进行多表查询
User user = userMapper.getUserWithRolesById(1);
// 打印查询结果
System.out.println(user.getUsername());
for (Role role : user.getRoles()) {
System.out.println(role.getRoleName());
}
```
阅读全文