hibernate4中使用createSQLQuery方法执行sql语句的用法

一.今天使用Hibernate要用sql语句进行查询。所以想到用createSQLQuery方法

[sql]  view plain  copy
  1. StringBuffer sql = new StringBuffer();  
  2.         sql.append("select *                                                                      ");  
  3.         sql.append("  from vms_segmentdata t                                                      ");  
  4.         sql.append(" where t.detectiontime between to_date(?, 'yyyy-MM-dd hh24:mi:ss') and        ");  
  5.         sql.append("       to_date(?, 'yyyy-MM-dd hh24:mi:ss')                                    ");  
  6.         sql.append("   and t.linkid like 'FBD_EH_S____'                                       ");  
  7.         Session session = getHisSession();  
  8.         @SuppressWarnings("unchecked")  
  9.         List<VmsSegmentData> segmentDatas = (session  
  10.                 .createSQLQuery(sql.toString()).addEntity(VmsSegmentData.class)  
  11.                 .setString(0, startHour).setString(1, endHour)).list();  
1. s etString()方法是动态绑定,给问号赋值。 记住是从0开始,我写的时候犯了错误。

2.addEntity表明你要返回的list是什么类型的。默认返回list.;

3.如果想只返回某几列可以这样做:

[html]  view plain  copy
  1. StringBuffer sql = new StringBuffer();  
  2.         sql.append("select *                                                                      ");  
  3.         sql.append("  from vms_segmentdata t                                                      ");  
  4.         sql.append(" where t.detectiontime between to_date(?, 'yyyy-MM-dd hh24:mi:ss') and        ");  
  5.         sql.append("       to_date(?, 'yyyy-MM-dd hh24:mi:ss')                                    ");  
  6.         sql.append("   and t.linkid like 'FBD_EH_S____'                                       ");  
  7.         Session session = getHisSession();  
  8.         @SuppressWarnings("unchecked")  
  9.         List<VmsSegmentData> segmentDatas = (session  
  10.                 .createSQLQuery(sql.toString())  
  11.                 .addScalar("detectiontime", DateType.INSTANCE)  
  12.                 .addScalar("vol",IntegerType.INSTANCE)  
  13.                 .addScalar("linkid", StringType.INSTANCE)  
  14.                 .addScalar("speed", IntegerType.INSTANCE)  
  15.                 .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的配置文件导致的。

猜你喜欢

转载自blog.csdn.net/qq_35626763/article/details/80481903