HQL

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();

                     }

              }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值