Hibernate高级查询
来源:互联网 发布:cc3d飞控调参软件 编辑:程序博客网 时间:2024/05/17 00:08
实体查询
示例:from cn.jbit.hibernatdemo.entity.Deptselect dept from Dept as deptfrom Dept where deptName = 'SALES'from Dept dept where dept.location is not nullfrom Emp order by hireDate,salary desc
- 条件
投影查询
指定属性查询
通过构造方法
实体查询的更新和删除
示例://更新String hql = "update Emp set ename = 'XX' where empno = 'XX'";//删除String hql = "delete from Emp where empno = 'XX'";//创建Query接口实例,预编译hql语句Query query = session.createQuery(hql);//执行hql语句,返回影响条数int count = query.executeUpdate();
参数绑定
- 使用?占位符
示例:String hql = "from Emp where ename =?";Query query = session.createQuery(hql);query.setString(0, "张三");//参数下标从0开始
- 使用命名参数
String hql = "from Emp where ename =:param";Query query = session.createQuery(hql);query.setString("param", "张三");//query.setParameter("param", "张三");//推荐使用这一种,不依赖参数出现顺序,使用灵活
排序、统计函数、分组
- 排序
hql语句示例:1.通过order by子句实现对查询结果排序,默认升序String hql = "from Emp order by empno";2.指定排序方式:asc(升序)、desc(降序)String hql = "from Emp order by empno desc";3.多个排序条件String hql = "from Emp order by empno,ename desc";
- 统计函数
1).avg() 平均数
2).sum()求和
3).min()最小值
4).max()最大值
5).count()统计次数
示例:String hql = "select count(*) from Emp";long count = (Long)session.createQuery(hql).uniqueResult();//uniqueResult()获取唯一对象,返回值是Long类型
- 分组
示例://统计人数大于20的班级的学生人数String hql = "select gid,count(*) from Student group by gid having count(*)>20";
分页
- Hibernate Query接口提供的方法
1).setFirstResult()设置第一条记录的位置
2).setMaxResults()设置最大返回的记录条数
//每页显示2条数据,显示第二页数据 public static void query() { Session session = HibernateSessionFactory.getSession(); session.beginTransaction(); String hql = "from Student"; Query query = session.createQuery(hql); //从第几条开始,HQL是从0开始 SQL是从1开始 query.setFirstResult(0); //显示条数 query.setMaxResults(2); List<Student> list = query.list(); for(Student s : list) { System.out.println(s.getSname()); } }
子查询、连接查询
- 子查询
//查询成绩高于A和B的学生信息String hql = "from Student where score > all (select score from Student where sname = 'A' or sname = 'B')";
连接查询
示例
1).使用迫切左外连接查询所有学习Java的学生信息
2).使用左外连接查询所有学习Java的学生信息
- 为什么没有右外迫切连接?
随手画了一张图解释
批处理
- hibernate.cfg.xml添加批处理配置
//批处理数一般设置为10~50<property name="hibernate.jdbc.batch_size">20</property>//关闭二级缓存<property name="hibernate.cache.use_second_level_cache">false</property>
- 示例
/** * 批量插入数据 */ public void method1() { Session session = HibernateSessionFactory.getSession(); Transaction transaction = session.beginTransaction(); Dept dept = null; for(int i = 1; i < 1000; i++) { dept = new Dept(); dept.setDname(i + ""); dept.setLoc(i + "i"); session.save(dept); //批量操作数设置为与配置文件一致 if(i % 20 == 0) { session.flush(); session.clear(); } } transaction.commit(); HibernateSessionFactory.closeSession(); } /** * 批量更新数据 */ public void method2() { Session session = HibernateSessionFactory.getSession(); Transaction transaction = session.beginTransaction(); String hql = "from Dept"; //游标,设置batch_size属性为20且关闭二级缓存 ScrollableResults results = session.createQuery(hql).scroll(ScrollMode.FORWARD_ONLY); while (results.next()) { Dept dept = (Dept) results.get(0); dept.setDname("Java"); } transaction.commit(); HibernateSessionFactory.closeSession(); }
0 0
- Hibernate QBC高级查询
- Hibernate高级查询方法
- Hibernate QBC高级查询
- Hibernate高级查询实战
- Hibernate高级查询实战
- Hibernate高级查询方法
- Hibernate高级查询方法
- Hibernate QBC高级查询
- Hibernate高级查询实战
- Hibernate QBC高级查询 .
- Hibernate高级查询
- Hibernate高级查询
- Hibernate高级查询一
- Hibernate高级查询方法
- hibernate QBC高级查询
- Hibernate高级查询方法
- Hibernate高级查询
- Hibernate高级查询方法
- MATLAB图形用户界面的一个实例(2)
- 第103讲: 动手实战联合使用Spark Streaming、Broadcast、Accumulator实现在线黑名单过滤和计数
- android BLE4.0 流程图
- 枚举(一)
- bzoj 1006: [HNOI2008]神奇的国度(弦图 MCS算法)
- Hibernate高级查询
- Excel做好的图表复制到PPT中变颜色了怎么办
- 工具快捷命令的方式
- MATLAB求解24点(抱歉,只会穷举)
- SSH 无密码登陆远程LINUX主机(ssky-keygen + ssh-copy-id )
- php和Java的区别是什么
- 一步步学spark之一scala安装使用1.1
- 如何让高度不固定的list的子Item高度充满list
- ubuntu remmina 连接失败 的原因