FluentMybatis Where语法(一) | FluentMybatis实践(3)

简介: FluentMybatis Where语法(一) | FluentMybatis实践

eqByEntity语法

fm支持根据entity的属性做查询条件。来测试一下是什么效果。我们要测试一下eqByEntity带参数与不带参数两种方式,结果如何。

接口代码添加

  /**
   * 测试eqByEntity
   *
   * @return list
   */
  List<TestFluentMybatisEntity> query8();
  /**
   * 测试eqByEntity 指定字段
   *
   * @return list
   */
  List<TestFluentMybatisEntity> query9();



实现代码添加

  @Override
  public List<TestFluentMybatisEntity> query8() {
    TestFluentMybatisEntity query = new TestFluentMybatisEntity().setAge(18).setDelFlag(0);
    return testFluentMybatisMapper.listEntity(
        new TestFluentMybatisQuery().where.eqByEntity(query).end());
  }
  @Override
  public List<TestFluentMybatisEntity> query9() {
    TestFluentMybatisEntity query = new TestFluentMybatisEntity().setAge(18).setDelFlag(0);
    return testFluentMybatisMapper.listEntity(
        new TestFluentMybatisQuery()
            .where
            .eqByEntity(query, Ref.Field.TestFluentMybatis.age, Ref.Field.TestFluentMybatis.name)
            .end());
  }


控制层代码添加


  @ApiOperation(value = "where-eqByEntity1语法", notes = "where-eqByEntity1语法")
  @RequestMapping(value = "/eqByEntity1", method = RequestMethod.GET)
  @ResponseBody
  public Result<List<TestFluentMybatisEntity>> query8() {
    try {
      return Result.ok(whereService.query8());
    } catch (Exception exception) {
      return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);
    }
  }
  @ApiOperation(value = "where-eqByEntity2语法", notes = "where-eqByEntity2语法")
  @RequestMapping(value = "/eqByEntity2", method = RequestMethod.GET)
  @ResponseBody
  public Result<List<TestFluentMybatisEntity>> query9() {
    try {
      return Result.ok(whereService.query9());
    } catch (Exception exception) {
      return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);
    }
  }



验证一下


image.png

image.png


代码说明


1、如果不加字段参数,那么可以理解为纯粹的匹配字段,可以从执行产生的语句直观理解。


2021-11-09 10:17:50.068 DEBUG 65512 --- [nio-8090-exec-9] c.h.f.f.m.T.listEntity                   : ==>  Preparing: SELECT `id`, `age`, `create_time`, `del_flag`, `name` FROM `test_fluent_mybatis` WHERE `del_flag` = ? AND `age` = ?
2021-11-09 10:17:50.256 DEBUG 65512 --- [nio-8090-exec-9] c.h.f.f.m.T.listEntity                   : ==> Parameters: 0(Integer), 18(Integer)
2021-11-09 10:17:50.281 DEBUG 65512 --- [nio-8090-exec-9] c.h.f.f.m.T.listEntity                   : <==      Total: 1

2、那么加字段参数后是什么含义呢?可以这么理解,参数字段如果在Entity中设置了值,那么就匹配相等;如果参数字段在Entity中没有设置值,那么语句添加该参数字段is Null;Entity设置了值,但是参数字段不存在该字段,那么该字段值无效。通过执行的语句,看一下。

2021-11-09 10:17:54.449 DEBUG 65512 --- [io-8090-exec-10] c.h.f.f.m.T.listEntity                   : ==>  Preparing: SELECT `id`, `age`, `create_time`, `del_flag`, `name` FROM `test_fluent_mybatis` WHERE `name` IS NULL AND `age` = ?
2021-11-09 10:17:54.452 DEBUG 65512 --- [io-8090-exec-10] c.h.f.f.m.T.listEntity                   : ==> Parameters: 18(Integer)
2021-11-09 10:17:54.454 DEBUG 65512 --- [io-8090-exec-10] c.h.f.f.m.T.listEntity                   : <==      Total: 0



eqByExclude语法

该语法和eqByEntity是相反的,下面来测试一下不带字段参数与带字段参数的效果。

接口代码添加

  /**
   * 测试eqByExclude
   *
   * @return list
   */
  List<TestFluentMybatisEntity> query10();
  /**
   * 测试eqByExclude 指定字段
   *
   * @return list
   */
  List<TestFluentMybatisEntity> query11();

实现代码添加

  @Override
  public List<TestFluentMybatisEntity> query10() {
    TestFluentMybatisEntity query = new TestFluentMybatisEntity().setAge(18).setDelFlag(0);
    return testFluentMybatisMapper.listEntity(
        new TestFluentMybatisQuery().where.eqByExclude(query).end());
  }
  @Override
  public List<TestFluentMybatisEntity> query11() {
    TestFluentMybatisEntity query = new TestFluentMybatisEntity().setAge(18).setDelFlag(0);
    return testFluentMybatisMapper.listEntity(
        new TestFluentMybatisQuery()
            .where
            .eqByExclude(
                query, Ref.Field.TestFluentMybatis.name, Ref.Field.TestFluentMybatis.createTime)
            .end());
  }

验证以下

image.png

image.png


代码说明


1、首先看一下方法一,虽然直接匹配了,但是使用eqByExclude的话,会自动补全剩下的字段,并且都是is Null的条件。看一下执行的sql。

2021-11-09 10:45:06.508 DEBUG 65420 --- [nio-8090-exec-1] c.h.f.f.m.T.listEntity                   : ==>  Preparing: SELECT `id`, `age`, `create_time`, `del_flag`, `name` FROM `test_fluent_mybatis` WHERE `name` IS NULL AND `del_flag` = ? AND `create_time` IS NULL AND `age` = ?
2021-11-09 10:45:06.688 DEBUG 65420 --- [nio-8090-exec-1] c.h.f.f.m.T.listEntity                   : ==> Parameters: 0(Integer), 18(Integer)
2021-11-09 10:45:06.711 DEBUG 65420 --- [nio-8090-exec-1] c.h.f.f.m.T.listEntity                   : <==      Total: 0

2、eqByExclude的字段参数说白了就是排除这些自动判断的字段,看一下执行的sql。


2021-11-09 10:45:07.894 DEBUG 65420 --- [nio-8090-exec-2] c.h.f.f.m.T.listEntity                   : ==>  Preparing: SELECT `id`, `age`, `create_time`, `del_flag`, `name` FROM `test_fluent_mybatis` WHERE `del_flag` = ? AND `age` = ?
2021-11-09 10:45:07.895 DEBUG 65420 --- [nio-8090-exec-2] c.h.f.f.m.T.listEntity                   : ==> Parameters: 0(Integer), 18(Integer)
2021-11-09 10:45:07.899 DEBUG 65420 --- [nio-8090-exec-2] c.h.f.f.m.T.listEntity                   : <==      Total: 1

总结

分两篇写,本篇主要是基本简单的语法,下一章会有一些复杂的语法方法。


分享:


       总有些人,一眼看到就会心生好感,道理都讲不通。——烽火戏诸侯《剑来》


如果本文对你有用的话,请不要吝啬你的赞,谢谢。



目录
打赏
0
0
0
0
7
分享
相关文章
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
178 0
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
MyBatis-Plus高级用法:最优化持久层开发
MyBatis-Plus 通过简化常见的持久层开发任务,提高了开发效率和代码的可维护性。通过合理使用条件构造器、分页插件、逻辑删除和代码生成器等高级功能,可以进一步优化持久层开发,提升系统性能和稳定性。掌握这些高级用法和最佳实践,有助于开发者构建高效、稳定和可扩展的企业级应用。
81 13
如何利用Mybatis-Plus自动生成代码(超详细注解)
如何利用Mybatis-Plus自动生成代码(超详细注解)
2534 1
|
8月前
|
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
101 0
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
JAVAEE框架技术之9-myBatis高级查询技术文档
JAVAEE框架技术之9-myBatis高级查询技术文档
137 0
JAVAEE框架技术之9-myBatis高级查询技术文档
干翻Mybatis源码系列之第十篇:Mybatis拦截器基本开发、基本使用和基本细节分析
干翻Mybatis源码系列之第十篇:Mybatis拦截器基本开发、基本使用和基本细节分析
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践(2)
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践(2)