【Mybatis-Plus】or拼接

时间:2025-05-13 15:58:10

Mybatis-Plus的or拼接是个坑:
这是需要的结果:

queryWrapper.and(c->c.or(a->a.eq("", "SIGNING")
                        .eq("", "SIGNING")).or(b->b.eq("","INVALIDING")
                        .eq("","INVALIDING"))).eq("qcs.is_del",0);

执行的sql:

where
	((qcs3.status = 'SIGNING'
		and qcs.status = 'SIGNING')
	or (qcs.status = 'INVALIDING'
		and qcs3.status = 'INVALIDING'))
		and qcs.is_del = 0

但是很容易写成:

     queryWrapper.and(a->a.eq("", "SIGNING")
                        .eq("", "SIGNING")).or(b->b.eq("","INVALIDING")
                        .eq("","INVALIDING")).eq("qcs.is_del",0);;

执行的sql:

where
	((qcs3.status = 'SIGNING'
		and qcs.status = 'SIGNING')
	or (qcs.status = 'INVALIDING'
		and qcs3.status = 'INVALIDING'))
		and qcs.is_del = 0

or拼接常用的写法:

例1: eq(“id”,1).or().eq(“name”,“老王”)—>id = 1 or name = ‘老王’

例2: or(i -> (“name”, “李白”).ne(“status”, “活着”))—>or (name = ‘李白’ and status <> ‘活着’)