Hibernate 入门----Query,Criteria,SQLQuery
来源:互联网 发布:python类型转换 编辑:程序博客网 时间:2024/06/05 11:53
Hibernate 入门—-Query,Criteria,SQLQuery
ONE Goal , ONE Passion !
hibernate 的Query
HQL(Hibernate Query Language)是一种Hibernate专用的查询语句,基于面向对象的模式,将SQL语句转化成对象的操作格式.
- list() 查询多条
@Test public void query(){ // sql : select 列名 from 表明; // hql : select 属性名 from 类名; // select 别名.属性 from 类名 as 别名; String hql = "from User"; Query query = session.createQuery(hql); List list = query.list(); System.out.println(list); }
查询多个属性时,返回的是对象数组;
其中对象中第一个为id,第二个元素为pwd
String hql = "select id,pwd from user"; List<Object[]> list = session.createQuery(hql);
- uniqueResult() 查询一条.
String hql = "select count(*) from User"; Query query = session.createQuery(hql); Object uniqueResult = query.uniqueResult();
- 分页查询
setFirstResult(N):查询的第N条数据编号
setMaxResults(20):查询的数据总量
String hql = "from User"; Query query = session.createQuery(hql); query.setFirstResult(1); query.setMaxResults(20); List list = query.list(); System.out.println(list);
- 可变参数查询(占位符)
String hql = "from User where name = ? and age = ?"; Query query = session.createQuery(hql); query.setParameter(0, "fy"); // query.setString(1, "fy"); query.setParameter(1, "18"); List list = query.list(); System.out.println(list); 常用写法: String hql = "from User where name = :name and age = :age"; query.setString("name", "fy"); query.setString("age", "18");
聚合函数
count 返回的结果:Longmax/min 返回的结果:原始类型sum 返回的结果:Long或Doubleavg 返回的结果:Double
由于返回结果通常为单一数据,常使用uniqueResult()获得结果
- 分组查询
Query q = s.createQuery("select address,count(address) from UserModel group by address");
- 排序查询
Query q = s.createQuery("from UserModel order by age desc");
- 投影数据封装
前提: 对象模型中需要有UserModel(age,name)构造方法,参数顺序必须与hql中投影一致.
s.createQuery("select new UserModel(age,name) from UserModel");
———华丽分割——–
hibernate 的Criteria
Criteria查询又名QBC查询,以面向对象格式完成查询操作,实现真正的自动生成SQL语句.
- 查询单一属性: 返回该属性类型
Criteria criteria = session.createCriteria(User.class); //Hibernate: select this_.name as y0_ from userdata this_ 方式一: Property pro = Property.forName("name"); criteria.setProjection(pro); 方式二: PropertyProjection property = Projections.property("name"); criteria.setProjection(property); List list = criteria.list();
criteria.setProjection(property);不能重复复制,如果重复设置的话会把上一个覆盖.
- 查询多个属性: 查询结果为对象数组
1.声明查询属性的列表对象 ProjectionList li = Projections.projectionList(); 2.声明要查询的属性 PropertyProjection name = Projections.property("name"); PropertyProjection id = Projections.property("id"); 3.将查询的属性放入属性列表 li.add(id); li.add(name); 4.为criteria设置属性列表 criteria.setProjection(li); List<Object[]> list = criteria.list();
- 聚合函数
count: 行数 Projection condition = Projections.rowCount(); max/min: 最大值 Projection conditionMax = Projections.max("age"); Projection conditionMin = Projections.min("age"); Sum : 和 Projection conditionSum = Projections.sum("age"); Avg : 平均数 Projection conditionAvg = Projections.avg("age");
- 分组查询
Projections.groupProperty("address");
- 排序
criteria.addOrder(Order.desc("age")); criteria.addOrder(Order.asc("age"));
- 条件查询.
条件查询使用
Restrictions.eq 等于= Restrictions.allEq 使用Map,使用key/value进行多个等于的判断 Restrictions.gt 大于> Restrictions.ge 大于等于>= Restrictions.lt 小于< Restrictions.le 小于等于<= Restrictions.between 对应sql的between子句 Restrictions.like 对应sql的like子句 Restrictions.in 对应sql的in子句 Restrictions.and and 关系 Restrictions.or or关系 Restrictions.sqlRestriction Sql限定查询 Criterion c = Restrictions.allEq(arg0); criteria.add(c);
- 离线查询 (DetachedCriteria)
将查询字段在view层封装到DetachedCriteria对象中,
DetachedCriteria不依赖session即可创建. 这样session就不会暴露在view以及业务层.最后在Controller层,通过session把DetachedCriteria装换成可以执行查询的Criteria.
表现层: DetachedCriteria dc = DetachedCriteria.forClass(UserModel.class); dc.add(Restrictions.like("address", "%"+address+"%")); dc.add(Restrictions.between("age", age1, age2)); 数据层: Criteria c = dc.getExecutableCriteria(session); c.list();
———华丽分割——–
hibernate 的SQLQuery查询
- 直接执行原生的sql语句.
String sql = "select * from tbl_user"; SQLQuery sq = session.createSQLQuery(sql); sq.list(); //uniqueResult()
- 通过别名为查询的模型数据进行封装.
String sql = "select u.* from tbl_user u"; SQLQuery sq = session.createSQLQuery(sql); sq.addEntity("别名",模型类.class); // sq.addEntity("u",模型类.class);
———华丽分割——–
配置型SQL/HQL语句
- 1.在hbm.xml的hibernate-mapping元素中配置
<!-- hql语句 --> <query name=""></query> <!-- sql语句 --> <sql-query name=""></sql-query>
配置SQL语句时,为避免语句中具有与XML语法格式冲突的符号,通常使用使用XML语法.
<sql-query name="这条语句的名字"><![CDATA[from user where age > :age]]></sql-query> :age 也是占位符
- 使用Query执行查询
Query q = s.getNamedQuery("配置中的查询名字");
0 0
- Hibernate 入门----Query,Criteria,SQLQuery
- Hibernate中的Query对象,Criteria对象和SQLQuery对象
- hibernate SQLQuery & Query
- hibernate (SQLQuery)query.setResultTransformer
- Hibernate-Criteria Query
- HIbernate Criteria Query
- HIbernate Criteria Query
- Hibernate ,Query By Criteria
- hibernate的Criteria Query
- Hibernate的Criteria Query
- Hibernate 的Criteria Query
- hibernate Criteria Query
- hibernate中query和sqlquery的区别
- Hibernate的SQLQuery与Query占位符传参
- Hibernate条件查询(Criteria Query)
- Hibernate条件查询(Criteria Query)
- Hibernate条件查询(Criteria Query)
- Hibernate条件查询(Criteria Query)
- C++函数传参:引用和const参数
- Android EditText里的密码显示可见与不可见
- 第56天(就业班) oracle安装和函数
- FTP的主动模式和被动模式
- tensorflow 常用函数整理
- Hibernate 入门----Query,Criteria,SQLQuery
- string类用法
- Multiply Strings
- Notepad++没有插件管理器(Plugin Manager)的原因以及解决方法
- DK(领域知识)domain knowledge;
- Android 系统中,那些能大幅提高工作效率的 API 汇总
- 关于Vmware与VirtualBox主客机互通,且都能连网的配置
- thinkphp实现文件下载
- DBGridEh 的分组统计 DataGrouping