hibernate 查询

Hibernate 基本查询

Hibernate 聚合查询和分组查询

Hibernate 分页查询和批量查询

Hibernate 命名查询


                                  基本查询

1、Query接口

     Query是HIbernate专门用来执行HQl语句的查询接口,使用方式:

     Query query = session.createQuery("hql语句");

     query.setParameter(...);

      List resultList=query.list();

2、HQL基本查询

      官方推荐的查询语言,它具有以下功能

      1、条件查询

       2、支持投影查询

       3、分页查询

       4、连接查询

       5、分组查询

       6、子查询 

       7、内置了一些聚集函数

       8、支持动态绑定参数

     

       查询实体类的所有实例对象,方式

      

       hibernate 查询_第1张图片

     hibernate 查询_第2张图片


      查询实体类的单个实例对象,方式;

     

       String hql="from Student";

       Query query = session.createQuery(hql).setMaxResults(1).uniqueResult();

3、Hibernate投影查询

    即查询类的某几个属性,通过用select语句只选择类的部分属性来实现的。方式:

    Query query=session.createQuery("SELECT id,name FROM Student");

    List list=query.list();

     String hql = "select  a.stuName,a.age from Student a";
        Query query = sessiohttp://write.blog.csdn.net/postedit/50803033n.createQuery(hql);

     Listlist=query.list();

     for(Object obfs[] :list){

          for(Object obj:objs){

            System.out.println(obj);

        }

        System.out.println("-----------");

    }

    实例化投影查询结果:在对应实体类中添加初始化这些属性的构造方法即可。

    String hql = "select  new Student (a.stuName,a.age) from Student a";
        Query query = sessio.createQuery(hql);

     List list=(List)query.list();

     for(Student stu:list){

         System.out.println("stu");

     }

        

         指定别名;HQL 可以指定要查询的实体类的别名

        1、用关键字AS制定别名;也可以省略AS,直接加别名

         String sql="SELECT stu.id,stu.name FROM Student AS stu";

         Query query = sessio.createQuery(hql);

         List list =query.list();

4、where 条件查询

      查询符合条件的对象

1、  .

2、比较运算符

3、模式匹配符

4、逻辑运算符

数学运算符: +, -, *, /

  二元比较运算符: =, >=, <=, <>, !=, like

 逻辑操作符: and, or, not

 字符串连接符: ||

 SQL函数,如: upper() and lower()

  圆括号: ( ) 

  in, between, is null

 JDBC输入参数: ?

范围运算符

   in(值1,值2):等于列表中的某一个值

   not in(值1,值2):不等于列表中的某一个值

   between(值1 and 值2):在值1到值2的范围内(包括值1和值2)

          not between 值1and 值2;不再 值1到值2的范围内

      字符串模式匹配:like  ‘字符串模式’

               字符串模式中可用“%”代表任意长度的字符串,  “_”代表任意单个字符

        用于集合的运算符:is empty、is not empty


      String hql="from Student a where a.id not between 5 and 7";

      Query query = sessio.createQuery(hql);



HQL 提供了比较丰富的函数库,经常用的如:

1、字符串相关

  1. <span style="font-size:18px;">SUBSTRIGN(要截取的字符属性字段, 开始位置, 截取长度)   字符截取  
  2. TRIM(字符串对象属性列)      去掉两端的空格  
  3. LOWER(字符串对象属性列)     转换小写  
  4. UPPER(字符串对象属性列)     转换大写  
  5. LENGTH(字段名)              字符长度  
  6. CURRENT_DATE()              数据库当前日期  
  7. CURRENT_TIME()               数据库当前时间  
  8. SECOND(时间属性)             日期中提取秒  
  9. MINUTE(时间属性)             日期中提取分  
  10. HOUR(时间属性)               日期中提取小时  
  11. DAY(时间属性)                日期中提取天  
  12. MONTH(时间属性)              日期中提取月  
  13. YEAR(时间属性)               日期中提取年  
  14. ABS(数值属性)            取绝对值  
  15. SQRT(数值属性)           取平方根  
  16. MOD(数值属性/数值 , 数值属性/数值)  取余数  
  17. MAX(n)               最大值  
  18. MIN(n)               最小值  
  19. COUNT(n)             返回计数  
  20. CONCAT(s1,s2)            连接字符串span>

2、数字相关

       String hql="select new Student (upper(s.stuName)) from Student s";

       Query query = sessio.createQuery(hql);

3、集合相关

4、日期和时间


参数绑定:where 子句中经常需要动态设置查询参数,Hibernate 提供了两种参数绑定的方式。

1、按参数名字绑定

2、按参数位置绑定

@Test
	public void testHql() {
		// 1. 创建query对象
		// 基于位置的参数
		// query对象调用setXxx方法支持方法链的编程风格
		String hql = "FROM Employee e where e.salary > ? AND e.email like ? AND e.dept = ? ORDER BY e.salary";
		Query query = session.createQuery(hql);
		// 2. 绑定参数
		Department dept = new Department();
		dept.setId(2);
		query.setFloat(0, 6).setString(1, "%%").setEntity(2, dept);

		// 3. 执行查询
		List emps = query.list();
		System.out.println(emps.size());
	}


String hql="from Student a where a.id=? and a.stuName=?";

Query query = sessio.createQuery(hql);

query.setinteger(0,3);

query.setString(1,"wangwu");

Listlist=(List)query.list();



@Test
	public void testHqlNamedParameter() {
		// 1. 创建query对象
		// 基于命名参数
		String hql = "FROM Employee e where e.salary > :sal AND e.email LIKE :email";
		Query query = session.createQuery(hql);
		// 2. 绑定参数
		query.setFloat("sal", 6).setString("email", "%%");

		// 3. 执行查询
		List emps = query.list();
		System.out.println(emps.size());
	}

String hql="from Student a where a.id=:id and a.stuName=:name";

Query query = sessio.createQuery(hql);

query.setinteger("id",3);

query.setString("name","wangwu");

Listlist=(List)query.list();


distinct关键字:可以去掉结果中的重复值

String hql=“SELECT distinct s.age from Student AS s”;

orser by 关键字:对结果进行排序,默认为升序

“FROM Student AS s ORDER BY  s.id DESC”

你可能感兴趣的:(分页,hibernate,语言,hibernate)