1. 程式人生 > >hibernate4中使用createSQLQuery方法執行sql語句的用法

hibernate4中使用createSQLQuery方法執行sql語句的用法

下班了,公司人都走了,還好這是一個不加班的公司,比上一家公司好多了,能學得東西也多了,唯一不好的就是老闆太摳,工資太少,沒獎金,等等,等,不過這些都是小事。哥是來學技術的,到時候學到手了,不願意留人我就得走了。夢想是要進大公司的。

寫文章相當於做每天的筆記吧,家裡電腦也爛了。寫不了,就在公司寫寫。

一.今天使用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.這就是今天的收穫吧,寫的不好,也有點趕時間。就當一個日記吧,希望在這條路上走的越來越好,也希望和我的女朋友關係變好。就這樣,祝大家工作愉快,注意身體!