关闭

完成历史数据查询心得

430人阅读 评论(0) 收藏 举报
分类:


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; 
    
  • 这样问题就迎刃而解
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:23941次
    • 积分:594
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类