mybatisPlus 使用mapper多表多连接查询

本文深入解析了一段复杂的SQL查询代码,该代码通过多个左连接从不同的表中获取工作信息,包括工作类别、地区、经验和学历等详细数据。通过具体实例,展示了如何在SQL中进行多表关联和条件筛选。

这个问题花了我3个小时,。先上图,以后再解释

<select id="getComJob" parameterType="List" resultType="hashMap">
		select
		job.*,
		jobclass1.name as catname1,
		jobclass2.name as catname2,
		jobclass3.name as catname3,
		province.area_name as addr_province,
		city.area_name as addr_city,
		area.area_name as addr_area,
		jingyan.name as jingyan,
		xueli.name as xueliname
		from
		mj_com_job job
		left join mj_job_class jobclass1 on job.cat1=jobclass1.id
		left join mj_job_class jobclass2 on job.cat2=jobclass2.id
		left join mj_job_class jobclass3 on job.cat3=jobclass3.id
		left join mj_area province on job.provinceid = province.id
		left join mj_area city on job.cityid = city.id
		left join mj_area area on job.three_cityid = area.id
		left join mj_com_class jingyan on job.experience_id=jingyan.id
		left join mj_com_class xueli on job.Education_id=xueli.id
		<where>
			${ew.sqlSegment}
		</where>
	</select>
    public R detail(@RequestParam(value = "jobid") Integer jobid, Model model) {
        QueryWrapper<ComJob> wrapper = new QueryWrapper<>();
        wrapper.eq("job.id",jobid);
        List<ComJob> comJob = jobService.getComJob(wrapper);

 

Mybatis-Plus提供了非常方便的查询分页的方法,可以通过Wrapper构造器实现。 假设我们有两个t_user和t_order,t_user中有user_id和username两个字段,t_order中有order_id和user_id两个字段,我们需要查询t_user中username包含"张三"、t_order中user_id为1的订单,并且按照order_id排序。可以通过如下代码实现: ```java // 创建分页对象 IPage<Order> page = new Page<>(1, 10); // 构造查询条件 QueryWrapper<Order> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_id", 1) .orderByAsc("order_id"); // 执行查询 List<Order> orders = orderMapper.selectPage(page, queryWrapper).getRecords(); ``` 如果需要关联查询t_user中的用户信息,可以使用连接关联查询,如下: ```java // 创建分页对象 IPage<OrderVo> page = new Page<>(1, 10); // 构造查询条件 QueryWrapper<OrderVo> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("o.user_id", 1) .like("u.username", "张三%") .orderByAsc("o.order_id"); // 执行查询 List<OrderVo> orderVos = orderMapper.selectOrderVoPage(page, queryWrapper); ``` 其中,OrderVo是一个自定义的实体类,用于接收关联查询的结果,可以通过@TableName指定对应的名,@TableField指定对应的字段名。同时,需要在OrderMapper中定义selectOrderVoPage方法,实现关联查询,如下: ```java List<OrderVo> selectOrderVoPage(IPage<OrderVo> page, @Param(Constants.WRAPPER) Wrapper<OrderVo> wrapper); ``` 需要注意的是,OrderVo中的字段名需要与查询条件中的别名一致,否则查询结果会为null。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值