前景提要
上一回说到的优点:lambda 模式 SQL 查询对比 ,但那只是用在单表查询,而多表查询却比较雍炯了。
案例对比
- lambda模式多表
MultiWrapper multiWrapper = Wrappers.lambdaMultiWrapper(SysLogVO.class)
.select(
LambdaColumn.of(SysLog::getId), LambdaColumn.of(SysLog::getIpAddress),
LambdaColumn.of(SysLog::getRequestWay), LambdaColumn.of(SysLog::getLogStatus),
LambdaColumn.of(SysLog::getLogType), LambdaColumn.of(SysLog::getCreateTime),
LambdaColumn.of(SysUser::getUsername), LambdaColumn.of(SysUser::getNickname)
)
.from(SysLog.class)
.leftJoin(SysUser.class).on().eq(SysLog::getOperator, SysUser::getId)
.where()
.eq(SysLog::getId, pageDTO.getSysLog().getId())
.like(SysUser::getUsername, pageDTO.getSysLog().getOperator())
.like(SysUser::getNickname, pageDTO.getSysLog().getOperator());
Page<SysLogVO> page = sqlToyHelperDao.findPage(multiWrapper, new Page<>(pageDTO.getPageSize(), pageDTO.getPageNo()));
- SQL模式
Page<SysLogVO> page = sqlToyLazyDao.findPageBySql(pageDTO, "sys_log_JOIN_findList", sysLogMap, SysLogVO.class);
<sql id="sys_log_JOIN_findList">
<value>
<![CDATA[
select
a.id, a.ip_address, a.request_way, a.log_status, a.log_type, a.create_time,
b. username, b.nickname
from sys_log a
left join sys_user b on (a.operator = b.id)
where 1=1
#[and id = :id]
#[and b.username like :operator]
#[and b.nickname like :operator]
]]>
</value>
</sql>
备注
以上是使用 sqltoy-orm 以及 sqltoy-plus 框架进行查询对比,并且单表查询
总结
lambda多表模式,只是2个表的联查已经表现得特别费劲了,而且在复杂查询sql中更不用想。
虽然可以用,但是不建议!!!