hibernate

阅读 / 问答 / 标签

hibernate使用criteria怎么实现排序分组

/** * 使用对象的查询方法 * * @param c:查询的类 * @param obj:查询的对象 * @param orber:按那个字段排序 * @param row:每页多少条记录 * @param page:第几页 * @return List: 集合 */ public List find(Class c, Object obj, String[] orber, int row, int page) { List list = null; try { Criteria criteria = HibernateSessionFactory.getSession() .createCriteria(c); if (obj != null) { Example example = Example.create(obj); example.enableLike(MatchMode.ANYWHERE);// 匹配模式,使用模糊查询必填项。 example.excludeNone();// 空的不做查询条件 example.excludeZeroes();// 0不要查询 example.ignoreCase(); // 不区分大小写 criteria.add(example); } if (row > 0 && page > 0) { criteria.setMaxResults(row);// 最大显示记录数 criteria.setFirstResult((page - 1) * row);// 从第几条开始 } // 判断是否有排序请求,如果有加入到排序方法中 if (orber != null) { for (int i = 0; i < orber.length; i++) criteria.addOrder(Order.desc(orber[i])); } list = criteria.list(); return list; } catch (HibernateException e) { e.printStackTrace(); return null; } finally { HibernateSessionFactory.closeSession(); } } /** * 使用HQL查询语句 * * @param hql:hql语言 * @param row:每页显示多少记录 * @param page:显示第几页 * @param params: * 所传的对应参数 * @return List: 返回集合 */ public List find(String hql, int row, int page, ArrayList params) { try { query = HibernateSessionFactory.getSession().createQuery(hql); if (null != params) {// 循环把给参数赋值 for (int i = 0; i < params.size(); i++) { query.setParameter(i, params.get(i)); } } if (row > 0 && page > 0) { query.setMaxResults(row);// 每页显示多少条记录 query.setFirstResult((page - 1) * row);// 显示第几条记录 } return query.list(); } catch (HibernateException e) { e.printStackTrace(); return null; } finally { HibernateSessionFactory.closeSession(); } }

请教Hibernate 的 Criteria 的 in 查询

Criteria criteria = createCriteria(shenroll.class); criteria.add(Restrictions.eq("shActId",shActId)); criteria.add(Restrictions.eq("shUserId",shUserId));

请教Hibernate 的 Criteria 的 in 查询

Hibernate中提供了三种查询方式,分别为HQL、Criteria查询、本地化SQL查询,实际应用中,有很多人忽略了Criteria的用处,觉得不如另外两种贴近SQL方式便捷,实际则未必,很多情况下Criteria更具有优势;本篇文章就对Criteria查询做一个全面的介绍,以期尽可能的将更多的Criteria强大的查询功能展现出来;1、首先新建一个Maven Web Project项目,本次使用的是hibernate4.3.11版本,使用MySql数据库,添加如下依赖:[html] view plain copy<!-- 引入mysql jar依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- 引入hibernate依赖 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.11.Final</version> </dependency> 新建完毕后,项目结构如下:2、entity包下面放置的是通过Hibernate反向工程生成的实体映射类,samples包下面放置测试类,同样hibernate.cfg.xml文件需要配置,在此就不一一展示了,好了,准备工程就这么多,下面开始介绍Criteria的实际操作;3、Criteria查询3.1 获取Criteria对象[java] view plain copypackage com.hibernate.samples; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.hibernate.entity.SlEmployee; public class HibernateTest { // 声明一个Hibernate Session类型的变量 private Session session; @Before public void getSession(){ Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); session = sessionFactory.openSession(); } @After public void closeSession(){ if(session != null){ session.close(); } } @Test public void doCreateCriteriaInstance(){ // 获取Criteria实例对象 Criteria criteria = session.createCriteria(SlEmployee.class); Assert.assertNotNull(criteria); } } 3.2 在SQL中,我们可以通过WHERE关键字对条件进行定义,那么在Criteria中呢?看例子[java] view plain copy@Test public void doConditionQueryInCriteria() { // 获取Criteria实例对象 Criteria criteria = session.createCriteria(SlEmployee.class); // 查询出王姓员工且收入在3000到5000之间的 // 类似于HQL中 WHERE employeeName LIKE "王%" AND salary BETWEEN 3000 AND 5000 List emps = criteria.add(Restrictions.like("employeeName", "王%")) .add(Restrictions.between("salary", 3000.0, 5000.0)).list(); // 查询出工资在4000以下或5000以上的王姓员工 // 可以通过Restrictions的or或and进行逻辑分组 emps = criteria.add(Restrictions.like("employeeName", "王%")) .add(Restrictions.or(Restrictions.gt("salary", 5000D), Restrictions.lt("salary", 3000D))).list(); // 查询出岗位是软件工程师或测试工程师,且学历是硕士、本科或大专的员工有哪些 emps = criteria.add(Restrictions.in("position", new String[] { "软件工程师", "测试工程师" })) .add(Restrictions.disjunction().add(Restrictions.eq("degree", "硕士")).add(Restrictions.eq("degree", "本科")) .add(Restrictions.eq("degree", "大专"))) .list(); } 上述三个查询可以看出Restrictions类提供了内建Cretirion类型来满足各种查询状况,此外Criteria还有一个特别强大的功能,那就是允许你直接指定SQL查询,看例子[html] view plain copyList emps = criteria.add(Restrictions.sqlRestriction("birthday > "1980-01-01" AND employee_name like "刘%"")).list(); 上述无论是birthday还是employee_name都是数据库中表的字段名称,看起来是不是特别好用,此外还可以直接通过属性实例构建查询条件,比如要查询出学习是高中、中专的员工有哪些:[java] view plain copyList emps = criteria.add(Property.forName("degree").in(new String[]{"高中","中专"})).list(); 3.3 对结果集进行排序,同样可以分为上述两种方式[java] view plain copyList emps = criteria.add(Restrictions.sqlRestriction("birthday > "1970-01-01"")).addOrder(Order.asc("birthday")) .addOrder(Order.desc("salary")).list(); List emps = criteria.add(Restrictions.sqlRestriction("birthday > "1970-01-01"")) .addOrder(Property.forName("birthday").asc()).addOrder(Property.forName("salary").desc()).list(); 3.4 上述几个例子直接演示了对我们想要实体的操作,大家都知道每个实体都会有好多关联实体,比如一个请假实体类会关联请假申请人与审批人、一篇博客会关联作者和分类信息实体、一个订单会关联多个商品实体,顾客实体,地址实体等,如果此时我们想通过对关联实体的限制,最终限制想要的实体,那应该怎么处理呢,看例子;[java] view plain copy// 比如我们想查询北京各个公司中,员工学历中包括高中、中专、大专的公司部门有哪些 List depts = criteria.add(Restrictions.sqlRestriction("dept_name LIKE "北京%"")) .createCriteria("slEmployees").add(Restrictions.in("degree", new String[]{"高中","中专","大专"})).list(); 上述方法生成下列SQL文[sql] view plain copyfrom sl_dept this_ inner join sl_employee slemployee1_ on this_.dept_id=slemployee1_.DEPT_ID where dept_name LIKE "北京%" and slemployee1_.DEGREE in ( ?, ?, ? ) 通过该实例我们可以得出:a)可以通过createCriteria方法来通过关联实体限制最终查询实体;b)默认采用内连接的方式关联查询那么如果我们想采用比如左连接,右连接甚至是全外连接的话又该怎么做呢,看例子:[java] view plain copyList depts = criteria.add(Restrictions.sqlRestriction("dept_name LIKE "北京%"")).createAlias("slEmployees", "emps2", JoinType.LEFT_OUTER_JOIN, Restrictions.gt("salary",6000.0)).list(); 生成SQL如下:[sql] view plain copyfrom sl_dept this_ left outer join sl_employee emps2x1_ on this_.dept_id=emps2x1_.DEPT_ID and ( emps2x1_.SALARY>? ) where dept_name LIKE "北京%" 另外同样在createCriteria方法中也同样可以指定查询方式;

hibernate criteria模糊查询 怎么写

Hibernate-Criteria 模糊查询Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来 讲,Criteria Query可以看作是传统SQL的对象化表示,如: Criteria criteria = session.createCriteria(User.class); criteria.add(Expression.eq("name","Erica")); criteria.add(Expression.eq("sex",new Integer(1))); 这里的criteria 实例实际上是SQL “Select * from t_user where name="Erica" and sex=1”的封装(我们可以打开Hibernate 的show_sql 选项

hibernate的query和criteria的区别

criteria是hibernate特有的查询的方法,是面向对象的一种查询,可以让没有sql基础的开发者也能够准确的使用hibernate来操作数据库。而query也分为两种,一种是普通的sql,另一种是hql。这里解释一下hql,hql就是面向对象的一种sql,表名对应的是类名,而表中的字段对应的就是类的属性。例如:sql : select * from user_info where id = 1;hql : from UserInfo where id = 1;

java的Hibernate框架中的Criteria查询方式,如何进行连表查询?

哥们,放弃JAVA吧,天堂有路你不走,地狱无门你闯进来啊

请教Hibernate 的 Criteria 的 in 查询

Hibernate中提供了三种查询方式,分别为HQL、Criteria查询、本地化SQL查询,实际应用中,有很多人忽略了Criteria的用处,觉得不如另外两种贴近SQL方式便捷,实际则未必,很多情况下Criteria更具有优势;本篇文章就对Criteria查询做一个全面的介绍,以期尽可能的将更多的Criteria强大的查询功能展现出来;1、首先新建一个Maven Web Project项目,本次使用的是hibernate4.3.11版本,使用MySql数据库,添加如下依赖:[html] view plain copy<!-- 引入mysql jar依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- 引入hibernate依赖 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.11.Final</version> </dependency> 新建完毕后,项目结构如下:2、entity包下面放置的是通过Hibernate反向工程生成的实体映射类,samples包下面放置测试类,同样hibernate.cfg.xml文件需要配置,在此就不一一展示了,好了,准备工程就这么多,下面开始介绍Criteria的实际操作;3、Criteria查询3.1 获取Criteria对象[java] view plain copypackage com.hibernate.samples; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.hibernate.entity.SlEmployee; public class HibernateTest { // 声明一个Hibernate Session类型的变量 private Session session; @Before public void getSession(){ Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); session = sessionFactory.openSession(); } @After public void closeSession(){ if(session != null){ session.close(); } } @Test public void doCreateCriteriaInstance(){ // 获取Criteria实例对象 Criteria criteria = session.createCriteria(SlEmployee.class); Assert.assertNotNull(criteria); } } 3.2 在SQL中,我们可以通过WHERE关键字对条件进行定义,那么在Criteria中呢?看例子[java] view plain copy@Test public void doConditionQueryInCriteria() { // 获取Criteria实例对象 Criteria criteria = session.createCriteria(SlEmployee.class); // 查询出王姓员工且收入在3000到5000之间的 // 类似于HQL中 WHERE employeeName LIKE "王%" AND salary BETWEEN 3000 AND 5000 List emps = criteria.add(Restrictions.like("employeeName", "王%")) .add(Restrictions.between("salary", 3000.0, 5000.0)).list(); // 查询出工资在4000以下或5000以上的王姓员工 // 可以通过Restrictions的or或and进行逻辑分组 emps = criteria.add(Restrictions.like("employeeName", "王%")) .add(Restrictions.or(Restrictions.gt("salary", 5000D), Restrictions.lt("salary", 3000D))).list(); // 查询出岗位是软件工程师或测试工程师,且学历是硕士、本科或大专的员工有哪些 emps = criteria.add(Restrictions.in("position", new String[] { "软件工程师", "测试工程师" })) .add(Restrictions.disjunction().add(Restrictions.eq("degree", "硕士")).add(Restrictions.eq("degree", "本科")) .add(Restrictions.eq("degree", "大专"))) .list(); } 上述三个查询可以看出Restrictions类提供了内建Cretirion类型来满足各种查询状况,此外Criteria还有一个特别强大的功能,那就是允许你直接指定SQL查询,看例子[html] view plain copyList emps = criteria.add(Restrictions.sqlRestriction("birthday > "1980-01-01" AND employee_name like "刘%"")).list(); 上述无论是birthday还是employee_name都是数据库中表的字段名称,看起来是不是特别好用,此外还可以直接通过属性实例构建查询条件,比如要查询出学习是高中、中专的员工有哪些:[java] view plain copyList emps = criteria.add(Property.forName("degree").in(new String[]{"高中","中专"})).list(); 3.3 对结果集进行排序,同样可以分为上述两种方式[java] view plain copyList emps = criteria.add(Restrictions.sqlRestriction("birthday > "1970-01-01"")).addOrder(Order.asc("birthday")) .addOrder(Order.desc("salary")).list(); List emps = criteria.add(Restrictions.sqlRestriction("birthday > "1970-01-01"")) .addOrder(Property.forName("birthday").asc()).addOrder(Property.forName("salary").desc()).list(); 3.4 上述几个例子直接演示了对我们想要实体的操作,大家都知道每个实体都会有好多关联实体,比如一个请假实体类会关联请假申请人与审批人、一篇博客会关联作者和分类信息实体、一个订单会关联多个商品实体,顾客实体,地址实体等,如果此时我们想通过对关联实体的限制,最终限制想要的实体,那应该怎么处理呢,看例子;[java] view plain copy// 比如我们想查询北京各个公司中,员工学历中包括高中、中专、大专的公司部门有哪些 List depts = criteria.add(Restrictions.sqlRestriction("dept_name LIKE "北京%"")) .createCriteria("slEmployees").add(Restrictions.in("degree", new String[]{"高中","中专","大专"})).list(); 上述方法生成下列SQL文[sql] view plain copyfrom sl_dept this_ inner join sl_employee slemployee1_ on this_.dept_id=slemployee1_.DEPT_ID where dept_name LIKE "北京%" and slemployee1_.DEGREE in ( ?, ?, ? ) 通过该实例我们可以得出:a)可以通过createCriteria方法来通过关联实体限制最终查询实体;b)默认采用内连接的方式关联查询那么如果我们想采用比如左连接,右连接甚至是全外连接的话又该怎么做呢,看例子:[java] view plain copyList depts = criteria.add(Restrictions.sqlRestriction("dept_name LIKE "北京%"")).createAlias("slEmployees", "emps2", JoinType.LEFT_OUTER_JOIN, Restrictions.gt("salary",6000.0)).list(); 生成SQL如下:[sql] view plain copyfrom sl_dept this_ left outer join sl_employee emps2x1_ on this_.dept_id=emps2x1_.DEPT_ID and ( emps2x1_.SALARY>? ) where dept_name LIKE "北京%" 另外同样在createCriteria方法中也同样可以指定查询方式;

在是spring+hibernate里面@JsonSerialize失效

public Timestamp getT_create() { 改成 public Date getT_create() { 试试。一般都用的是Date属性。

hibernate 怎么使用 sequence

为表创建自增长自段有两种,一种是不同的表使用各自的Sequence,方法如下:1、在Oracle sequence首先创建sequencecreate sequence seq_id minvalue 1 start with 1 increment by 1 cache 20; 2.在你的hbm.xml中的配置<id column="ID0000" name="id" type="integer"> <generator class="sequence"> <param name="sequence">seq_idparam> generator> id> 这样再插入数据的时候,Hibernate会自动生成如下语句:hibernate: select seq_id.nextval from dual hibernate: insert into YXJK.T_YXJK_WHRYTXL (XM0000, ZW0000, LXDH00, SJHM00, DZYJ00,  IP0000, ID0000) values (?, ?, ?, ?, ?, ?, ?) 自动生成下一个序列值,然后将对象插入表中。在使用的时候需要注意,Hibernate对于sequence的主键的要求是一定要是shor,long,或者integer。
 首页 上一页  1 2 3