@Beeder
2017-12-22T07:49:34.000000Z
字数 4748
阅读 924
javaWeb
session.get(对象.class,OID)
//例:Customer c = session.get(Customer.class,1L);
对象.get方法
//例:// 先是用OID的方式获得客户对象Customer c = session.get(Customer.class,1L);// 用对象导航的方式查看该客户下的联系人的集合System.out.println(c.getLinkmans().size());
Hibernate Query Language ---Hibernate的查询语言
session.createQuery("from Customer").list();
session.createQuery("from Customer c").list();session.createQuery("select c from Customer c").list();
/*order by 字段 asc(升序)/desc(降序)*///升序session.createQuery("from Customer order by cust_id asc").list();//降序session.createQuery("from Customer order by cust_id desc").list();
/*@param a --从哪条记录开始,如果查询是从第一条开启,值是0--a=(当前页-1)*pageSize@return query --返回query对象*/query.setFirstResult(a);/*@param b --每页查询的记录条数(pageSize)@return query --返回query对象*/query.setMaxResults(b);
//例:// 查询联系人Query query = session.createQuery("from Linkman");// 分页查询,调用方法,查询第1页的数据 1-3条 (当前页-1)*pageSize=0query.setFirstResult(0);query.setMaxResults(3);List<Linkman> list = query.list();
//不用考虑参数类型setParameter("?号的位置,默认从0开始","参数的值");
//例:Query query = session.createQuery("from Linkman where lkm_name like ?");query.setFirstResult(0).setMaxResults(3);query.setParameter(0, "%李%");List<Linkman> list = query.list();
投影查询:查询某一字段的值或者某几个字段的值
//查询结果为Object集合,而非Customer集合List<Object[]> list = session.createQuery("select i.lkm_name,i.lkm_gender from Linkman i").list();
// 必须要有的空参构造方法public Linkman() {}//带查询字段参数的构造方法public Linkman(String lkm_name, String lkm_gender) {this.lkm_name = lkm_name;this.lkm_gender = lkm_gender;}
// 查询联系人Query query = session.createQuery("select new Linkman(lkm_name,lkm_gender) from Linkman");List<Linkman> list = query.list();
聚合函数:count() sum() avg() max() min()
/*Number类:Long、int等的父类优点:list内的数据可调用***Value()方法转换为想要的数据类型*/List<Number> list = session.createQuery("select count(*) from Customer").list();Long count = list.get(0).longValue();
List<Number> list = session.createQuery("select sum(lkm_id) from Linkman l").list();// 通过下标值取值Long count = list.get(0).longValue();
Query By Criteria ---条件查询
List<Customer> list = session.createCriteria(Customer.class).list();
需要使用addOrder()的方法来设置参数,参数使用org.hibernate.criterion.Order对象
/*order by 字段 asc(升序)/desc(降序)*/Criteria criteria = session.createCriteria(Linkman.class);// 设置排序criteria.addOrder(Order.desc("lkm_id"));List<Linkman> list = criteria.list();
/*@param a --从哪条记录开始,如果查询是从第一条开启,值是0--a=(当前页-1)*pageSize@return criteria --返回criteria对象*/criteria.setFirstResult(a);/*@param b --每页查询的记录条数(pageSize)@return criteria --返回criteria对象*/criteria.setMaxResults(b);
//例:Criteria criteria = session.createCriteria(Linkman.class);// 设置排序criteria.addOrder(Order.desc("lkm_id"));criteria.setFirstResult(0);criteria.setMaxResults(3);List<Linkman> list = criteria.list();
使用Criteria接口的add方法,用来传入条件
/*使用Restrictions的添加条件的方法,来添加条件,例如:* Restrictions.eq -- 相等* Restrictions.gt -- 大于号* Restrictions.ge -- 大于等于* Restrictions.lt -- 小于* Restrictions.le -- 小于等于* Restrictions.between -- 在之间* Restrictions.like -- 模糊查询* Restrictions.in -- 范围* Restrictions.and -- 并且* Restrictions.or -- 或者*/criteria.add(Restrictions.eq(参数,值));
//例:Criteria criteria = session.createCriteria(Linkman.class);// 设置排序criteria.addOrder(Order.desc("lkm_id"));// 设置查询条件criteria.add(Restrictions.or(Restrictions.eq("lkm_gender", "男"), Restrictions.gt("lkm_id", 3L)));List<Linkman> list = criteria.list();
// 创建QBC查询接口Criteria criteria = session.createCriteria(Linkman.class);// SQL:select * from cst_linkman where lkm_id in (1,2,7);List<Long> params = new ArrayList<Long>();params.add(1L);params.add(2L);params.add(7L);// 使用in 方法查询criteria.add(Restrictions.in("lkm_id", params));List<Linkman> list = criteria.list();
Projections是Hibernate提供的工具类,使用该工具类设置聚合函数查询
使用QBC的聚合函数查询,需要使用criteria.setProjection()方法
Criteria criteria = session.createCriteria(Linkman.class);criteria.setProjection(Projections.count("lkm_id"));List<Number> list = criteria.list();Long count = list.get(0).longValue();
离线条件查询使用的是DetachedCriteria接口进行查询,离线条件查询对象在创建的时候,不需要使用Session对象,只是在查询的时候使用Session对象即可。
//创建离线条件查询对象DetachedCriteria criteria = DetachedCriteria.forClass(Linkman.class);// 添加查询的条件criteria.add(Restrictions.eq("lkm_gender", "女"));Session session = HibernateUtils.getCurrentSession();Transaction tr = session.beginTransaction();// 查询数据List<Linkman> list = criteria.getExecutableCriteria(session).list();tr.commit();
Session session = HibernateUtils.getCurrentSession();Transaction tr = session.beginTransaction();SQLQuery sqlQuery = session.createSQLQuery("select * from cst_linkman where lkm_gender = ?");sqlQuery.setParameter(0,"男");sqlQuery.addEntity(Linkman.class);List<Linkman> list = sqlQuery.list();tr.commit();