四时宝库

程序员的知识宝库

Java,MyBatis,基于注解方式和基于XML配置,多对一,应用案例

关联映射概念

关联映射,ManyToOne(多对一)、OneToMany(一对多)

一对多关系,一般是一个表的主键对应另一个表的非主键,主键的值是不能重复的,而非主键值是可以重复的,一个主键值对应另一个表的非主键的值,那么就只有一个值对一个值或一个值对多个值两种可能,故称一对多。

一对多关系:表一(主键)对应表二(关联主键),一对多反过来就多对一,多对一关系:表一(关联主键)对应表二(主键)

文本标题应该是一对多<与前节反过来了>,参考:一对多,应用案例

案例代码

基于注解方式

Model:

package com.what21.demo03.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.List;

@Data
@TableName("dept")
public class Dept {

    // ID
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    // 名称
    private String name;
    // 部门下的员工
    private List<Employee> employeeList;

}
package com.what21.demo03.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.Date;

@Data
@TableName("emp")
public class Employee {

    // ID
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    // 名称
    private String name;
    // 邮箱
    private String email;
    // 性别
    private String gender;
    // 年龄
    private Integer age;
    // 创建时间
    private Date createTime;
    // 所属部门
    private Dept dept;

}

Mapper代码:

package com.what21.demo03.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.what21.demo03.model.Dept;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType;
import org.springframework.stereotype.Repository;

@Repository("deptMapper3")
public interface DeptMapper extends BaseMapper<Dept> {

    @Results(id = "deptMap", value = {
            @Result(column = "id", property = "id", id = true),
            @Result(column = "name", property = "name"),
            @Result(column = "id", property = "employeeList"
                    , many = @Many(select = "com.what21.demo03.mapper.EmployeeMapper.getEmpsByDeptId",
                    fetchType = FetchType.LAZY))
    })
    @Select("select * from `dept` where `id`=#{id}")
    public Dept getById(@Param("id") Integer id);

}
package com.what21.demo03.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.what21.demo03.model.Employee;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("employeeMapper3")
public interface EmployeeMapper extends BaseMapper<Employee> {

    @Results(id = "employeeMap", value = {
            @Result(column = "id", property = "id", id = true),
            @Result(column = "name", property = "name"),
            @Result(column = "email", property = "email"),
            @Result(column = "gender", property = "gender"),
            @Result(column = "age", property = "age"),
            @Result(column = "age", property = "age")
    })
    @Select("select * from `emp` where `id`=#{id}")
    public List<Employee> getEmpsByDeptId(Integer id);

}

测试:

package com.what21.demo03.tester;

import com.what21.demo03.mapper.DeptMapper;
import com.what21.demo03.model.Dept;
import com.what21.demo03.model.Employee;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class EmployeeMapperTester {

    @Resource(name = "deptMapper3")
    DeptMapper deptMapper;

    @Test
    public void testList() {
        Dept dept = deptMapper.getById(1);
        System.out.println("dept==>" + dept);
        List<Employee> beanList = dept.getEmployeeList();
        beanList.forEach(employee -> {
            System.out.print(employee);
            System.out.println("==>,所属部门:" + employee.getDept());
        });
    }

}

基于XML配置

Model:

package com.what21.demo04.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.List;

@Data
@TableName("dept")
public class Dept {

    // ID
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    // 名称
    private String name;
    // 部门下的员工
    private List<Employee> employeeList;

}
package com.what21.demo04.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.Date;

@Data
@TableName("emp")
public class Employee {

    // ID
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    // 名称
    private String name;
    // 邮箱
    private String email;
    // 性别
    private String gender;
    // 年龄
    private Integer age;
    // 创建时间
    private Date createTime;
    // 所属部门
    private Dept dept;

}

Mapper

package com.what21.demo04.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.what21.demo04.model.Dept;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

@Repository("deptMapper4")
public interface DeptMapper extends BaseMapper<Dept> {

    public Dept getById(@Param("id") Integer id);

}
package com.what21.demo04.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.what21.demo04.model.Employee;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("employeeMapper4")
public interface EmployeeMapper extends BaseMapper<Employee> {

    public List<Employee> getEmpsByDeptId(Integer id);

}

XML映射文件

DeptMapper.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.what21.demo04.mapper.DeptMapper">

    <resultMap id="deptResultMap" type="com.what21.demo04.model.Dept">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <collection column="id" property="employeeList" ofType="com.what21.demo04.model.Employee"
                    select="com.what21.demo04.mapper.EmployeeMapper.getEmpsByDeptId">
            <id column="id" property="id"/>
            <result column="name" property="name"/>
            <result column="email" property="email"/>
            <result column="gender" property="gender"/>
            <result column="age" property="age"/>
            <result column="create_time" property="createTime"/>
        </collection>
    </resultMap>

    <select id="getById" parameterType="int" resultMap="deptResultMap">
        select * from `dept` where id=#{id}
    </select>

</mapper>

EmployeeMapper.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.what21.demo04.mapper.EmployeeMapper">

    <resultMap id="employeeResultMap" type="com.what21.demo04.model.Employee">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="email" property="email"/>
        <result column="gender" property="gender"/>
        <result column="age" property="age"/>
        <result column="create_time" property="createTime"/>
    </resultMap>

    <select id="getEmpsByDeptId" parameterType="int" resultMap="employeeResultMap">
        select * from `emp` where `id`=#{id}
    </select>

</mapper>

测试类:

package com.what21.demo04.tester;

import com.what21.demo04.mapper.DeptMapper;
import com.what21.demo04.model.Dept;
import com.what21.demo04.model.Employee;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class EmployeeMapperTester {

    @Resource(name = "deptMapper4")
    DeptMapper deptMapper;

    @Test
    public void testList() {
        Dept dept = deptMapper.getById(1);
        System.out.println("dept==>" + dept);
        List<Employee> beanList = dept.getEmployeeList();
        beanList.forEach(employee -> {
            System.out.print(employee);
            System.out.println("==>,所属部门:" + employee.getDept());
        });
    }

}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接