参考文章:http://jihongbin12329.iteye.com/blog/88678
?
以角色表为例子
?
数据库表Role中(Role_Id, RoleDescription, RoleName)三个字段
?
RoleDAOImpl.java
?
public List<Object[]> getRoles(){ return getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.createSQLQuery("select Role_Id, RoleDescription, RoleName from dbo.Role"); return q.list(); } });}
测试:
?
//测试public static RoleDAOImpl getFromApplicationContext(ApplicationContext ctx) { return (RoleDAOImpl) ctx.getBean("roleDAO");}public static void main(String args[]){ RoleDAOImpl dao = getFromApplicationContext(new ClassPathXmlApplicationContext("spring/applicationContext*.xml")); List<Object[]> roles = dao.getRoles(); for(Object[] role : roles){ System.out.println(role[0]+"--"+role[1]+"--"+role[2]); } }
?
控制台打印结果:
Hibernate: select Role_Id, RoleDescription, RoleName from dbo.Role1--超级管理员--ROLE_ADMIN2--维修人员--ROLE_MAINTENANCE3--客服人员--ROLE_SERVICER4--车辆用户--ROLE_DRIVER
?PS:
?????? 需要注意的是:如果是insert,update delete操作的时候需要队session进行flush和clear,不然控制台打印执行语句了,但是数据库中的数据不会改变。
??????如:
????
sql = "UPDATE [dbo].[ALARM_PROCESS] SET LONGITUDE="+jws[0]+", LATITUDE="+jws[1]+", SPEED="+jws[2]+", LOCATION_DESC='"+locationDesc+"', CHULI_TAG=1 WHERE VEHICLE_NUM='"+plateNumberAndDate[0]+"' AND ALARM_DATE='"+plateNumberAndDate[1]+"'";Query q = session.createSQLQuery(sql);q.executeUpdate();if(a % 50 == 0){ session.flush(); session.clear();}
???????
?session.flush()是拿数据库与缓存中的数据同步
?当session.clear()后才会引起缓存数据变化
?
??????? 重点:1)createSQLQuery
??????????????????? 2)查询多个字段值返回List<Object[]> 或 Object[]
????????????????????????? 查询一个字段值返回List<String> 或 String
今天测试了下不行啊session.flush()和session.clear()????
?
还是用下面的可以
?
Session session = getSession();Transaction t = session.beginTransaction(); t.begin();try { sql = "UPDATE [ALARM_PROCESS] ......."; session.createSQLQuery(sql).executeUpdate(); t.commit();} catch (HibernateException e) { t.rollback();} finally{ session.close();}
?
?
?
1 楼 zqb666kkk 2012-03-14
getRoles 这个 方法没法传 参数进去- -!
2 楼 zhangzi 2012-03-16
zqb666kkk 写道
getRoles 这个 方法没法传 参数进去- -!
可以的
3 楼 zqb666kkk 2012-03-16
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传 参数进去- -!
可以的
怎么传 示例代码写下
4 楼 zhangzi 2012-03-16
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传 参数进去- -!
可以的
怎么传 示例代码写下
跟HQL格式一样,你试试
5 楼 zqb666kkk 2012-03-16
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传 参数进去- -!
可以的
怎么传 示例代码写下
跟HQL格式一样,你试试
试了 不行
6 楼 zhangzi 2012-03-16
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传 参数进去- -!
可以的
怎么传 示例代码写下
跟HQL格式一样,你试试
试了 不行
那就拼接字符串了,原始的那种
7 楼 zqb666kkk 2012-03-16
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传 参数进去- -!
可以的
怎么传 示例代码写下
跟HQL格式一样,你试试
试了 不行
那就拼接字符串了,原始的那种
拼接你也得有 动态的参数传进去啊
8 楼 zhangzi 2012-03-16
public List<Object[]> getRoles(){
可以的
怎么传 示例代码写下
跟HQL格式一样,你试试
试了 不行
那就拼接字符串了,原始的那种
拼接你也得有 动态的参数传进去啊
....那就传啊,这个例子没有参数,所以没传啊
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传 参数进去- -!
可以的
怎么传 示例代码写下
跟HQL格式一样,你试试
试了 不行
那就拼接字符串了,原始的那种
拼接你也得有 动态的参数传进去啊
....那就传啊,这个例子没有参数,所以没传啊
9 楼 zqb666kkk 2012-03-16
zhangzi 写道
public List<Object[]> getRoles(){
可以的
怎么传 示例代码写下
跟HQL格式一样,你试试
试了 不行
那就拼接字符串了,原始的那种
拼接你也得有 动态的参数传进去啊
....那就传啊,这个例子没有参数,所以没传啊
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传 参数进去- -!
可以的
怎么传 示例代码写下
跟HQL格式一样,你试试
试了 不行
那就拼接字符串了,原始的那种
拼接你也得有 动态的参数传进去啊
....那就传啊,这个例子没有参数,所以没传啊
传不了 你试下 就知道了 会报错
10 楼 zhangzi 2012-03-16
zqb666kkk 写道
zhangzi 写道
public List<Object[]> getRoles(){
可以的
怎么传 示例代码写下
跟HQL格式一样,你试试
试了 不行
那就拼接字符串了,原始的那种
拼接你也得有 动态的参数传进去啊
....那就传啊,这个例子没有参数,所以没传啊
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传 参数进去- -!
可以的
怎么传 示例代码写下
跟HQL格式一样,你试试
试了 不行
那就拼接字符串了,原始的那种
拼接你也得有 动态的参数传进去啊
....那就传啊,这个例子没有参数,所以没传啊
传不了 你试下 就知道了 会报错
应该可以传的,报错就找出原因,贴出来看看
11 楼 zhangzi 2012-03-16
public List<String> getPlateNumbersByVehicleTeamNum(final String vehicleTeamNum){ return getHibernateTemplate().executeFind(new HibernateCallback(){ @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { StringBuffer sb = new StringBuffer(); sb.append("SELECT VEHICLE_NUM FROM VEHICLE WHERE VEHICLETEAM_NUM='").append(vehicleTeamNum).append("' AND RECSTATUS='Y'"); Query q = session.createSQLQuery(sb.toString()); return q.list(); }}); }
12 楼 zqb666kkk 2012-03-16
public List<String> getPlateNumbersByVehicleTeamNum(final String vehicleTeamNum){
return getHibernateTemplate().executeFind(new HibernateCallback(){
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
StringBuffer sb = new StringBuffer();
sb.append("SELECT VEHICLE_NUM FROM VEHICLE WHERE VEHICLETEAM_NUM='").append(vehicleTeamNum).append("' AND RECSTATUS='Y'");
Query q = session.createSQLQuery(sb.toString());
return q.list();
}});
}
不加这个 final 就报错
return getHibernateTemplate().executeFind(new HibernateCallback(){
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
StringBuffer sb = new StringBuffer();
sb.append("SELECT VEHICLE_NUM FROM VEHICLE WHERE VEHICLETEAM_NUM='").append(vehicleTeamNum).append("' AND RECSTATUS='Y'");
Query q = session.createSQLQuery(sb.toString());
return q.list();
}});
}
zhangzi 写道
public List<String> getPlateNumbersByVehicleTeamNum(final String vehicleTeamNum){ return getHibernateTemplate().executeFind(new HibernateCallback(){ @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { StringBuffer sb = new StringBuffer(); sb.append("SELECT VEHICLE_NUM FROM VEHICLE WHERE VEHICLETEAM_NUM='").append(vehicleTeamNum).append("' AND RECSTATUS='Y'"); Query q = session.createSQLQuery(sb.toString()); return q.list(); }}); }
不加这个 final 就报错