注意: 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();
}
按条件查询
使用 ?占位符 该占位符从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();
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<>();
配置映射文件
注意: 多对多表关系配置映射文件时 必须要有一方放弃对外键的维护