一.今天使用Hibernate要用sql语句进行查询。所以想到用createSQLQuery方法
- StringBuffer sql = new StringBuffer();
- sql.append("select * ");
- sql.append(" from vms_segmentdata t ");
- sql.append(" where t.detectiontime between to_date(?, 'yyyy-MM-dd hh24:mi:ss') and ");
- sql.append(" to_date(?, 'yyyy-MM-dd hh24:mi:ss') ");
- sql.append(" and t.linkid like 'FBD_EH_S____' ");
- Session session = getHisSession();
- @SuppressWarnings("unchecked")
- List<VmsSegmentData> segmentDatas = (session
- .createSQLQuery(sql.toString()).addEntity(VmsSegmentData.class)
- .setString(0, startHour).setString(1, endHour)).list();
2.addEntity表明你要返回的list是什么类型的。默认返回list.;
3.如果想只返回某几列可以这样做:
- StringBuffer sql = new StringBuffer();
- sql.append("select * ");
- sql.append(" from vms_segmentdata t ");
- sql.append(" where t.detectiontime between to_date(?, 'yyyy-MM-dd hh24:mi:ss') and ");
- sql.append(" to_date(?, 'yyyy-MM-dd hh24:mi:ss') ");
- sql.append(" and t.linkid like 'FBD_EH_S____' ");
- Session session = getHisSession();
- @SuppressWarnings("unchecked")
- List<VmsSegmentData> segmentDatas = (session
- .createSQLQuery(sql.toString())
- .addScalar("detectiontime", DateType.INSTANCE)
- .addScalar("vol",IntegerType.INSTANCE)
- .addScalar("linkid", StringType.INSTANCE)
- .addScalar("speed", IntegerType.INSTANCE)
- .setString(0, startHour).setString(1, endHour)).list();
1.addScalar的方法就是你要指定返回的列,第1个参数是要返回的列,第二个参数是类型,但是在select 的时候还是指定"*"号,查询所有但是也只返回指定的列。
总结:不全以后用到再来总结,一下从别人那搬过来也记不住,做过才是理解最深的.
二.关于spring项目项目启动时就初始化类得三种方式:
1.通过实现InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;
2.通过<bean> 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法;
3.在指定方法上加上@PostConstruct或@PreDestroy注解来制定该方法是在初始化之后还是销毁之前调用。
三:关于FASTJSON注解的使用
1.比如我想在实体转json字符串的时候不用实体的某个名字,使用另外一个名字,那么我就可以使用JSONFIELD(name="别名"),实例化出来之后就是你想要的名字了。
@JSONField(name="laneNo")
/* */ private int laneID;
2..如果你想指定某个实体里面的某些属性不参加转化
可以使用这个注解。@JSONField(serialize=false)
/* */ private String direction;
四.关于初始化类在启动的时候实例了两次,我的原因是在web.xml文件中实例化了两次spring的配置文件导致的。