导航:首页 > 源码编译 > hibernatehql编译sql

hibernatehql编译sql

发布时间:2022-01-19 05:17:35

⑴ Hibernate的HQL和sql有什么区别

sql 面向数据库表查询

hql 面向对象查询

hql : from 后面跟的 类名+类对象 where 后 用 对象的属性做条件

sql: from 后面跟的是表名 where 后 用表中字段做条件

查询

在Hibernate中使用查询时,一般使用Hql查询语句。

HQL(Hibernate Query Language),即Hibernate的查询语言跟SQL非常相像。不过HQL与SQL的最根本的区别,就是它是面向对象的。

⑵ hibernate的hql语句和sql语句一样吗

一样.都是数据库操作语句.
只是有区别.sql语句貌似裸奔.hql整装.......
sql可比作用dos操作的老版windows系统.hql.....windows xp

⑶ 将普通的sql语句改写成用Hibernate框架中的HQL语句。

我猜想你的目的是用hibernate框架来解决上面的查询问题吧,那你不一定非要把sql改为hql语句,因为hibernate中是可以支持原生态的sql语句的,我来给你写一个例子吧

java">Listlist=newArrayList();
Stringsql="SELECTb.*,MAX(l.endDate).bookID=l.bookIDWHEREb.bookNameLIKE'%语%'ANDb.authorLIKE'%王%'GROUPBYb.bookID;";
Sessionsession=this.getSession();
Queryquery=session.createSQLQuery(sql);
list=query.list();
session.close();

其中,session.createSQLQuery(sql)这句话指明了hibernate用的是原生态的sql语句

希望对你有所帮助。

⑷ Hibernate怎么利用配置文件配置HQL/SQL

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<typedef class="org.jbpm.db.hibernate.StringMax" name="string_max" />

<!-- related to ProcessDefintion -->
<!-- ########################### -->
<!-- HQL -->
<query name="QueryUser">
<![CDATA[
FROM User u
WHERE u.username = :username
]]>
</query>
<!--SQL-->
<sql-query name="SqlQueryUser">
<![CDATA[
SELECT
{u.*}
FROM
user u
WHERE
u.user_name = :userName
]]>
<return alias="u" class="com.test.entity.User"/>
</sql-query>

</hibernate-mapping>
hibernate.cfg.xml
---------------------
<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>

<mapping resource="User.hbm.xml"/>

<mapping resource="hibernate.queries.hbm.xml"/>

</session-factory>
</hibernate-configuration>

String username = "";
Session session = ;
Query query = session.getNamedQuery("QueryUser");
//Query query = session.getNamedQuery("SqlQueryUser");
query.setString("username", username);
List userList = query.list();

⑸ Hibernate 的HQL和sql有什么区别

HQL:Hibernate Qusery Language,如果你已经熟悉它,就会发现它跟SQL非常相像。不过 你不要被表面的假象迷惑,HQL是面向对象的(OO,用生命的眼光看待每一个对象,他们是如此 鲜活)。如果你对JAVA和SQL语句有一定了解的话,那么HQL对你简直易如反掌,你完全可以利用在公车上的时间掌握它。 以下从几个方面进行慢慢深入: 1。大小些敏感
大家知道Query是对大小写不敏感的,但是在HQL(前面提到它是OO的)中那么对象类的名称和属性确实大小写敏感的(符合java编程语法)。
如:sElect cat.name from Cat as cat和select cat.name from Cat as cat是一样的
但是:
sElect cat.name from CAT as cat和select cat.name from Cat as cat确实不一样的。 2。from语句
最简单的:
from eg.Cat
它只是简单的返回所有eg.Cat的实例
通常我们此时会为eg.Cat其个别名,因为在query的其余部分可能会用到(参看上边关于大小写
敏感时的例子情形),如:
from eg.Cat as cat 这里as可以省略。
上边只是单表查询,多表的情况如下写法:
from eg.Cat,eg.Dog
from eg.Cat as cat,eg.Dog as dog 3。join相关
(inner) join
left (outer) join
right (outer) join
full join
HQL同样对SQL中的这些特性支持
下面插播一个小话题,关于上边的那些特性,我一直都没怎么用,今天既然说到这里,就想
把上边的几个特性的用法说一下,也算对自己的一个补充:
假设有两个表:部门、员工,下面列举一些数据:
员工(Employee):
ID Name DepNo
001 Jplateau 01
002 Jony 01
003 Camel 02
部门(Department):
ID Name
01 研发部
02 营销部 在Hibernate中我们操纵的都是对象,所以我们操纵的是部门类和员工类
1).(inner) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee join Department as department on employee.DepNo=
department.ID (注意到条件语句我用on 没有用where)
那么执行结果是什么呢?
id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 研发部
002 Jony 01 研发部 2).left (outer) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee left join Department as department on employee.DepNo=
department.ID
那么执行结果又该是什么呢?
id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 研发部
002 Jony 01 研发部
003 Camel null null
{就是说此时我要已第一个表的记录多少为准,第二个表中没有相应纪录的时候填充null}
3). right (outer) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee right join Department as department on employee.DepNo=
department.ID
那么执行结果又该是什么呢?
id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 研发部
002 Jony 01 研发部
null null 02 营销部
{就是说此时我要已第二个表的记录多少为准,第一个表中没有相应纪录的时候填充null} 4。select语句
就是要确定你要从查询中返回哪些对象或者哪些对象的属性。写几个例子吧:
select employee form Employee as employee
select employee form Employee as employee where employee.Name like 'J%'
select employee.Name form Employee as employee where employee.Name like 'J%'
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee right join Department as department on employee.DepNo=
department.ID select elements(employee.Name) from Employee as employee
(不明白elements到底是做什么用的?望给于说明)
等等
5。数学函数
JDO目前好像还不支持此类特性。
avg(...), sum(...), min(...), max(...) count(*) count(...), count(distinct ...), count(all...) 其用法和SQL基本相同 select distinct employee.name from Employee as employee
select count(distinct employee.name),count(employee) from Employee as employee 6。polymorphism (暂时不知道如何解释?)
from com.test.Animal as animal
不光得到所有Animal得实例,而且可以得到所有Animal的子类(如果我们定义了一个子类Cat)
一个比较极端的例子
from java.lang.Object as o
可以得到所有持久类的实例 7。where语句
定义查询语句的条件,举几个例子吧:
from Employee as employee where employee.Name='Jplateau'
from Employee as employee where employee.Name like 'J%'
from Employee as employee where employee.Name like '%u'
在where语句中“=”不光可以比较对象的属性,也可以比较对象,如:
select animal from com.test.Animal as animal where animal.name=dog 8。表达式 在SQL语句中大部分的表达式在HQL中都可以使用:
mathematical operators +, -, *, / binary comparison operators =, >=, <=, <>, !=, like logical operations and, or, not string concatenation || SQL scalar functions like upper() and lower() Parentheses ( ) indicate grouping in, between, is null JDBC IN parameters ? named parameters :name, :start_date, :x1 (这种应该是另一种"?"的变通解决方法) SQL literals 'foo', 69, '1970-01-01 10:00:01.0' Java public static final constants eg.Color.TABBY 其他不必解释了,在这里我只想对查询中的参数问题说明一下:
大家知道在SQL中进行传递参数进行查询的时候,我们通常用PreparedStatement,在语句中写一大堆的“?”,
在hql中也可以用这种方法,如:
List mates = sess.find(
"select employee.name from Employee as employee " +
"where employee.Name=? ",
name,
Hibernate.STRING
);
(说明:上面利用Session里的find方法,在hibernate的api Session中重载了很多find方法,它可以满足你多种形式的查询)
上边是一个参数的情形,这种情况下紧接着引入参数和定义参数的类型,当为多个参数,调用另一个find方法,它的后两个
参数都是数组的形式。 还有另外一种方法来解决上边的问题,JDO也有这样的方法,不过和hibernate的表现形式上有差别,但他们两个骨子里却是
一样的,如:
Query q = sess.createQuery("select employee.name from Employee as employee where employee.Name=:name");
q.setString("name", "Jplateau");
//当有多个参数的时候在此逐一定义
Iterator employees = q.iterate(); 9。order 语句
和sql语句没什么差别,如:
select employee.name from Employee as employee where employee.Name like 'J%' order by employee.ID desc (或者asc) 10。group by 语句
同样和sql语句没什么差别,如: select employee.name,employee.DepNo from Employee as employee group by employee.DepNo select foo.id, avg( elements(foo.names) ), max( indices(foo.names) ) from eg.Foo foo group by foo.id
{Note: You may use the elements and indices constructs inside a select clause, even on databases with no subselects.}
谁帮我解释一下上边两句,谢过! 11。子查询
hibernate同样支持子查询,写几个例子: from eg.Cat as fatcat where fatcat.weight > ( select avg(cat.weight) from eg.DomesticCat cat )

⑹ Hibernate HQL 语句 执行 SQL语句

Long l = (Long)query.uniqueResult();

⑺ 我用的是SSH框架,我怎么才能用程序确定hibernate执行hql或sql成功如hibernate的save、delete方法

你的意思是,你执行一个delete方法后,要返回一个提示吗?

如果是这样,你可以按照下面的例子写:
public boolean delete(User user){
boolean flag = false;
try {
/*具体执行删除操作,此处省略*/
flag = true;
}catch(Exception e) {
/*如果出现异常*/
flag=false;
}

return flag;
}

⑻ 在程序中将HQL转换成sql(100分)

最好的方法是,去看hibernate 的源码,然后,去修改那段 sysout...println(sql) 的sql返回到你的调用处,这样就可以了。

你在修改后,从新编译一下替换原有hibnate包中的类就ok了!!

祝你好运朋友!!!

⑼ 1,hibernate中用hql怎么执行delete的sql语句

Session s = this.getHibernateTemplate().getSessionFactory().openSession();//获取session

Transaction tx = s.beginTransaction(); //打开事务(针对读数据库)

String hql="delete .... where a=?...";//准备hql

s.createQuery(hql).setString("a",值).executeUpdate();//更新

tx.commit();//提交事务

s.close(); //关闭session

⑽ 在使用hibernate框架中是直接使用hql还是执行sql更好一点,如果是hql那么多表查询该如何实现

你好,你使用hibernate的目的就是避免想jdbc那样的面向过程查询。所以你首先要使用hql。你的实体类之间的关系已经在配置文件中或注解中写好,所以多表查询是可以直接用hql语句写出来的,如:String hql="from Student s left join s.course c where s.sname='李晓梅'";
sql是用来解决较复杂的查询语句,你记住这点就行了。

阅读全文

与hibernatehql编译sql相关的资料

热点内容
工作三年的大专程序员 浏览:728
java毕业设计文献 浏览:143
筹码集中度指标源码 浏览:482
listsortjava 浏览:186
plc闪光电路编程实例 浏览:299
socket编程试题 浏览:206
华为的服务器怎么设置从光驱启动 浏览:871
程序员真的累吗 浏览:328
学信网app为什么刷脸不了 浏览:874
天蝎vs程序员 浏览:996
单片机下载口叫什么 浏览:190
程序员的道 浏览:926
云服务器不实名违法吗 浏览:558
怎样查看文件夹图片是否重复 浏览:995
文件怎么导成pdf文件 浏览:808
打开sql表的命令 浏览:103
安卓手机如何面部支付 浏览:38
天元数学app为什么登录不上去 浏览:825
明日之后为什么有些服务器是四个字 浏览:104
安卓系统l1是什么意思 浏览:26