`

Hibernate使用纯sql进行查询,更新

阅读更多

参考文章: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.Role
1--超级管理员--ROLE_ADMIN
2--维修人员--ROLE_MAINTENANCE
3--客服人员--ROLE_SERVICER
4--车辆用户--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
0
分享到:
评论
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();  
            }});  
    } 
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 就报错
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();
			}});
	}
10 楼 zhangzi 2012-03-16  
zqb666kkk 写道
zhangzi 写道
public List<Object[]> getRoles(){  
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传  参数进去- -!

可以的

怎么传  示例代码写下

跟HQL格式一样,你试试

试了 不行

那就拼接字符串了,原始的那种

拼接你也得有 动态的参数传进去啊

....那就传啊,这个例子没有参数,所以没传啊

传不了 你试下 就知道了 会报错

应该可以传的,报错就找出原因,贴出来看看
9 楼 zqb666kkk 2012-03-16  
zhangzi 写道
public List<Object[]> getRoles(){  
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传  参数进去- -!

可以的

怎么传  示例代码写下

跟HQL格式一样,你试试

试了 不行

那就拼接字符串了,原始的那种

拼接你也得有 动态的参数传进去啊

....那就传啊,这个例子没有参数,所以没传啊

传不了 你试下 就知道了 会报错
8 楼 zhangzi 2012-03-16  
public List<Object[]> getRoles(){  
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传  参数进去- -!

可以的

怎么传  示例代码写下

跟HQL格式一样,你试试

试了 不行

那就拼接字符串了,原始的那种

拼接你也得有 动态的参数传进去啊

....那就传啊,这个例子没有参数,所以没传啊
7 楼 zqb666kkk 2012-03-16  
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传  参数进去- -!

可以的

怎么传  示例代码写下

跟HQL格式一样,你试试

试了 不行

那就拼接字符串了,原始的那种

拼接你也得有 动态的参数传进去啊
6 楼 zhangzi 2012-03-16  
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传  参数进去- -!

可以的

怎么传  示例代码写下

跟HQL格式一样,你试试

试了 不行

那就拼接字符串了,原始的那种
5 楼 zqb666kkk 2012-03-16  
zhangzi 写道
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传  参数进去- -!

可以的

怎么传  示例代码写下

跟HQL格式一样,你试试

试了 不行
4 楼 zhangzi 2012-03-16  
zqb666kkk 写道
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传  参数进去- -!

可以的

怎么传  示例代码写下

跟HQL格式一样,你试试
3 楼 zqb666kkk 2012-03-16  
zhangzi 写道
zqb666kkk 写道
getRoles 这个 方法没法传  参数进去- -!

可以的

怎么传  示例代码写下
2 楼 zhangzi 2012-03-16  
zqb666kkk 写道
getRoles 这个 方法没法传  参数进去- -!

可以的
1 楼 zqb666kkk 2012-03-14  
getRoles 这个 方法没法传  参数进去- -!

相关推荐

    hibernate中连接sqlserver的JDBC包jtds

    JTDS是一个开放源代码的100%纯Java的,用于JDBC 3.0驱动Microsoft SQL Server (6.5 ,7 ,2000和2005版本)驱动程序。在hibernate连接sqlserver数据库时最好用这个。。

    hibernate3.0纯jar包

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程语言(如Java)来操作数据库,而无需直接编写SQL语句。在Hibernate 3.0版本中,这个框架已经相当成熟,提供了许多功能和优化,使得...

    使用Hibernate连接MySql的入门小程序

    在Java编程领域,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,将复杂的SQL查询转换为简单的Java对象操作。本入门程序将带你了解如何使用Hibernate连接MySQL数据库,实现数据的增删改查功能...

    hIbernate超纯净开发包

    接着,我们定义实体类,使用注解或XML方式配置ORM映射,通过SessionFactory创建Session,然后在Session上执行查询、保存、更新和删除操作。 这个超纯净的开发包简化了开发过程,让开发者能快速搭建一个基于...

    纯净的spring+hibernate+mysql

    Spring MVC和Hibernate会与MySQL进行交互,执行查询和更新操作来完成登录和注册功能。 **登录与注册功能的实现**: 1. **注册**:用户填写注册信息,如用户名、密码、邮箱等。Spring MVC的Controller接收这些信息,...

    hibernate框架基础教程适合新手

    Hibernate是一个对象关系映射(ORM)框架,它允许Java开发者将业务对象与数据库表进行映射,通过面向对象的方式处理数据库事务,减少了对SQL的直接依赖,提高了代码的可读性和可维护性。 2. **安装与配置** 开始...

    纯eclipse + hibernate 例子

    在本教程中,我们将深入探讨如何使用纯Eclipse集成开发环境(IDE)和Hibernate ORM框架构建一个简单的Java项目。Hibernate是一个强大的对象关系映射(ORM)工具,它允许开发者使用面向对象的方式处理数据库操作,而...

    纯sql分页源码java版

    本资源提供的"纯sql分页源码java版"聚焦于如何在Java中利用SQL语句实现分页查询,支持Oracle、MySQLser(可能是MySQL Server的误写)和MySQL三种不同的数据库系统。以下将详细讲解这个主题。 首先,分页的核心思想...

    Jdbc 和hibernate

    - 执行SQL查询或更新 - 处理结果集 - 关闭资源 然而,尽管JDBC提供了通用的数据库访问方式,但直接使用JDBC编写代码可能会导致大量重复和冗余的数据库操作代码,这使得维护和扩展变得困难。 **Hibernate** 是一...

    Hibernate学习笔记整理

    * 面向纯 SQL 语句的编程 * 面向过程的编程 * 没有数据缓存 * 事务是自动开启的,可能存在安全性的隐患 Hibernate 的优点 * 是一个 ORM 框架 * 操作数据库的框架 * 面向对象编程的代码编程比较简单 * 做到了数据...

    Hibernate 50个 英文面试题和答案

    Hibernate支持两种查询语言:HQL(Hibernate Query Language),类似于SQL但面向对象;以及Criteria API,提供更类型安全和可读性强的查询方式。 8. Hibernate如何处理关联? Hibernate支持多种关联映射,包括一...

    SpringBoot整合Hibernate纯注解版

    以上就是Spring Boot整合Hibernate纯注解版的基本配置和使用。通过这种方式,开发者可以专注于业务逻辑,而不必关心繁琐的数据访问层实现。此外,Spring Boot的自动配置和Hibernate的注解方式,使得整个项目结构更加...

    Hibernate JPA 实例

    开发者可以根据项目需求选择使用纯JPA接口,或者结合Hibernate的扩展功能。 4. Hibernate配置: 在实例中,我们需要配置Hibernate,包括指定数据库连接参数、实体类映射信息等。这些通常在`persistence.xml`文件中...

    hibernate最简单的例子,未整合其他框架

    Hibernate提供了Criteria API和HQL(Hibernate Query Language)进行动态查询。Criteria API允许程序构建查询条件,而HQL是一种面向对象的查询语言,类似于SQL,但更贴近Java编程思维。 7. 事务处理: Hibernate...

    Spring+SpringMVC+Hibernate(纯注解版本)

    Spring、SpringMVC和Hibernate是...总之,Spring+SpringMVC+Hibernate的纯注解版本降低了配置复杂性,提高了开发效率,是现代Java Web开发的常见选择。熟悉这些框架的使用和集成,对提升开发能力和项目质量大有裨益。

    Hibernate实体层设计

    Hibernate是一个开源的ORM框架,它将Java对象与数据库表进行映射,实现了对象与SQL的解耦,使得开发者可以使用面向对象的方式来操作数据库。通过Hibernate,我们可以避免大量繁琐的JDBC代码,提高开发效率。 二、...

    纯hibernate增删改差基本操作,入门实例.

    总结,本实例旨在提供一个纯 Hibernate 的基础操作入门,通过实体类映射数据库表,利用 Session 和 Transaction 进行 CRUD 操作,以及使用 HQL 进行数据查询。这个实例对于初学者来说是理解 Hibernate 工作原理和...

    Hibernate架包和mysql驱动包

    JDBC驱动分为四个类型,MySQL驱动属于Type 4,即纯Java非协议驱动,它直接与MySQL服务器进行通信,无需依赖特定的操作系统或数据库系统。 使用MySQL驱动包时,开发者需要在程序中加载驱动,创建数据库连接,并通过...

    sql连接常用jar包

    在Java编程中,SQL连接是不可或缺的部分,它使得应用程序能够与数据库进行交互,执行查询、更新等操作。本文将深入探讨“sql连接常用jar包”这一主题,介绍如何在Java项目中配置和使用这些jar包,以及它们在SQL连接...

    hibernate.properties详解

    这部分定义了查询语言的常量和函数名,对于使用Hibernate HQL(Hibernate Query Language)进行查询非常重要。 - **hibernate.query.substitutions**:用于替换查询中的某些值。例如,在这里设置`yes`和`no`的对应...

Global site tag (gtag.js) - Google Analytics