您的位置:首页 > 产品设计 > UI/UE

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

2015-08-26 19:16 441 查看
下班了,公司人都走了,还好这是一个不加班的公司,比上一家公司好多了,能学得东西也多了,唯一不好的就是老板太抠,工资太少,没奖金,等等,等,不过这些都是小事。哥是来学技术的,到时候学到手了,不愿意留人我就得走了。梦想是要进大公司的。

写文章相当于做每天的笔记吧,家里电脑也烂了。写不了,就在公司写写。

一.今天使用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();
1.setString()方法是动态绑定,给问号赋值。 记住是从0开始,我写的时候犯了错误。

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的配置文件导致的。

1.这就是今天的收获吧,写的不好,也有点赶时间。就当一个日记吧,希望在这条路上走的越来越好,也希望和我的女朋友关系变好。就这样,祝大家工作愉快,注意身体!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: