MybatisPlus中什么情况Wrapper可以动态改变,对象的指向性

  • 一、对于对象,每次直接生成的wrapper,其具有对象属性,可根据对象属性的改变,动态的改变sql:
@Test
    public void testWrapper() {
        Banner banner = new Banner();
        banner.setBannerTitle("test");
        System.out.println( " 99999999====== " + iBannerService.list(Wrappers.lambdaQuery(banner)));

        banner.setBannerTitle("123");
        System.out.println( " 99999999====== " + iBannerService.list(Wrappers.lambdaQuery(banner)));

        banner.setBannerTitle("3455");
        System.out.println( " 99999999====== " + iBannerService.list(Wrappers.lambdaQuery(banner)));
    }

控制台输出结果:

08:42:02.427 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==>  Preparing: SELECT id,banner_status,deleted,modify_time,banner_title,create_time,library_id,is_all,banner_sort,banner_img,banner_content FROM banner WHERE banner_title=? 
08:42:02.428 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==> Parameters: test(String)
08:42:02.481 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - <==      Total: 0
 99999999====== []
08:42:23.676 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==>  Preparing: SELECT id,banner_status,deleted,modify_time,banner_title,create_time,library_id,is_all,banner_sort,banner_img,banner_content FROM banner WHERE banner_title=? 
08:42:23.677 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==> Parameters: 123(String)
08:42:23.737 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - <==      Total: 2
 99999999====== [Banner(id=477462504827613184, bannerTitle=123, libraryId=477119163770302464, bannerSort=5, bannerContent={"children":[{"name":"Text","data":"111","color":"#333333","fontSize":"14","bold":false,"align":"0","id":935247},{"name":"Image","url":"https://studycloud-test.oss-cn-hangzhou.aliyuncs.com/x2joc04zekm1638939923598.jpg","text":"","imgScreenSize":"1","id":902981}],"version":"0.0.1"}, bannerImg=https://studycloud-test.oss-cn-hangzhou.aliyuncs.com/tf37lm7b781638939900233.jpg, bannerStatus=1, isAll=0, modifyTime=Wed Dec 08 13:05:32 CST 2021, createTime=Wed Dec 08 13:05:32 CST 2021, deleted=0), Banner(id=479660013675048960, bannerTitle=123, libraryId=477119163770302464, bannerSort=4, bannerContent={"children":[{"name":"Text","data":"111","color":"#333333","fontSize":"14","bold":false,"align":"0","id":293717}],"version":"0.0.1"}, bannerImg=https://studycloud-test.oss-cn-hangzhou.aliyuncs.com/h26n1vrzllw1639463854807.png, bannerStatus=1, isAll=1, modifyTime=Tue Dec 14 14:37:39 CST 2021, createTime=Tue Dec 14 14:37:39 CST 2021, deleted=0)]
08:42:25.520 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==>  Preparing: SELECT id,banner_status,deleted,modify_time,banner_title,create_time,library_id,is_all,banner_sort,banner_img,banner_content FROM banner WHERE banner_title=? 
08:42:25.521 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==> Parameters: 3455(String)
08:42:25.573 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - <==      Total: 0
 99999999====== []

  • 二、对于对象,只一次生成wrapper对象,执行sql时,也可以动态生成sql语句:
    @Test
    public void testWrapper() {
        Banner banner = new Banner();
        LambdaQueryWrapper<Banner> wrapper1 = Wrappers.lambdaQuery(banner);
        banner.setBannerTitle("test");
        System.out.println( " 99999999====== " + iBannerService.list(wrapper1));

        banner.setBannerTitle("123");
        System.out.println( " 99999999====== " + iBannerService.list(wrapper1));
	}

控制台输出:

09:05:28.292 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==>  Preparing: SELECT id,banner_status,deleted,modify_time,banner_title,create_time,library_id,is_all,banner_sort,banner_img,banner_content FROM banner WHERE banner_title=? 
09:05:28.293 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==> Parameters: test(String)
09:05:28.337 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - <==      Total: 0
 99999999====== []
09:05:28.338 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==>  Preparing: SELECT id,banner_status,deleted,modify_time,banner_title,create_time,library_id,is_all,banner_sort,banner_img,banner_content FROM banner WHERE banner_title=? 
09:05:28.339 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==> Parameters: 123(String)
09:05:28.391 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - <==      Total: 2
 99999999====== [Banner(id=477462504827613184, bannerTitle=123, libraryId=477119163770302464, bannerSort=5, bannerContent={"children":[{"name":"Text","data":"111","color":"#333333","fontSize":"14","bold":false,"align":"0","id":935247},{"name":"Image","url":"https://studycloud-test.oss-cn-hangzhou.aliyuncs.com/x2joc04zekm1638939923598.jpg","text":"","imgScreenSize":"1","id":902981}],"version":"0.0.1"}, bannerImg=https://studycloud-test.oss-cn-hangzhou.aliyuncs.com/tf37lm7b781638939900233.jpg, bannerStatus=1, isAll=0, modifyTime=Wed Dec 08 13:05:32 CST 2021, createTime=Wed Dec 08 13:05:32 CST 2021, deleted=0), Banner(id=479660013675048960, bannerTitle=123, libraryId=477119163770302464, bannerSort=4, bannerContent={"children":[{"name":"Text","data":"111","color":"#333333","fontSize":"14","bold":false,"align":"0","id":293717}],"version":"0.0.1"}, bannerImg=https://studycloud-test.oss-cn-hangzhou.aliyuncs.com/h26n1vrzllw1639463854807.png, bannerStatus=1, isAll=1, modifyTime=Tue Dec 14 14:37:39 CST 2021, createTime=Tue Dec 14 14:37:39 CST 2021, deleted=0)]

三、对于字符串等类型生成的wrapper,该wrapper对象只在第一次就构造完成,后续该字符串再改变,sql并不随之改变。

 @Test
    public void testWrapper() {
        String s = "test";
        LambdaQueryWrapper<Banner> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Banner::getBannerTitle, s);
        iBannerService.list(wrapper);
        s = "123";
        iBannerService.list(wrapper);
    }

控制台:

09:05:28.405 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==>  Preparing: SELECT id,banner_status,deleted,modify_time,banner_title,create_time,library_id,is_all,banner_sort,banner_img,banner_content FROM banner WHERE (banner_title = ?) 
09:05:28.406 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==> Parameters: test(String)
09:05:28.452 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - <==      Total: 0
09:05:28.455 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==>  Preparing: SELECT id,banner_status,deleted,modify_time,banner_title,create_time,library_id,is_all,banner_sort,banner_img,banner_content FROM banner WHERE (banner_title = ?) 
09:05:28.456 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - ==> Parameters: test(String)
09:05:28.517 [main] DEBUG c.i.p.b.m.B.selectList - [debug,143] - <==      Total: 0

其实看了这三个例子就很容易想到对象的指向性,对于字符串或者一些基本数据类型,在构造wrapper时就已经创建了sql编译前的等式,见源码:
eq直接拼接常量
而wrapper包裹对象,则是将对象进行指向,所以对象内的字段改变,sql语句也会相应变化:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值