HQL(Hibernate Query Language)
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:
Queryq = session.createQuery(hql);
from Person
from User userwhere user.name=:name
from User userwhere user.name=:name and user.birthday < :birthday
例:
第一步:创建数据库user
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`birthday` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
第二步:设计domain对象User
packagecom.hbsi.domain;
importjava.util.Date;
public class User {
private int id;
private String name;
private Date birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
第三步:加入hibernate.jar和其依赖的包
自己导入
第四步:编写User.hbm.xml映射文件,可以基于hibernate/eg目录下的org/hibernate/auction/User.hbm.xml修改
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="com.hbsi.domain">
<class name="User"table="user">
<id name="id"column="id" >
<generator class="native"/>
</id>
<property name="name"/>
<property name="birthday"/>
</class>
</hibernate-mapping>
第五步:编写hibernate.cfg.xml配置文件,可以基于hibernate/etc/hibernate.cfg.xml修改;必须提供的几个参数:
connection.driver_class、connection.url、connection.username、connection.password
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/HibernateConfiguration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///java</property>
<property name="connection.username">root</property>
<property name="connection.password">1234</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="com/hbsi/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>、dialect、hbm2ddl.auto
第六步:编写HibernateUtils类,主要用来完成Hibnerate初始化和提供一个获得Session的方法;这步可选
packagecom.hbsi.hiberbate.util;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.cfg.Configuration;
publicfinal class HibernateUtil {
private static SessionFactorysessionFactory;
private HibernateUtil(){
}
static{
Configuration cfg=newConfiguration();
cfg.configure();//
sessionFactory=cfg.buildSessionFactory();
}
public static SessionFactorygetSessionFactory() {
return sessionFactory;
}
public static Session getSession(){
returnsessionFactory.openSession();
}
}
第七步:根据姓名实现HQL查询
importjava.util.List;
importorg.hibernate.Query;
importorg.hibernate.Session;
importcom.hbsi.domain.*;
importcom.hbsi.hiberbate.util.HibernateUtil;
publicclass QueryTest {
/**
*@param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
query("222");
}
public static void query(Stringname){
Session s=null;
try{
s=HibernateUtil.getSession();
StringqueryString="from User user where user.name=:n";//hibernate
Queryquery=s.createQuery(queryString);
query.setString("n",name);
query.setFirstResult(0);
query.setMaxResults(2);
List<User>list=query.list();
for(User u:list){
System.out.println(u.getId()+" "+u.getName()+" "+u.getBirthday());
}
//User user=(User)query.uniqueResult();
//System.out.println(user.getId()+" "+user.getName()+" "+user.getBirthday());
}finally{
if(s!=null)
s.close();
}
}
}