技术标签: JAVA qbc criteria query 查询数据库 hibernate SpringMVC+Hibernate+Spring
说到使用Hibernate框架查询数据,最常用的就是使用HQL(HibernateQueryLanguage)语句了,或者使用原生态的SQL(Native SQL Query )语句,这就包括两种了,那么第三种是什么呢?
是他是他就是他—Criteria [kraɪ’tɪrɪə] Query 条件查询 (不好读啊!)
进行按条件查询(Query by Criteria,简称QBC)和按示例查询(Query by Example 简称QBE).
Criteria的基本使用
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Testbook.class);
List<Testbook> list=criteria.list();
tx.commit();
查询Testbook 中所有的数据,然后返回
Criteria 接口的核心方法
add() 增加一个代表查询条件的Criterion对象
addOrder() 增加一个代表排序的Criterion对象
createAlias() 创建关联查询,为所关联的持久化类建立别名
createCriteria() 在相互关联的持久化类之间建立条件约束
setFirstResult() 设定要获取的第一条记录的位置
setMaxResults() 设定要获取的记录的最大数量
list() 获取满足查询条件的记录的集合
uniqueResult() 获取满足查询条件的唯一记录
对查询结果进行排序
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Testbook.class).add(
Restrictions.like("name","任%")).add(Restrictions.between("id",1000,1010));
criteria.addOrder(Order.desc("id")).addOrder(Order.asc("createdTime"));
List<Testbook> list=criteria.list();
tx.commit();
实现分页显示数据
Java代码 收藏代码
<span style="font-size: x-small;">Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Testbook.class).add(
Restrictions.like("name","任%"));
criteria.addOrder(Order.desc("id"));
criteria.setMaxResults(30);
criteria.setFirstResult(10);//setFirstResult()从0开始计数
List<Testbook> list=criteria.list();
tx.commit();</span>
只查询一条记录
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Testbook.class).add(
Restrictions.like("name","任%"));
criteria.addOrder(Order.desc("id"));
criteria.setMaxResults(1);
Testbook tb=(Testbook)criteria.uniqueResult();
tx.commit();
Restrictions类
<———————————————————————————————————–>
条件”或”方式组合查询条件
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
Criterion criterion1=Restrictions.or(Restrictions.like("name","任%"),
Restrictions.between("id",1000,1010));
criteria.add(criterion1);
List<Testbook> list=criteria.list();
tx.commit();
使用原生SQL语句设定查询条件
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
criteria.add(Restrictions.sqlRestriction("{alias}.name=?","Narcissus",Hibernate.STRING));
List<Testbook> list=criteria.list();
tx.commit()
统计函数查询
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
criteria.setProjection(Projections.max("price"));
Double maxValue=(Double)criteria.uniqueResult();
tx.commit();
System.out.println(maxValue);
统计函数组合查询条件
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
criteria.setProjection(Projections.max("price"));
Double maxValue=(Double)criteria.uniqueResult();
tx.commit();
System.out.println(maxValue);
获取多个统计函数的值
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
ProjectionList proList=Projections.projectionList();
proList.add(Projections.max("price"));
proList.add(Projections.min("price"));
proList.add(Projections.avg("price"));
proList.add(Projections.sum("price"));
proList.add(Projections.count("price"));
proList.add(Projections.countDistinct("price"));
proList.add(Projections.rowCount());
criteria.setProjection(proList);
Object values[]=(Object[])criteria.uniqueResult();
tx.commit();
分组查询
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
criteria.setProjection(Projections.groupProperty("price"));
List<Double> list=criteria.list();
tx.commit();
分组统计
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
ProjectionList proList=Projections.projectionList();
proList.add(Projections.rowCount());//商品的个数
proList.add(Projections.sum("price"));
proList.add(Projections.groupProperty("name"));
criteria.setProjection(proList);
List<Double> list=criteria.list();
tx.commit();
投影查询
在一个表中有很多个字段,投影查询只是查询某一个或多个字段,也称局部查询
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
criteria.setProjection(Property.forName("price"));
criteria.add(Restrictions.gt("price",new Double(40.0)))
List<Double> list=criteria.list();
tx.commit();
使用Property类的forName()方法实现分组统计
Java代码 收藏代码
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
ProjectionList proList=Projections.projectionList();
proList.add(Projections.forName("price").max());
proList.add(Projections.forName("price").min());
proList.add(Projections.forName("price").avg());
proList.add(Projections.forName("category.id").group().as("c"));
criteria.setProjection(proList);
criteria.addOrder(Order.desc("c"));
List<Object[]> list=criteria.list();
tx.commit();
使用DetachedCriteria对象实现离线查询
Java代码 收藏代码
//在表现层,构造DetachedCriteria对象,保存用户动态的查询条件
DetachedCriteria detchedCriteria=DetachedCriteria.forClass(Testbook.class);
detchedCriteria.add(Restrictions.like("name","任%")).add(Restrictions.between("id",new Integer(1),new Integer(10)));
detchedCriteria.addOrder(Order.desc("id"));
//在业务逻辑层,DetachedCriteria对象与当前的Session对象进行绑定,获取查询结果
Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
Transaction tx=detchedCriteria.getExecutableCriteria(session);
List<Testbook> list=criteria.list();
tx.commit();
根据示例对象进行查询
先定义一个模板然后把这个模板的样式传进去,查询,例如这里定义的Testbook中的名字为Narcissus的字段,进行查询,条件可以为一个也可以为多个,对应的就是where中的条件
Java代码 收藏代码
Testbook tb=new Testbook();
tb.setName("Narcissus");
Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
Criteria.add(Example.creaate(tb));
List<Testbook> list=criteria.list();
tx.commit();
有两个日期数据START_DATE,END_DATE,欲得到这两个日期的时间差(以天,小时,分钟,秒,毫秒):天:ROUND(TO_NUMBER(END_DATE - START_DATE))小时:ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)分钟:ROUND(TO_NUMBER(END_DATE - START_DA..._kahhs
linux挂载U盘一,先进入cd/mnt目录下fdisk-l查看是否找到usb盘显示:多出sda1这一搬是usb盘二,在mnt目录下建文件usbmnt]#mkdirusb三,挂接mount/dev/sda1/mnt/usb四,进入新建usbcd/mnt/usbll查找区动文件五,进入目录cd/装驱动的文件夹cd/srcmakeclean清空原..._linux u盘 映射
话不多说,直接上代码(网页端不行就使用手机客户端试试)import requests# url = "https://fanyi.baidu.com/basetrans" # 手机客户端url = "https://fanyi.baidu.com/v2transapi?"data_dict = { "domain": "common", "transtype": "translang", "simple_means_flag": "3", "query": "._python 爬虫文档 997错误
springboot自定义starter启动器目录概 述第一步、何时加载配置文件遍历总结:相关工具如下:分析:小结:参考资料和推荐阅读LD is tigger forever,CG are not brothers forever, throw the pot and shine forever.Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and sta_configfileapplicationlistener 应用
在参考ubuntu18.04 ZED2相机标定_Tan_JX-程序员宅基地安装时的一些问题。我在安装好ZED ,安装ROS-ZED包时,在进行到cd ~/catkin_ws/srcgit clone https://github.com/stereolabs/zed-ros-examples.gitcd ../rosdep install --from-paths src --ignore-src -r -ycatkin_make -DCMAKE_BUILD_TYPE=Releaseso_make[1]: *** [zed-ros-examples/rviz-plugin-zed-od/cmakefiles/rviz_plugin_zed
只针对单行文本有效;01.针对块状元素ul li{ width: 180px; text-overflow: ellipsis; white-space: nowrap;/*禁止自动换行*/ overflow: hidden;}css文字超出自动显示省略号显示省略号css文字超出自动显示省略号css文字超出自动显示省略号显示省略号02.针..._css文字超出自动显示省略号
In this Tuesday, June 3, 2008 file photo, an employee takes a drag on a cigarette at Morgans Place bar and restaurant in Harrisburg, Pa. Four common bad habits combined — smoking, drinkin
目录 1.结构2.数值计算1.结构创建数组:arange()创建一维数组;array()创建一维或多维数组,其参数是类似于数组的对象,如列表等读取数组元素:如a[0],a[0,0]数组变形: 数组转换:对于ndarray结构来说,里面所有的元素必须是同一类型的 如果不是的话,会自动的向下进行转换ndarray.ndim:秩,即轴的数量或维度的数量...
套接字的多种可选项1. 套接字可选项和I/O缓冲大小我们进行套接字编程时往往只关注数据通信,而忽略了套接字具有的不同特性。但是,理解这些特性并根据实际需要进行更改也很重要.1.1 套接字的多种可选项可选项是分层的。协议层选项名读取设置SOL_SOCKETSO_SNDBUFOOSOL_SOCKETSO_RCVBUFOOSOL_SOCKET...
前端er们大都或多或少地接触过CSS伪类和伪元素,比如最常见的:focus,:hover以及标签的:link、visited等,伪元素较常见的比如:before、:after等。其实上面提到的这些伪类和伪元素都是CSS1和CSS2中的概念,CSS1和CSS2中对伪类的伪元素的区别比较模糊,甚至经常有同行将:before、:after称为伪类。CSS3对这两个概念做了相对较清晰地概念,并且在
思路这道题我们不用DP,用货币筛(雾我们把不能被表示的货币,直接放到货币系统里,然后和其他已经在货币系统里的货币或能被表示的货币一起去筛其他货币。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;int T,n,a[100010],f[100010];int ans,maxx;int main(){..
上一篇博文介绍了在Windows 10系统下用Cygwin搭建Nutch开发环境,本文将介绍在Ubuntu下Nutch2.3的开发环境的搭建。1. 需要的软件及其版本Ubuntu 15.04hadoop 1.2.1 hbase 0.94.27 nutch 2.3 solr 4.9.12. 系统环境准备2.1 安装Ubuntu操作系统基本要求,网上也有很多,自行安装,有问题可_ubuntu nutch2.4 solr