vishun 最近的时间轴更新
vishun

vishun

V2EX 第 163024 号会员,加入于 2016-03-12 18:42:05 +08:00
vishun 最近回复了
21 小时 40 分钟前
回复了 dc2002007 创建的主题 Java 为何不选 Hibernate,非要 MyBatis?
原先也很倾向纯 ORM ,但是现在反而越来越觉得复杂 sql 还是原生的更直观,可以参考这个[根据条件分页查询用户列表]( https://gitee.com/mybatis-flex/mybatis-flex/issues/I90V7G#note_25272825_link),我贴过来:
```
/**
* 根据条件分页查询用户列表
*
* @param searchReq 用户信息
*
* @return 用户信息集合信息
*/
@Override
@DataScope(deptAlias = SysDept.TABLE_ALIAS, userAlias = SysUser.TABLE_ALIAS)
public Page<SysUser> selectUserList(PageAdapter<SysUser> pageAdapter, final SysUser searchReq) {
final QueryWrapper queryWrapper = queryChain()
.select(SYS_USER.DEFAULT_COLUMNS, SYS_DEPT.DEPT_NAME, SYS_DEPT.LEADER)
.from(SYS_USER.as(SysUser.TABLE_ALIAS))
.leftJoin(SYS_DEPT).as(SysDept.TABLE_ALIAS).on(SYS_USER.DEPT_ID.eq(SYS_DEPT.DEPT_ID))

.eq(SysUser::getDelFlag, UserConstants.NORMAL) // 是否删除: 否
.eq(SysUser::getUserId, searchReq.getUserId(), IdUtils.isIdValid(searchReq.getUserId())) // 用户 ID
.like(SysUser::getUserName, searchReq.getUserName(), StrUtil.isNotBlank(searchReq.getUserName())) // 用户名称
.eq(SysUser::getStatus, searchReq.getStatus(), StrUtil.isNotBlank(searchReq.getStatus())) // 用户状态
.like(SysUser::getPhonenumber, searchReq.getPhonenumber(), StrUtil.isNotBlank(searchReq.getPhonenumber())) // 手机号码
.ge(SysUser::getCreateTime, searchReq.getParams().getBeginTime(), Objects.nonNull(searchReq.getParams().getBeginTime())) // 创建时间开始
.le(SysUser::getCreateTime, searchReq.getParams().getEndTime(), Objects.nonNull(searchReq.getParams().getEndTime())) // 创建时间结束
.and(qw -> qw.eq(SysUser::getDeptId, searchReq.getDeptId()) // 部门过滤
.or(SYS_USER.DEPT_ID.in(QueryWrapper.create().select(SYS_DEPT.DEPT_ID)
.from(SYS_DEPT)
.where(QueryMethods.findInSet(QueryMethods.number(searchReq.getDeptId()), SYS_DEPT.ANCESTORS).gt(0)))),
IdUtils.isIdValid(searchReq.getDeptId()))
// 数据权限
.and(qw -> qw.where(searchReq.getParams().getDataScope()), searchReq.getParams().hasDataScopeFilter());

return getMapper().paginate(pageAdapter.getPage(), queryWrapper);
}
```
如果用 xml 差不多是这样:
```
<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password,
u.sex,u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time,
u.remark,
u.show_tag,
d.dept_name, d.leader
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0'
<if test="searchValue != null and searchValue != ''">
AND (
u.user_name like concat('%', #{searchValue}, '%')
OR u.nick_name like concat('%', #{searchValue}, '%')
)
</if>
<if test="userId != null ">
AND u.user_id = #{userId}
</if>
<if test="userName != null and userName != ''">
AND u.user_name like concat('%', #{userName}, '%')
</if>
<if test="status != null and status != ''">
AND u.status = #{status}
</if>
<if test="phonenumber != null and phonenumber != ''">
AND u.phonenumber like concat('%', #{phonenumber}, '%')
</if>
<if test="beginTime != null and beginTime != ''"><!-- 开始时间检索 -->
AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')
</if>
<if test="endTime != null and endTime != ''"><!-- 结束时间检索 -->
AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
</if>
<if test="deptId != null and deptId != 0">
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET
(#{deptId},ancestors) ))
</if>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
```
个人感觉 xml 方式反而更加直观看出查询的字段和检索条件。
绝对压根没有用参数化查询
用 fastcgi 应该没问题吧?
5 天前
回复了 giiiiiithub 创建的主题 程序员 无脑引入 oauth2 是不是脑残行为?
确实
25 天前
回复了 azev 创建的主题 宽带症候群 关于 frp 内网穿透能不能实现这一点
貌似没提供多少 api ,但是它有个 web 界面,可以参考这个 web 界面怎么实现动态配置的,或者是更简单的自己写个脚本,触发来替配置或注释配置,然后调用应用重启来生效。
33 天前
回复了 hubaq 创建的主题 互联网 RustDesk 由于诈骗猖獗,暂停国内服务
这官方纯有病,其他国家电诈少吗?相关中国目前打击电诈的力度是数一数二的,一个举报就封禁整个区域,真行。
@rehoni #9 我的手机浏览器不是弹广告,而是一进去就自动请求淘宝、京东等要求打开这些 app ,现在手机浏览器上看到简书链接根本不敢点进去,也就 PC 端还敢点,但是早就没什么好内容了。
105 天前
回复了 hankli 创建的主题 程序员 一个工具管理所有运行时版本!
合 nvm 的区别是这个可以管理更多的工具吗?只针对 npm 来说,功能和 nvm 一样?
@huangliu #25 仔细观察了下,当这个 db 中没有数据时,别名就不会显示。
数据库别名挺赞,但是发现 bug ,只有第一次的能保存上,再增加别名就不显示了,重启也不管用。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2586 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 71ms · UTC 00:27 · PVG 08:27 · LAX 17:27 · JFK 20:27
Developed with CodeLauncher
♥ Do have faith in what you're doing.