后台管理系统架构成型

这段时间,集中精力突破后台管理系统的框架,希望能够踩在前人的肩膀上前行。

前面0.0.1版本的程序解决了物联网采集通道以及用户侧设备的协议代码开发。之前用到的物联网依赖的设备信息以及通道、协议信息,是直接在数据库里面创建的表,现在需要面向用户形成一个带界面的管理系统,以支持物联网采集需要的设备信息。之前维护代码过程中接触过angular的模板界面、基于VUE elementUI的前端系统,也接触过前后端没有分离的国产jsp系统框架,因为是之前同事搭出来的框架,自己没有深刻理解,也不能说出明显的优劣。想着毕竟是从头学习、全新开发,应该能够找到一个牛人做的可以用的更好的框架。于是在码云开源库里面搜索。找了很久,初步锁定人人快速开发框架。

人人框架分为几个版本,开源版的有前后端没有分离的security版本,有前后端分离的fast版本,还有前后端分离的企业版的。由于考虑到企业收费版的很多功能我这边可能用不到,而我对框架的基础要求就是一定不能保留用不上也看不懂的复杂代码,再加上企业版的还有贵一点(虽然对我来说只要适合我用就都是物超所值),所以锁定了开源版本。开源的几个版本也是研究了很长时间,最后决定选用前后端没有分离的security版本。原因大致是:一是有两个现成的风格(多标签的风格以及单标签的AdminLTE单标签风格),二是自动生成代码也很好用,三是一套代码简洁,没有element UI的前后端两套代码,也许开发能方便一点。当然也有对elementUI还没有学会的原因。说实话,一个人做一个企业级的大平台,尽量少学新的模块吧,技术构成太复杂了。

即使这样,为了掌握人人的开发框架,也还是恶补了不少基础技术:一是学习了shiro的框架,二是学习了VUE的基础知识(虽然以前能够简单维护基于elementUI的一些代码,但是不懂原理),三是mybatis-plus的内容,因为人人自动生成的代码是基于mybatis-plus自动生成的,后续基于这种模式做大量定制开发肯定是必须的。

秀一下初步界面:

感觉还是初步满意的,虽然比起有些商业应用界面稍显单一,但是没有很专业的UI设计师,能有这个效果也很满意了,确实很感谢在开源领域做出贡献的技术大牛,即使收一些费用,也是很好的事情。

在此贡献一个基于mybatis-plus实现自定义关联查询的学习成果。就是renren自动生成的都是单表查询的代码,跟踪代码,发现基本用到了QueryWrapper 的分页查询功能,如上图,需要关联查询一个网关设备的采集通道数量(见上图的通道字段列),这个数量不是在当前数据库表中,为此需要做如下几步:

1,需要修改entity,增加一个字段:

	/**
	 * 通道数量,需要关联查询子表device_comm_channel
	 */
	@TableField(exist = false)
	private Integer channelCount;

2,需要在dao.xml文件中的resultmap中增加一个属性

<result property="channelCount" column="channel_count"/>

3,需要在mapper中增加代码:

    String querySql = "SELECT a.*, count(b.id) as channel_count FROM device_comm AS a LEFT JOIN device_comm_channel AS b ON b.comm_id = a.id GROUP BY a.id ";
    String wrapperSql = "SELECT * from ( " + querySql + " ) AS q ${ew.customSqlSegment}";
    /**
     * 分页查询
     */
    @Override
    @Select(wrapperSql)
    IPage<DeviceCommEntity> selectPage(IPage page, @Param("ew") Wrapper queryWrapper);

    /**
     * 普通查询
     */
    @Select(wrapperSql)
    List<DeviceCommEntity> list(@Param("ew") Wrapper queryWrapper);

    /**
     * 单独查询
     */
    @Select(wrapperSql)
    DeviceCommEntity one(@Param("ew") Wrapper queryWrapper);

重点是要重载BaseMapper中的selectPage方法,以使用自定义的wrapperSql实现分页查询。这个问题找了很久,是基于(https://segmentfault.com/a/1190000023539459)实现的,但是这个代码也有问题,死活不调用自定义的方法,最后跟踪ServiceImpl源代码,才发现需要改为重载selectPage方法。不知道原作者用到的基础依赖版本是否不一样,反正我这个版本需要这么改。

现在,终于可以开始编写业务管理代码了。离能交付应用的产品越来越近了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值