Mybatis-Plus多表关联查询的使用案例解析
项目的目录结构:
有以下四个包:
1、 controller控制层
2、dao层, 项目的目录结构: 有以下四个包:
1、 controller控制层
2、dao层,接口
3、pojo,shiulilei
4、service服务层
有表结构如下:
部门表:dept
员工表:emp
假设要查询每个员工所属的部门(或位置等信息),就需要将两张表连接起来,使用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); }
以上就是多表关联查询了~~~
到此这篇关于Mybatis-Plus多表关联查询的使用案例解析的文章就介绍到这了,更多相关Mybatis-Plus多表关联查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
idea运行tomcat报错找不到catalina.bat,系统找不到指定的文件问题
这篇文章主要介绍了idea运行tomcat报错找不到catalina.bat,系统找不到指定的文件问题,具有很好的参考价值,希望对大家有所帮助,2023-11-11使用IDEA配置Tomcat和连接MySQL数据库(JDBC)详细步骤
这篇文章主要介绍了使用IDEA配置Tomcat和连接MySQL数据库(JDBC)详细步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-12-12java多线程并发中使用Lockers类将多线程共享资源锁定
Lockers在多线程编程里面一个重要的概念是锁定,如果一个资源是多个线程共享的,为了保证数据的完整性,在进行事务性操作时需要将共享资源锁定,这样可以保证在做事务性操作时只有一个线程能对资源进行操作,下面看一个示例2014-01-01jackson 实体转json 为NULL或者为空不参加序列化(实例讲解)
下面小编就为大家带来一篇jackson 实体转json 为NULL或者为空不参加序列化(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-10-10详解Spring数据缓存注解@Cacheable、@CachePut、@CacheEvict
这篇文章主要介绍了详解Spring数据缓存注解@Cacheable、CachePut、@CacheEvict,当以一组参数第一次调用某个方法时,返回值会被保存在缓存中,如果这个方法再次以相同的参数进行调用时,这个返回值会从缓存中查询获取,需要的朋友可以参考下2023-07-07
最新评论