工作笔记系列-学习的零零碎碎的技术

    1.使用sqlQuery的时候:

  sqlQuery.addEntity(实体类.class).list();  //在使用sqlQuery.list()之前使用addEntity可以将查询出来的数据自动转化给我们添加的实体类对象

  List<实体类> dbLiist=sqlQuery.addEntity(实体类).list();  //这样dbList 就成为了实体类对象的集合

  

 

  这是高效遍历map集合的:

  Map<String,GpsVehicle> plates=new HashMap<String,GpsVehicle>();

  Set<Entry<String, GpsVehicle>> set=plates.entrySet();
  Iterator<Entry<String, GpsVehicle>> i= set.iterator();

  while(i.hasNext()){

  Entry<String, GpsVehicle> entity=i.next(); //获取map当前条数

  entity.getKey(); //获取当前条的key

  entity.getValue(); //获取当前条的value

  }

 

  对于sql的in 和 exists

  我们先讨论IN和EXISTS。
     select * from t1 where x in ( select y from t2 )
     事实上可以理解为:
     select *
       from t1, ( select distinct y from t2 ) t2
      where t1.x = t2.y;
     ——如果你有一定的SQL优化经验,从这句很自然的可以想到t2绝对不能是个大表,因为需要对t2进行全表的“唯一排序”,如果t2很大这个排序的性能是不可忍受的。但是t1可以很大,         为什么呢?最通俗的理解就是因为t1.x=t2.y可以走索引。但这并不是一个很好的解释。试想,如果t1.x和t2.y都有索引,我们知道索引是种有序的结构,

     因此t1和t2之间最佳的方案是走 merge join。另外,如果t2.y上有索引,对t2的排序性能也有很大提高。
    

     select * from t1 where exists ( select null from t2 where y = x )
     可以理解为:
     for x in ( select * from t1 )
     loop
        if ( exists ( select null from t2 where y = x.x )
        then
           OUTPUT THE RECORD!
        end if
     end loop
     ——这个更容易理解,t1永远是个表扫描!因此t1绝对不能是个大表,而t2可以很大,因为y=x.x可以走t2.y的索引。
     综合以上对IN/EXISTS的讨论,我们可以得出一个基本通用的结论:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

     而not in 在任何情况下 都比不上 not exists

 

 

  在开发webService时:

  前台页面使用flex进行参数传递,传递过来的参数的属性一定设置为private   否则报错

 

  前台Flex设置图片的时候,再次请求地址会无法更换图片,因为Flex会根据URL读取图片缓存:

    为了方便使用,当时设置写入图片的时候名字统一为 Logo.jpg 所以URL是没有变化的  。

    现在更改为 图片就使用原名称   这样更改图片后url会改变.  达到了不读取缓存的效果

 

    在oracle中使用connect by prior start with进行递归查询

      语法:select * from sys_company connect by prior company_id=parent_company start with company_id='1'

    分析:查询sys_company  从company_id='1' 开始查询     于是获得到company_id='1'  的这条数据的company_id   其实这里是把查询条件和递归条件用在了一起 

    也可以这样

    select * from sys_company connect by prior company_id=parent_company start with company_name='运输企业'

    分析:查询sys_company 从company_Name='运输企业' 开始查询   于是获得到了company_name='运输企业' 这条数据

    ① 紧接着拿取这条数据的company_id   

    ② 紧接着:查询出所有parent_company等于刚才查询出的company_id的数据.

    ③ 这些数据可能会有很多条   ,那么一条一条的解析: 

    ④ 从第一条开始:这里返回①

    

    一直跑到没有company_id=parent_company就到了尽头

 

    使用criteria查询的时候  使用到in  

    c.add(restrictions.in("aaa",new List()))

    在这里如果list为空或者size为零的话  那么会报一个确实表达式的错误  

     转换就成了 sql select * from gps_vehicle where vehicle.vehicle_id in ()   所以报缺失表达式的错误

 

    

    在使用对象的时候  尽量在使用的时候再进行new操作  不要一声明下来就new 

    在使用arrayList的时候  最好是能够指定长度为最好   比如分页读取数据库的时候  长度肯定就是size那么长 直接指定长度就好了

 

  

    使用双重循环的时候:使用下列方法可以一次终止两个循环

     label1:  //没错 你没有看错  就是冒号结尾
      for (int i = 0; i < 100; i++) {
        System.out.println("i是:"+i);
             for (int j = 0; j < 5; j++) {
                System.out.println("j是:"+j);
                  if(i==22){
                      break label1;
                  }
              }
          }

 

 

 

     在使用thrift的时候 ,直接使用impl进行了数据库的操作,那么这个时候,我们需要给这个impl加上@Transactional(readOnly=true)     者 @Transactional(readOnly=false)。不然hibernate会报  不在安全的会话中操作数据库

 

在工作中遇到一个问题 给设置时间的时候:

user.setLoginTime(new Date());
或者
user.setLoginTime(Calendar.getInstance().getTime());


 报错:

最后原因:使用的mySql5.6  而开发的时候使用并不是5.6  
而mySql5.6的升级是对date类型进行了调整,所以保存的时候报错

解决方案:
降低mySql版本到开发版本,或者更换支持mySql5.6的jar包


  在我们页面和dao层交互的时候

  页面对象(Action对象)  和  dao层的持久化对象(entity)

  比如修改一个对象或者创建一个对象,那么我们需要大量的从页面赋值给entity对象

  我们可以使用spring的

  BeanUtils.copyProperties(Action对象,entity);

 

  使用myEclipse的时候,有时我们会手动修改文件。比如使用editPlus进行修改,这时候再使用myEclipse的时候,我们要先将项目进行refresh(F5)再使用。不然可能会引起一些不好麻烦。

posted on 2014-04-23 11:12  ★丶下面有请゛  阅读(152)  评论(0编辑  收藏  举报

导航