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); } }
验证一下
代码说明
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()); }
验证以下
代码说明
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
总结
分两篇写,本篇主要是基本简单的语法,下一章会有一些复杂的语法方法。
分享:
总有些人,一眼看到就会心生好感,道理都讲不通。——烽火戏诸侯《剑来》
如果本文对你有用的话,请不要吝啬你的赞,谢谢。