HQL查询 与 多对应的表关系

HQL查询语句

注意: HQL语句查询 面向对象的查询方式

语句中写的东西 都是表示的实体类 或者实体类的属性

查询所有对象

String hql = "from 映射表的类的类名"

查询方法

Query query = session.creatQuery(hql);

@Test
public void fun1() {
	// 使用HQL查询表的所有记录
	Session session = HibernateUitl.getOpenSession();
	Transaction transaction = session.beginTransaction();
	
	String QHL = "from com.lanou3g.User";
	Query query = session.createQuery(QHL);
	// 预见结果集
	// (多个就用list处理 单个就用 uniqueResult)
	List list = query.list();	
	transaction.commit();
	session.close();
}

按条件查询

String hql = "from User where id = ?";

使用 ?占位符   该占位符从0开始

quer.setParameter(0,2);    参数1代表占位符, 参数2表示对占位符进行赋值


	Session session = HibernateUitl.getOpenSession();
	Transaction transaction = session.beginTransaction();	
	String QHL = "from com.lanou3g.User where user_id = 2";
	Query query = session.createQuery(QHL);
	quer.setParameter(0,3);  
	List list = query.list();
	System.out.println(list);

使用冒号" : "占位符 

:后面相当于占位符的名字

在替换时 直接使用冒号后面的名字即可

注意: 冒号后面不要加空格

@Test
	public void fun4() {
	// 使用HQL查询表的所有记录
	Session session = HibernateUitl.getOpenSession();
	Transaction transaction = session.beginTransaction();
	String QHL = "from com.lanou3g.User where user_name = :xxx1 and password = :xxx2";
	Query query = session.createQuery(QHL);
	query.setParameter("xxx1", "wang");
	query.setParameter("xxx2", "123");
	User user = query.uniqueResult();
	System.out.println(user);
		
	transaction.commit();
	session.close();	
}

预见结果集

注意: 如果返回单个结果 可以使用uniqueResult接收结果

query.uniqueResult();

如果返回的是多个结果 使用list接收结果 若使用uniqueResult会报错

List list = query.list();

HQL分页

添加分页

setFirstResult(从第几条开始 0是第一条), 

setMaxResults(打印几条)

@Test
public void fun5() {
	// 使用HQL查询表的所有记录
	Session session = HibernateUitl.getOpenSession();
	Transaction transaction = session.beginTransaction();
		
	String hql = "from User";
	Query query = session.createQuery(hql, User.class);
	// 添加分页
	// limit first(从第几条开始 0是第一条), max(打印几条)
	query.setFirstResult(2);
	query.setMaxResults(2);
	List list = query.list();
	System.out.println(list);
		
	transaction.commit();
	session.close();	
}

表与表之间的对应关系

表关系的创建步骤:

1.分析表关系

2.分析实体类中的变量

3.配置实体类与表之间的关系(配置映射文件)

一对多关系

创建一对多的表关系:

"一"对应的实体类:

在定义实体类时 创建一个容器

// 表示一对多关系的集合
// 注意: 集合需要进行初始化
private Set linkMans = new HashSet<>();

配置映射文件

"多"对应的实体类:

在定义实体类时

将"多"对应的实体类定义为自己的成员变量

// 表示一对一关系
// 声明一个customer对象当做成员变量
private Customer customer;

配置映射文件


注意: 

"多"对应的表 创建表时 需要拥有主键(hibernate方法必须)和外键(配置对应关系)

在配置文件时 注意避免重复配置外键     


	
	
	
	

多对多的关系

创建表对应的实体类时 

双方都需要定义一个容器

// 容器
private Set legs = new HashSet<>();
// 容器 
private Set coms = new HashSet<>();

配置映射文件


	
	

注意: 多对多表关系配置映射文件时 必须要有一方放弃对外键的维护

你可能感兴趣的:(HQL查询 与 多对应的表关系)