Mybatis-Plus多表关联查询的使用案例解析

2023-05-13 16:24:16 作者:admin
目录
  • 项目的目录结构:
    • 有以下四个包:
    • 有表结构如下:
  •  首先配置pom.xml配置文件
    • 1.pojo包中有dept和emp两个实例类
    • 2.在Emp的mapper映射文件(.xml)中的mapper之间添加如下代码
    • 3.在Dept的mapper映射文件(.xml)中的mapper之间添加如下代码
    • 4.在IDeptDao接口中代码如下
    • 5.Emp的dao接口中和
    • 6.IEmpService接口中
    • 7.EmpserviceIml类中
    • 8.接下来就是你自己在controller层写方法

项目的目录结构:

有以下四个包:

1、 controller控制层

2、dao层, 项目的目录结构: 有以下四个包:

Mybatis-Plus多表关联查询的使用案例解析

1、 controller控制层

2、dao层,接口

3、pojo,shiulilei

4、service服务层

有表结构如下:

部门表:dept

Mybatis-Plus多表关联查询的使用案例解析

员工表:emp

Mybatis-Plus多表关联查询的使用案例解析

假设要查询每个员工所属的部门(或位置等信息),就需要将两张表连接起来,使用SQL语句很简单(select * from emp,dept where emp.deptno=dept.deptno),但是在Java程序中怎么写就比较复杂了。

 首先配置pom.xml配置文件

1.pojo包中有dept和emp两个实例类

1)dept

@Data@EqualsAndHashCode(callSuper = false)@TableName("dept")public class Dept implements Serializable {    private static final long serialVersionUID = 1L;    @TableId    private Integer deptno;    private String dname;    private String loc;}

 2)emp

@Data@EqualsAndHashCode(callSuper = false)@TableName("emp")public class Emp implements Serializable {    private static final long serialVersionUID = 1L;    @TableId("empno")    private Integer empno;    private String ename;    private String job;    private Integer mgr;    private LocalDateTime hiredate;    private BigDecimal sal;    private BigDecimal comm;    private Integer deptno;    private Dept dept;//多表关联需要查询的数据}

 在Emp类中多了一个Dept对象,这个对象包含了每个员工对应部门的信息。

2.在Emp的mapper映射文件(.xml)中的mapper之间添加如下代码

<mapper namespace="com.nb.spring_boot.api.dao.IEmpDao">    <resultMap id="empMapper" type="com.nb.spring_boot.api.pojo.Emp">        <association property="dept" column="deptno" select="com.nb.spring_boot.api.dao.IDeptDao.selectById"/>    </resultMap>    <select id="queryEmps" resultMap="empMapper">        select * from emp    </select></mapper>

resultMap里的id属性(empMapper)里面可以随便写一个变量名,可以不叫empMapper,select里的selectById在IDeptDao接口中要有该方法

Dept selectById(Integer deptno);

3.在Dept的mapper映射文件(.xml)中的mapper之间添加如下代码

<select id="selectById" resultType="com.nb.spring_boot.api.pojo.Dept">        select * from dept where deptno=#{deptno}</select>

4.在IDeptDao接口中代码如下

public interface IDeptDao extends BaseMapper<Dept> {    Dept selectById(Integer deptno);}

5.Emp的dao接口中和

public interface IEmpDao extends BaseMapper<Emp> {    IPage<Emp> queryEmps(IPage<Emp> page,@Param(Constants.WRAPPER) Wrapper<Emp> wrapper);}

6.IEmpService接口中

public interface IEmpService extends IService<Emp> {    IPage<Emp> queryEmps(IPage<Emp> result, QueryWrapper<Emp> wrapper);}

7.EmpserviceIml类中

public class EmpServiceImpl extends ServiceImpl<IEmpDao, Emp> implements IEmpService {    @Autowired    IEmpDao empDao;//这里报红没事    @Override    public IPage<Emp> queryEmps(IPage<Emp> result, QueryWrapper<Emp> wrapper) {        result = empDao.queryEmps(result, wrapper);        return result;    }}

8.接下来就是你自己在controller层写方法

示例:

@RequestMapping("qemps")IPage<Emp> queryEmps(@RequestParam(defaultValue = "1") int page,                     @RequestParam(defaultValue = "5") int  limit){    IPage<Emp> result = new Page<>(page, limit);    QueryWrapper<Emp> wrapper = new QueryWrapper<>();    wrapper.gt("sal", 1000);//查询条件,工资大于1000,其他的可以研究一下,比如eq,le,like    return empService.queryEmps(result, wrapper);}

以上就是多表关联查询了~~~

原文地址:https://blog.csdn.net/weixin_47261870/article/details/127156740
在线咨询 拨打电话