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多表關聯查詢內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 關於Mybatis的sql註釋問題
- mybatisplus如何在xml的連表查詢中使用queryWrapper
- mybatis-plus中BaseMapper入門使用
- Mybatis Plus QueryWrapper復合用法詳解
- 解析Mybatis對sql表的一對多查詢問題