完成历史数据查询心得

原创 2013年12月04日 09:51:36


0.项目前准备

这是来睿通所做的第一个项目,在正式真枪实弹上手之前组长让我用两个星期来学习项目中要使用但我不熟悉的一些知识。

1.etmvc

etmvc的基础知识这里就不啰嗦了,我就说说我没有注意到的地方:

  1. 在正式做历史数据查询功能时,看到以前同事所写的如下代码看的本人一头雾水,无奈之下向组长求助;
    colums.put("hiCode", "{field:'code',width:100,title:'药品编码'}");
    colums.put("hiClasses", "{field:'classes',width:100,title:'总类别'}");
    colums.put("hiTypeName", "{field:'typeName',width:300,title:'所属类别'}");
    colums.put("hiMedicineName", "{field:'medicineName',width:300,title:'药品名称'}");
    colums.put("hiAgent", "{field:'agent',width:100,title:'剂型'}");
    .........
    
  • 在组长解释下才知道,这里是将数据以json格式装入map中,以键值的形式传入前台(也可以说被前台抓取,easyui真心强大),当然这一系列数据会被循环抓取,然后绑定权限,在前台可以根据给定的权限来进行展示。
  1. 在最初学习etmvc时,愚鲁的我一直在纳闷,这etmvc如何与数据库进交互,在学习时由于自己东拉西扯就是没有抓住重点,所以这个疑问没有解决,自己又很迟钝的忘了请教孙工,这下麻烦大了。做项目时有一段代码死活不明白(可见有疑问就要及时解决,不然肯定要青肠子的),代码如下:
    private Map<String, Object> getHistoryInfoDatas(int page, int rows,
    String enterpriseName,String createTime,String query) throws Exception {
      // 瓶装查询条件sql
      StringBuffer querySql = new StringBuffer("status = ?");
      List<Object> objs = new ArrayList<Object>();
      objs.add(0);
      MenuElementPrivilege mep = this.getMenuElementPrivilege();
      if(enterpriseName != null && !"".equals(enterpriseName)){
        querySql.append(" and ").append("enterpriseEnglishName = ?");
        objs.add(enterpriseName);
        if(mep!=null&&mep.getMerData()!=null){
          if(mep.getMerData().contains(enterpriseName)){
            querySql.append(" and ").append("(enterpriseEnglishName = ?)");
            objs.add(enterpriseName);
          }else{
            querySql.append(" and ").append("(enterpriseEnglishName = ?)");
            objs.add("enterpriseEnglishName");
          }
        }
      }else{
        if(mep!=null&&mep.getMerData()!=null){
          StringBuffer str = new StringBuffer();
          String [] datas = mep.getMerData().split(",");
          for(int i = 0; i < datas.length; i++) {
            str.append("'").append(datas[i]).append("'");
            if(i!=datas.length-1)
              str.append(",");
          }
          querySql.append(" and ").append("(enterpriseEnglishName in ("+str.toString()+"))");
        }
      }
      if(null!=createTime&&!"".equals(createTime)){
        querySql.append(" and ");
        querySql.append("DATE_FORMAT(createTime,'%Y-%m-%d') = '");
        querySql.append(createTime);
        querySql.append("'");
      }
      if (query != null && !"".equals(query)) {
        querySql.append(" and ").append(" (code like ? or classes like ? or typeName like ? or medicineName like ? )");
        objs.add("%"+query+"%");
        objs.add("%"+query+"%");
        objs.add("%"+query+"%");
        objs.add("%"+query+"%");
        
      }
      // 查询总条数
      long count = HistoryInfo.count(HistoryInfo.class, querySql.toString(), objs.toArray());
    
      // 根据条件查询数据集
      List<HistoryInfo> list = HistoryInfo.findAll(HistoryInfo.class,querySql.toString(), objs.toArray(), "createTime desc", rows, (page - 1) * rows);
      Map<String,Object> result = new HashMap<String,Object>();
      result.put("total",count);
      result.put("rows", list);
      result.put("page", page);
      return result;
      }
    
  • 看到这段代码初学者可定会小郁闷一番(当然理解力牛逼的人除外),这select * from .... 在哪?呵呵,不要急 ,HistoryInfo?.class 就相当select * fromHistoryInfo?

,而前段代码中的sql语句就相当于 where 之后的句子,是不是很简单,但本人当时的确不会。这样的查询方式与ibatis 及hibernate 相比到底有什么优劣势,本人目前还真不知道,这问题留给将来的自己吧!

  1. etmvc 当然还有好多地方太不熟悉,但这需要多动手,多看代码,多向高手请教,etmvc的总结就到这里吧。

2. easyui

  • 这几年国内优秀的开源框架越来越多,这都是牛人们辛勤耕耘的成果啊,表示一下对他们的尊敬先。easyui就是一个非常棒的成果之一,Query EasyUI是一组基于jQuery的UI插件集合,在学习期间也遇到了不少问题。
  • 首先是对一个整体的把握不够好,学习时完全抓不住重点,导致使用时问题多多,比如对DataGrid使用的一塌糊涂,这里就从DataGrid说起。
  • 其次学习一个东西时,应先抓住重点:
    • 第一、它是用来干什么的。
    • 第二、它有什么特点。
    • 第三、它怎么用。
  • 还是拿datagrid来说事,在这次开发中用的最多的easyui插件就是datagrid
    • 1>首先他会将前面标题1 中装入colums的数据抓出来。也就是说它是用来展现数据的,
    • 2>他抓取的数据是以json的格式传入的
    • 3>datagrid有许多方法,时间,属性需要对其使用熟练,比如在做分页导出时,我想了好半天就是想不出方法,只好再次向孙工求救!在孙工帮助下问题解决了,而解决分页问题时,对datagrid方法,时间,属性等的使用就是一个综合能力的考验。首先要将数据分页导出,那么必须抓取页面上数据内容,也就是 datagrid 中的数据。
  • 当datagrid加载过一次后,他会将加载之后的内容记忆,那么只需拿出datagrid中的内容就可以了,但是如何拿出呢,请看如下代码:
    //设置分页控件
    var pg = $('#data').datagrid('getPager');
    //拿出当前的页数与每页显示的数据量
    var rows = $(pg).pagination('options').pageSize;
    var page = $(pg).pagination('options').pageNumber; 
    
  • 这样问题就迎刃而解

相关文章推荐

组态王历史数据查询例程

  • 2009年08月24日 21:39
  • 669KB
  • 下载

Ifix历史数据离线查询工具

  • 2016年08月05日 15:29
  • 3.3MB
  • 下载

紫金桥组态软件内置SQL查询历史数据

紫金桥监控组态软件的内置SQL查询功能,主要用于紫金桥实时数据库查询历史数据和报警记录,还可以查询实时数据和统计数据,配合自由报表和起始时间控件,能够快速灵活的查询需要数据。   下面通过示例工程...

基于历史数据查询的爬虫操作

网站:http://www.szmb.gov.cn/article/QiXiangJianCe/ 目的:抓取过去一年内深圳各个区的逐小时降雨数据 历史查询需要通过网页中的日历控件选择,而且日历控件...
  • liuph_
  • liuph_
  • 2016年07月03日 13:26
  • 1203

BMC历史数据保存时间

  • 2013年02月20日 16:49
  • 102KB
  • 下载

股票历史数据(十年以上)

  • 2016年11月23日 03:24
  • 35KB
  • 下载

如何删除statspack生成的历史数据

当用$ORACLE_HOME/rdbms/admin/spauto.sql创建一个默认的job以后,数据库中会每1个小时收集一次快照,方便我们可以随时用$ORACLE_HOME/rdbms/admin...
  • xyz846
  • xyz846
  • 2012年04月22日 22:45
  • 486

补全历史数据周期脚本

  • 2014年03月20日 17:38
  • 6KB
  • 下载

历史数据迁移总结

这段时间一直忙于一个项目的历史数据迁移,这期间遇到的问题千奇百怪,可以说杯具是接二连三。现将这些问题简单总结一下: 第一个问题:不知道老系统的数据库结构和代码的结构,客户只给了我们一个运行包和dmp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:完成历史数据查询心得
举报原因:
原因补充:

(最多只允许输入30个字)