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

总结

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


分享:


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


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



相关文章
|
2月前
|
SQL Java 数据库连接
MyBatis-Plus高级用法:最优化持久层开发
MyBatis-Plus 通过简化常见的持久层开发任务,提高了开发效率和代码的可维护性。通过合理使用条件构造器、分页插件、逻辑删除和代码生成器等高级功能,可以进一步优化持久层开发,提升系统性能和稳定性。掌握这些高级用法和最佳实践,有助于开发者构建高效、稳定和可扩展的企业级应用。
160 13
|
8月前
|
SQL Java 数据库连接
JavaWeb基础第三章(MyBatis的应用,基础操作与动态SQL)
JavaWeb基础第三章(MyBatis的应用,基础操作与动态SQL)
|
9月前
|
SQL 安全 Java
MyBatis LambdaQueryWrapper的概念以及具备那些写法
【4月更文挑战第2天】MyBatis是一个流行的Java持久层框架,它提供了与数据库交互的简化方法。而MyBatis Plus是一个在MyBatis基础上的增强工具,它引入了很多便利的特性,其中之一就是LambdaQueryWrapper。这个类是一个基于Java 8的Lambda表达式的查询构造器,使得构建查询语句变得更加简洁和类型安全。
307 3
|
9月前
|
SQL Java 关系型数据库
MyBatis中的9种常用动态sql标签精妙用法
MyBatis中的9种常用动态sql标签精妙用法
290 0
|
9月前
|
SQL 缓存 Java
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
103 0
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践(2)
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践(2)
FluentMybatis Where语法(一) | FluentMybatis实践(2)
FluentMybatis Where语法(一) | FluentMybatis实践
FluentMybatis Where语法(一) | FluentMybatis实践(2)
FluentMybatis Update语法 | FluentMybatis实践
FluentMybatis Update语法 | FluentMybatis实践
FluentMybatis Update语法 | FluentMybatis实践

热门文章

最新文章