MyBatis的多对多映射(十)上

简介: MyBatis的多对多映射(十)

一. Mybatis的多对多关联映射


多对多的关系在数据库中是很常见的,但是在业务代码中常常处理成 双向的一对多的关联。 可以与Hibernate的多对多对照来看:

Hibernte的多对多映射(十二)


创建User表:

20190708165348821.png

创建Role 角色表:


20190711085344184.png


创建User_role 表


20190711085353136.png


相应的实体类:

User.java


package com.yjl.pojo;
import java.util.List;
/**
 @author:yuejl
 @date: 2019年6月15日 上午11:11:02
 @Description Mybatis 使用的基本类 User
*/
public class User {
  /**
   * @param id id编号,自增
   * @param name 姓名
   * @param age 年龄
   * @param sex 性别
   * @param description 描述
   */
  private Integer id;
  private String name;
  private Integer age;
  private String sex;
  private String description;
  //引入角色的多个对象集合。。
  private List<Role> roles;
  public User(){
  }
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Integer getAge() {
    return age;
  }
  public void setAge(Integer age) {
    this.age = age;
  }
  public String getSex() {
    return sex;
  }
  public void setSex(String sex) {
    this.sex = sex;
  }
  public String getDescription() {
    return description;
  }
  public void setDescription(String description) {
    this.description = description;
  }
  public List<Role> getRoles() {
    return roles;
  }
  public void setRoles(List<Role> roles) {
    this.roles = roles;
  }
  @Override
  public String toString() {
    return "User [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + ", description=" + description
        + "]";
  }
}


Role.java


package com.yjl.pojo;
import java.util.List;
/**
 @author:两个蝴蝶飞
 @date: 2019年3月2日 下午6:18:51
 @Description 角色组
*/
public class Role {
  /**
   * @param id 角色编号
   * @param name 用户的名称
   */
  private Integer id;
  private String name;
  public Role() {
  }
  public Role(String name) {
    this.name = name;
  }
  /**
   * @param users 用户   是一对多的关系
   */
  private List<User> users;
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public List<User> getUsers() {
    return users;
  }
  public void setUsers(List<User> users) {
    this.users = users;
  }
  @Override
  public String toString() {
    return "Role [id=" + id + ", name=" + name + "]";
  }
}


二. 角色到员工的一对多查询(select 形式)


RoleMapper.java 中接口:


public Role findByIdWithSelect(int id);


UserMapper.java 中接口:


public List<User> findUserByRoleId(@Param(value="roleId") int roleId);


RoleMapper.xml sql语句:


<!--角色查询员工的一对多-->
<resultMap type="role" id="roleResultMapWithSelect">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <collection property="users" ofType="user" column="id"
    select="com.yjl.mapper.UserMapper.findUserByRoleId"></collection>
  </resultMap>
<select id="findByIdWithSelect" parameterType="int" resultMap="roleResultMapWithSelect">
    select * from role t where t.id=#{id}
</select>


UserMapper.xml 中sql语句


<resultMap type="user" id="userResultMap">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="sex" column="sex"/>
    <result property="age" column="age"/>
    <result property="description" column="description"/>
  </resultMap>
<select id="findUserByRoleId" parameterType="int" resultMap="userResultMap">
    select u.* from user_role t,user u where t.userId=u.id and t.roleId=#{roleId}
  </select>


测试方法:


@Test
  public void findByIdWithSelectTest(){
    SqlSession sqlSession=SqlSessionFactoryUtils.getSession();
    RoleMapper roleMapper=sqlSession.getMapper(RoleMapper.class);
    //具有超级管理员角色的用户
    Role role=roleMapper.findByIdWithSelect(1);
    System.out.println(role);
    List<User> userList=role.getUsers();
    userList.forEach(n ->System.out.println(n));
  }


20190711085413883.png

相关文章
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
3月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
5月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
104 3
|
6月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
77 3
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
|
7月前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
7月前
|
算法 BI 数据库
MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作
MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作
416 3
|
7月前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
122 4
|
7月前
|
XML Java 数据库连接
java对象有集合mybatis如何映射
java对象有集合mybatis如何映射
57 4
|
7月前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
下一篇
DataWorks