Hibernate框架-08-01-Hibernate检索方式


两种之前的检索方式

在这里插入图片描述

导航对象图必须要设置关联映射关系
OID检索方式必须通过主键检索本对象对应的数据

三种新的检索方式

在这里插入图片描述

SQL一般用在HQL使用不了的情况下

HQL

简介

在这里插入图片描述
HQL是面向对象的查询语言,字段都与类相关
通过Query接口执行查询语句

在这里插入图片描述

HQL语句不能出现星号,
HQL关键子不区分大小写,但是其他都区分大小写

SQL:	select * from user;
HQL:	from User

select A from B 基础

package com.hibernate.ui;

import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;

import com.hibernate.entity.Order;
import com.hibernate.entity.User;
import com.hibernate.util.HibernateUtil;

public class Test {
    
    

	public static void main(String[] args) {
    
    
//		saveUserAndOrder();		
//		addOrder();		
//		getUserAndOrders();		
//		deleteUser();
		
		
		testHQL();
		
		HibernateUtil.closeSessionFactory();
	}
	
	
	//HQL检索方式
	private static void testHQL() {
    
    
		Session session = HibernateUtil.openSession();
		//检索表中所有记录的所有字段
		//User不是关键字,是对象类型,所以区分大小写
//		String hql = "from User";
//		String hql = "select u from User u";//与上一句等价,这是起别名
//		import org.hibernate.query.Query;注意引用的包别错了
//		List<User> userList = query.list();
//		System.out.println(userList);
		
		
		
//		//查询某个字段的值
//		String hql = "select u.id from User u";
//		Query query = session.createQuery(hql);
//		//当查询结果中包含多条记录时,使用list方法执行HQL查询
//		List<User> userList = query.list();
//		System.out.println(userList);		
//		//当检索所有记录的某个字段时,结果中List集合元素的类型是该字段类型
//		List<Integer> userIds = query.list();
//		System.out.println(userIds);
		
		
		
		
		
		
		
//		//查询多个字段
//		String hql = "select u.userName, u.password from User u";
//		Query query = session.createQuery(hql);	
//		//当检索多个字段时,结果中List集合元素的类型是Object[]
//		List<Object[]> users = query.list();
//		for(Object[] o : users) {
    
    
//			System.out.println("用户名:" + o[0]);
//			System.out.println("密码:" + o[1]);
//		}
		
		
		//查询多个字段,推荐这种方式
//		String hql = "select u.userName, u.password from User u";
		//在HQL中可以直接调用构造方法(与上一句等价)
		//有条件:在User类里面加上带参数的构造方法
		//定义了带参数的构造方法同时也要定义无参构造方法
		String hql = "select new User(u.userName, u.password) from User u";
		Query query = session.createQuery(hql);	
		List<User> userList = query.list();
		System.out.println(userList);	
	}
}

where 子句

在这里插入图片描述

在这里插入图片描述

//		//where
//		String hql = "from User where userName = '张三'";
//		Query query = session.createQuery(hql);
//		List<User> users = query.list();
//		System.out.println(users);
		
		
//			//模糊查询
//		String hql = "from User as u where u.userName like '张%'";//起别名使用as关键字,该关键字可以省略
//		String hql = "from User where userName='Tom'";
//		Query query = session.createQuery(hql);
//		List<User> users = query.list();
//		System.out.println(users);
		

HQL别名查询

在这里插入图片描述

HQL多态查询

在这里插入图片描述
继承映射哪里有,代码自己看。

		//多态查询
		//SQL注入代码
//		String name = "1 or 1 = 1";
//		String password = "1 or 1 = 1";
//		String hql = "from User where userName = " + name + " and password=" + password;
		
		//查询结果中只有一条记录,直接返回单个对象
//		User user = (User) query.uniqueResult();
//		System.out.println(user);

HQL检索单个对象

在这里插入图片描述

		//多态查询
		//SQL注入代码
//		String name = "1 or 1 = 1";
//		String password = "1 or 1 = 1";
//		String hql = "from User where userName = " + name + " and password=" + password;
		
		//查询结果中只有一条记录,直接返回单个对象
//		User user = (User) query.uniqueResult();
//		System.out.println(user);

HQL分组与排序

在这里插入图片描述

		//排序order by,默认升序排列
//		String hql = "from User u order by u.id desc";
//		Query query = session.createQuery(hql);
//		List<User> users = query.list();
//		System.out.println(users);
		
		
		
		
		
//		//group by 分组
//		String hql = "select u.userName, count(u) from User u group by u.userName having u.userName != 'Tom'";
//		Query query = session.createQuery(hql);
//		List<Object[]> users = query.list();
//		for(Object[] o : users) {
    
    
//			System.out.println("用户名:" + o[0]);
//			System.out.println("个数:" + o[1]);
//		}
		
		

HQL参数绑定

在这里插入图片描述

在这里插入图片描述

		//HQL传参方式?占位符
//		String hql = "from User where userName = ? and password = ?";
//		Query query = session.createQuery(hql);
//		query.setParameter(0, "张三");
//		query.setParameter(1, "111");
//		System.out.println(query.list());

在这里插入图片描述

		//按照参数名称进行传参
		//把上面的问号换成冒号+属性 
//		String hql = "from User where userName = :username and password = :password";
//		Query query = session.createQuery(hql);
//		query.setParameter("username", "张三");
//		query.setParameter("password", "111");
//		System.out.println(query.list());

在这里插入图片描述

	
//		//使用命名参数
//		//HQL语句中命名参数的名称同setProperties方法参数中传入的对象的属性名称要一致
//		String hql = "from User where userName = :userName and password = :password";
//		Query query = session.createQuery(hql);
//		User u = new User();
//		u.setUserName("张三");
//		u.setPassword("111");
//		query.setProperties(u);
//		System.out.println(query.list());
		
		
		
		
		
		
		//setProperties传入Map类型的对象
//		String hql = "from User where userName = :userName and password = :password";
//		Query query = session.createQuery(hql);
//		Map<String, Object> pro = new HashMap<>();
//		pro.put("userName", "张三");
//		pro.put("password", "111");
//		query.setProperties(pro);//HQL语句中命名参数的名称同setProperties方法参数中传入的Map对象的key名称要一致
//		System.out.println(query.list());
		

HQL 实体更新

在这里插入图片描述

HQL实体删除

在这里插入图片描述

HQL子查询

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

HQL分页查询

在这里插入图片描述

HQL引用查询

在这里插入图片描述




QBC

QBC简介

在这里插入图片描述

QBC表达式

在这里插入图片描述

Restrictions类

在这里插入图片描述

在这里插入图片描述




本地SQL查询

在这里插入图片描述

查询所有用户信息

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44627608/article/details/115213049
今日推荐