在使用Hibernate做开发时,可以直接在源代码里写 HQL/SQL,也可以利用hibernate 实体映射文件中写HQL/SQL
下面介绍在实体映射文件中写HQL/SQL
实体映射文件: user.hbm.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<
hibernate-mapping
>
<
class
name
=
"org.tie.User"
table
=
"user"
catalog
=
"tie"
>
<
id
name
=
"id"
type
=
"long"
>
<
column
name
=
"id"
/>
<
generator
class
=
"native"
/>
</
id
>
<
property
name
=
"name"
type
=
"string"
>
<
column
name
=
"name"
length
=
"45"
not-null
=
"true"
/>
</
property
>
<
property
name
=
"age"
type
=
"integer"
>
<
column
name
=
"age"
not-null
=
"true"
/>
</
property
>
<
property
name
=
"addr"
type
=
"string"
>
<
column
name
=
"addr"
length
=
"45"
not-null
=
"true"
/>
</
property
>
</
class
>
<!-- 这里将Hql语句写到配置文件当中,名字是可以随便取的 -->
<
query
name
=
"getUserInfo"
>
from User where addr=:address and age=:age
</
query
>
</
hibernate-mapping
>
|
hibernate配置文件:hibernate.cfg.xml
1
2
3
4
5
6
7
8
9
|
<xml version=
"1.0"
?>
<DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
<hibernate-configuration>
<session-factory>
<mapping resource=
"User.hbm.xml"
/>
<session-factory>
<hibernate-configuration>
|
java代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/*
* 另外Hibernate允许我们把 sql语句配置到文件中
* 因为写到程序中需要编译的,而写到配置文件中是不需要编译的
*/
public
void
testHQL13(){
Session session = factory.openSession();
//这里通过getNameQuery这个方法来取得到配置文件中的hql语句
Query query = session.getNamedQuery(
"getUserInfo"
);
query.setString(
"address"
,
"Beijing"
);
query.setInteger(
"age"
,
22
);
List<User> users = query.list();
for
(User user : users){
System.out.println(user.getName());
System.out.println(
"---------------"
);
}
session.close();
}
|