很久很久以前,我们了解Hibernate框架的基本用法(Hibernate—第一季who are you)和多对多关系(Hibernate—第二季many-one-many),但使用最多的还是使用Hibernate进行增删改查。 1、HQL语法 2、Criteria语法 3、SQL语法(和平时用的sql基本一样,就不介绍了。) String hql1 = ' from com.domain.User ';//完整写法 String hql2 = ' from User '; //简单写法要确保只有一个User对象 String hql3 = ' from com.domain.User order by user_id asc';//排序 desc String hql4 = ' select user_name,user_id from com.domain.User ';//投影查询 String hql5 = ' select new User (user_id,user_name) from com.domain.User ';//投影查询 Query query = session.createQuery(hql); query.setFirstResult(0);//分页起始位 query.setMaxResults(10);//分页一页显示条数 List list = query.list();
String hql1 = ' from com.domain.User where user_id =? ';//完整写法 String hql2 = ' from com.domain.User where user_id = :id ';//完整写法 Query query = session.createQuery(hql); query.setParameter(0, 1l);//对应hql1 query.setParameter('id', 1l);//对应hql2 User user = (User)query.uniqueResult()
//count计数 sum求和 avg平均数 ...... String hql1 = ' select count(*) from com.domain.User '; String hql2 = ' select sum(user_id) from com.domain.User '; Query query = session.createQuery(hql); Number number = (Number) query.uniqueResult();
String hql1 = ' from User u inner join u.departments ';//内连接 String hql2 = ' from User u inner join fetch u.departments ';//迫切内连接 String hql3 = ' from User u left join u.departments ';//左外连接 String hql4 = ' from User u right join u.departments ';//右外连接 Query query = session.createQuery(hql); List<Object[]> list = query.list(); //List list = query.list();//使用fetch 迫切连接 会帮我们进行封装 for(Object[] arr : list){ System.out.println(Arrays.toString(arr)); }
Criteria c = session.createCriteria(User.class); c.add(Restrictions.eq('user_id',1l));//添加条件 c.addOrder(Order.asc('user_id'));//排序(Order.desc()) c.setFirstResult(0);//分页起始位 c.setMaxResults(10);//分页一页显示条数 List list = c.list(); //统计 已经帮我们封装了大量统计方法 可以Projections.点看看 c.setProjection(Projections.rowCount());
Hibernate为我们提供了DetachedCriteria对象,使我们可以在获取参数后再web层进行查询条件封装。(离线查询)感受下代码: //--------Service/web层------------------------------------ DetachedCriteria dc = DetachedCriteria.forClass(User.class); dc.add(Restrictions.idEq(1l));//拼装条件(全部与普通Criteria一致) //---------------------------------------------------- Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //-----------dao----------------------------------------- Criteria c = dc.getExecutableCriteria(session); List list = c.list();
fetch(加载策略)和lazy(延迟加载)这两个属于Hibernate优化方面。事实上Hibernate已经帮我们使用了最优的fetch(加载策略)lazy(延迟加载)。所以感兴趣的小伙伴可以自己了解下。
|