@Beeder
2017-12-22T15:49:34.000000Z
字数 4748
阅读 822
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=0
query.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();