【Hiberante】hql常用语法

 

一,简介

     Hql全称Hibernate Query Language,是以对象的方式进行查询,将查询语句封装为对象操作,是完全的面向对象的查询语句。具备多态、关联等特性。

     优点:可读性好,符合Java程序员的变成习惯。

     缺点:不够成熟,调试不灵活。

     常用规则:在hql语句中,不区分大小写,但是类和属性名称,必须区分大小写。

二,常用属性如下

                                                 

完整的sql的语句形式和如下;

select/Update/delete.... from...iwhere.... group by.... having.... order by ....asc/desc
其实hql和sq语句上很多地方都相同,掌握了slq完整的语法形式,hql就很容易上手了,注意下不同即可。


三,常用详细介绍

1,单一属性查询
返回结果集属性列表,元素类型和实体类中相应的属性一致
2,多个属性查询
 返回集合中的元素是object数组,其中数组元素的类型和对应属性在实体类中的类型一致 

	   /*//2查询多个属性,返回对象数组集合
			   //数组元素的类型和查询的属性类型一致,数组的长度和Select中查询的属性个数一致
			   List  students = session.createQuery("select name,id from Student").list();
			   for(Iterator iter = students.iterator();iter.hasNext();){
				   Object[] obj = (Object[])iter.next();
				   //打印出第一个和第二个
				   System.out.println(obj[0]+","+obj[1]);
			   }*/,

 3,参数绑定

Hibernate对动态参数查询提供了丰富的支持,主要的有2种。

(1)占位符绑定,也叫按参数位置绑定

Hql中查询语句用“?”来定义参数位置。

	 org.hibernate.Query query =  session.createQuery("select s.name,s.id from Student s where s.name like ?");
	 query.setParameter(0,"%0%");
         List students = query.list();

第一个参数代表绑定的参数在hql语句中出现的位置编号(从0开始编号),第二个参数代表参数实际值。

在开发中,提供使用按照名称绑定参数,因为可以提供好的程序可读性,而且提高程序的易维护性。因为查询参数的位置发生改变时,按照名称绑定参数的方式是不需要调整代码顺序的。但是参数位置绑定这个时候,就会乱套了。

 优化:

将上述代码方法修改成为链式样式,更加简单明了,建议采用这种方式。

   //方法连变成,建议采用这种方式
			 List students =  session.createQuery("select s.name,s.id from Student s where s.name like ?")
					   .setParameter(0, "%0%")
					   .list();

(2)参数名称绑定

    在HQL语句中定义参数要用“:”开头,形式如下:

 //可以采用参数名的范式传递参数
 List students =  session.createQuery("select s.name,s.id from Student s where s.name like :name")
					   .setParameter("name", "%0%")
					   .list();
上面的:name定义了参数名称name,然后通过setParameter设置参数值。?SetParameter包含两个参数,分别是命名参数名称和命名参数实际值。

4,in子句

  //用参数名称方式查询学号为1,2,3的学生
			  /* List students =  session.createQuery("select s.name,s.id from Student s where s.id in(:ids)")
					  .setParameterList("ids", new Object[]{1,2,3,4,5})
					  .list();*/
5,可以使用mysql的一些常用函数
   //用mysqls的DateFormat函数
			/*   List students =  session.createQuery("select s.name,s.id from Student s where date_format(s.createTime,'%Y-%m')=?")
						 .setParameter(0, "2009-08") //第一个0是索引
						  .list();*/
6,分页查询
   //Hiberante的分页代码
			/*   List students =  session.createQuery(" from Student")
					   .setFirstResult(1)
                       .setMaxResults(2)
			           .list();*/

7,对象导航查询

一个实体中需要有另一个实体的对象集合或实体

如下:user实体中包含了Clsses(班级)的实体

public class Student {

	private int id;
	
	private String name;

	private Date createTime;
	
	private Classes classes;
       //get和Set方法省略
}
如果想通过Student实体查询其所在的班级,可以用如下的hql语句。
  //对象导航查询,因为一个对象中包含另一个对象,所以可以直接取其属性
 //List students =  session.createQuery(" from Student s where s.classes.name like '%班级2%'").list();

8,连接同样适用

   //链接查询---内连接
	 //List students =  session.createQuery("select c.name,s.name from Student s join s.classes c").list();
			   
	 //左连接
	 //List students =  session.createQuery("select c.name,s.name from Student s  left join s.classes c").list();
         //右链接
      //List students =  session.createQuery("select c.name,s.name from Student s  right join s.classes c").list();

9,统计查询
 /*  //统计查询
	 List list =  session.createQuery("select count(*) from Student s ").list();
	 //count返回是long
         Long count=(Long)list.get(0); 
	  System.out.println("count="+count);*/
10,分组查询
  //分组查询:
 String  hql="select c.name ,count(s) from Classes c join c.students s group by c.name order by c.id";
 List students = session.createQuery(hql).list();
            for( int i=0;i<students.size();i++){
	  Object[] obj=(Object[])students.get(i);
	  System.out.println(obj[0]+","+obj[1]);
	   }

小结:

    hql不太熟悉的是,参数查询、分页查询、对象导航查询,需要重点看,其他的sql中很熟悉,就当复习了。

 

Hibernate 是一种流行的 ORM(对象关系映射)框架,它可以帮助开发者将 Java 对象映射到关系型数据库中。下面是使用 Hibernate 的基本步骤: 1. 引入 Hibernate 的依赖包(jar 文件)和数据库驱动程序。 2. 配置 Hibernate 的配置文件(hibernate.cfg.xml)和映射文件(*.hbm.xml)。 - 配置文件中包括数据库连接信息、Hibernate 的配置参数以及其他信息。 - 映射文件中定义了 Java 对象和数据库表之间的映射关系。 3. 在 Java 代码中创建 SessionFactory 对象,并使用该对象创建 Session 对象。 - SessionFactory 是线程安全的,应该在应用程序启动时创建。 - Session 是轻量级的,应该在每个事务或操作中创建。 4. 使用 Session 对象来执行 CRUD(增删改查)操作。 - 使用 save() 方法来插入新数据,使用 delete() 方法来删除数据,使用 update() 方法来修改数据,使用 get() 或 load() 方法来查询数据。 5. 在程序结束时关闭 Session 对象和 SessionFactory 对象。 下面是一个使用 Hibernate 进行 CRUD 操作的示例代码: ``` // 创建 Configuration 对象,并读取 hibernate.cfg.xml 配置文件 Configuration configuration = new Configuration().configure(); // 创建 SessionFactory 对象 SessionFactory sessionFactory = configuration.buildSessionFactory(); // 创建 Session 对象 Session session = sessionFactory.openSession(); // 插入新数据 Dog dog = new Dog("Tom", 2); session.save(dog); // 查询数据 Dog dog1 = (Dog) session.get(Dog.class, 1); // 修改数据 dog1.setAge(3); session.update(dog1); // 删除数据 session.delete(dog1); // 关闭 Session 对象和 SessionFactory 对象 session.close(); sessionFactory.close(); ``` 这是一个简单的 Hibernate 示例,你可以根据自己的需要添加更多的数据操作和业务逻辑。同时,你也需要熟悉 Hibernate 的各种配置参数和 API,以更好地使用 Hibernate 进行开发。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值