Hibernate01 - 入门概念 搭建环境 api
Hibernate02 - 缓存 一对多 多对多:
Hibernate03 -查询方式 OID hql QBC
Hibernate查询方式
- 对象导航查询
? 根据id查询某个客户,再查询这个客户里面所有的联系人
- OID查询
? 根据id查询某一条记录,返回对象
- HQL查询
? Query对象,写hql语句实现查询
- QBC查询
? Criteria对象
- 本地sql查询
? SQLQuery对象,使用普通sql实现查询
查询某个客户里面所有联系人过程,使用对象导航实现代码:
// 根据cid=1客户 在查询这个客户所有的联系人
Customer customer = session.get(Customer.class, 1);
// 在查询这个客户所有的联系人
// 直接得到客户里面联系人的set集合
Set linkManSet = customer.getLinkManSet();
System.out.println(linkManSet.size());
OID查询
根据id查询记录 可以根据session中get方法查询
Customer customer = session.get(Customer.class, 1);
HQL查询
Query对象,写hql语句实现查询hql: hibernate query language 和普通的sql很相似
区别:
- 普通sql操作的是数据库的表和表的字段
- hql操作的是实体类和属性
- 创建Query对象 ,写hql
- 调用Query对象里面的方法 得到结果
查询所有
// 创建query对象 (from 实体类名)
Query query = session.createQuery("from Customer");
// 调用方法得到结果
List list = query.list();
for (Customer customer : list) {
System.out.println(customer.getCid() +":"+customer.getCustName());
}
条件查询
from 实体类名称 where 实体类属性=?and 实体类属性=?代码:
from 实体类名称 where 实体类属性 like ?模糊查询
【ssh|Hibernate03 -查询方式 OID hql QBC】注意: 新版本现在的占位符?后面要带上索引位置 新的jpa格式
// 创建query对象
// Query query = session.createQuery("from Customer where cid=? and custName=?");
// 起别名
Query query2 = session.createQuery("from Customer c where c.cid=?1 and c.custName=?2");
// 设置条件值
// setParameter方法中有两个参数
// 第一个参数: int类型是?位置从0开始
// 第二个参数: ?位置的值
query2.setParameter(1,1);
query2.setParameter(2,"baidu");
// 调用方法得到结果
List list = query2.list();
for (Customer customer : list) {
System.out.println(customer.getCid() + ":" + customer.getCustName());
}
排序查询 代码 降序desc 升序默认/asc
// 创建query对象
Query query = session.createQuery("from Customer order by cid desc");
List list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
分页查询 1 mysql实现分页
? 使用关键字 limit实现
2 在hql中实现分页
? 在hql操作中,在语句里面不能写limit,hibernate的Query对象封装两个方法实现分页操作
代码
// 创建query对象
// 写查询的操作
Query query = session.createQuery("from Customer ");
// 设置分页数据
// 设置开始位置
query.setFirstResult(0);
// 每页记录数
query.setMaxResults(2);
List list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
投影查询
什么是投影查询?? 查询部分属性(字段)的值…
? 语法
? select 实体类属性1,实体类属性2 from 实体类名称
? 注:select 后面不能写* 不支持的
代码实现
// 创建query对象
// 写查询的操作
Query query = session.createQuery("select custName from Customer ");
List
聚集函数使用 常用的聚集函数
count、sum、avg、max、min
// 创建query对象
// 写查询的操作
Query query = session.createQuery("select count(*) from Customer ");
// 调用方法得到结果
// query对象里面有方法,直接返回对象形式(object)
// 本身返回的的long类型
Long o = (Long) query.uniqueResult();
// 使用Integer类型来接收
Integer i = o.intValue();
System.out.println(i);
HQL多表查询
内连接查询(两个表有联系) mysql
select * from t_customer c,t_linkeman l where c.cid = l.cid;
select * from t_customer c inner join t_linkman l on c.cid = l.cid
hql
//实体类属性
from Customer c inner join c.linkManSet
// 返回的是数组
迫切内连接
from Customer c inner join fetch c.linkManSet
// 返回的是Customer
迫切内连接和内连接区别:
? 迫切内连接返回的list每部分是对象
? 内连接返回的list每部分是数组
左外连接(全部显示) mysql
select * from t_customer c left outer join t_linkman l on c.cid = l.cid
hql
==
//实体类属性
from Customer c left outer join c.linkManSet
// 返回的是数组
迫切左外连接
from Customer c left outer join fetch c.linkManSet
// 返回的是Customer
右外连接(全部显示) mysql
select * from t_customer c right outer join t_linkman l on c.cid = l.cid
hql
fromCustomercrightouterjoinc.linkManSet
QBC查询
- 使用hql查询需要写hql语句实现,但是使用qbc的时候 不需要写语句了,使用方法实现。
- 使用qbc时候,操作实体类和属性
- 使用qbc,使用Criteria对象实现
// 创建Criteria对象
Criteria criteria = session.createCriteria(Customer.class);
List list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
条件查询
// 创建Criteria对象
Criteria criteria = session.createCriteria(Customer.class);
// 使用Criteria里面的方法设置条件值
// add方法 设置条件值
criteria.add(Restrictions.eq("cid",1));
criteria.add(Restrictions.eq("custName","baidu"));
List list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QShzvJ1M-1597224319457)(…/AppData/Roaming/Typora/typora-user-images/image-
文章图片
顺序查询
// 创建Criteria对象
Criteria criteria = session.createCriteria(Customer.class);
// 设置对那个属性进行排序,设置排序规则
// criteria.addOrder(Order.asc("cid"));
criteria.addOrder(Order.desc("cid"));
List list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
分页查询
// 创建Criteria对象
Criteria criteria = session.createCriteria(Customer.class);
// 设置分页开始位置 每页记录数
criteria.setFirstResult(0);
criteria.setMaxResults(2);
统计查询(count)
// 设置操作
criteria.setProjection(Projections.rowCount());
// 调用方法 得到最后的结果
Object o = criteria.uniqueResult();
Long l = (Long) o;
Integer i = l.intValue();
System.out.println(i);
sion.createCriteria(Customer.class);
// 设置分页开始位置 每页记录数
criteria.setFirstResult(0);
criteria.setMaxResults(2);
统计查询(count)
// 设置操作
criteria.setProjection(Projections.rowCount());
// 调用方法 得到最后的结果
Object o = criteria.uniqueResult();
Long l = (Long) o;
Integer i = l.intValue();
System.out.println(i);
Hibernate01 - 入门概念 搭建环境 api
Hibernate02 - 缓存 一对多 多对多:
Hibernate03 -查询方式 OID hql QBC
推荐阅读
- 服务器安全设置
- ssh|Hibernate01 - 入门概念 搭建环境 api
- html|#新闻拍一拍# 科学家创造网速新巅峰(每秒 178 Tb | Linux 中国)
- Linux|关于iptables
- 对Blob对象的处理
- hibernate|hibernate异常——》org.hibernate.exception.GenericJDBCException: could not extract ResultSet
- MySQL|Hibernate异常
- java|struts2.3.4.1+hibernate3.6.5+spring3.1.2配置
- ssh|jar作用(一)