四:批量查询
1、HQL查询(多表查询,但不复杂时使用)
面向对象的查询语言
基本查询
String sql = "from Customer";
Query query = session.createQuery(sql);
List<Customer> list = query.list();
//Object uniqueResult = query.uniqueResult();//获得单个的对象
条件查询(1)
String sql="from Customer where cust_id = :cust_id"; //:cust_id为下边这是的那个cust_id
Query query = session.createQuery(sql);
query.setParameter("cust_id", 1l);
Object uniqueResult2 = query1.uniqueResult(); //返回查询结果
条件查询(2)
String hql="from Customer where cust_id=?";
Query qr = session.createQuery(hql);
qr.setParameter(0, 1l);
Customer customer = (Customer) qr.uniqueResult();
分页查询
String sql = "from Customer";
Query query = session.createQuery(sql);
query.setFirstResult(0); //与limit里的?,?一样,从第几个开始 (索引从0开始计数)
query.setMaxResults(2); //显示几个
List<Customer> list = query.list();
排序查询
String hql="from Customer order by cust_id desc";
Query qr = session.createQuery(hql);
List<Customer> list = qr.list();
和sql语句一样
统计查询
String hql="select count(*) from Customer ";
String hq2="select sum(*) from Customer ";
String hq3="select avg(*) from Customer ";
String hq4="select max(*) from Customer ";
String hq5="select min(*) from Customer ";
Query qr = session.createQuery(hql);
Number uniqueResult = (Number) qr.uniqueResult();
投影查询
String hql="select cust_name,cust_id from Customer ";
Query qr = session.createQuery(hql);
List<Object[]> list = qr.list(); //list集合中是object数组 一行一个
多表查询
String hql="from Customer c inner join c.linkmans";
String hq2="from Customer c inner join fetch c.linkmans"; //迫切
String hq3="from Customer c left join fetch c.linkmans"; //左外连接
Query qr = session.createQuery(hql);
List<Object[]> list = qr.list(); //不迫切的话是返回这个
List<Customer> list1 = qr.list(); //迫切的话是返回这个
2、criteria查询(单表查询)
Hibernate自创的无语句面向对象查询
基本查询
Criteria criteria = session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
直接就出来了…..
条件查询
Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.eq("cust_id", 1l));
Object uniqueResult = criteria.uniqueResult();
其中的Restrictions中是添加查询条件的
> | gt |
>= | ge |
< | lt |
<= | le |
= | eq |
!= | ne |
in | in |
between and | between |
like | like |
is not null | isNotNull |
>is null | isNull |
or | or |
and | and |
分页查询
Criteria criteria = session.createCriteria(Customer.class);
criteria.setFirstResult(0); //从0开始
criteria.setMaxResults(2);
查询总记录数
Criteria createCriteria = session.createCriteria(Customer.class);
createCriteria.setProjection(Projections.rowCount());//聚合函数
Long uniqueResult = (Long)createCriteria.uniqueResult();
排序查询
Criteria criteria = session.createCriteria(Customer.class);
criteria.addOrder(Order.asc("cust_id"));
List list = criteria.list();
2、1离线查询
DetachedCriteria dc = DetachedCriteria.forClass(LinkMan.class);
dc.add(Restrictions.like("lkm_name", "%"+lkm_name+"%"));
Criteria executableCriteria = dc.getExecutableCriteria(session);
List<LinkMan> list = executableCriteria.list();
3、原生sql查询(复杂的业务查询)
基本查询
String sql = "select * from cst_customer";
SQLQuery createSQLQuery = session.createSQLQuery(sql);
createSQLQuery.addEntity(Customer.class);
List<Customer> list = createSQLQuery.list();
条件查询
String sql = "select * from cst_customer where cst_customer = ?";
SQLQuery createSQLQuery = session.createSQLQuery(sql);
createSQLQuery.setParameter(0, 1l); //设置那个问号的值
createSQLQuery.addEntity(Customer.class);
List<Customer> list = createSQLQuery.list();
分页查询
String sql = "select * from cst_customer limit ?,?";
SQLQuery createSQLQuery = session.createSQLQuery(sql);
createSQLQuery.setParameter(0, 0);
createSQLQuery.setParameter(1, 1);
createSQLQuery.addEntity(Customer.class);
List<Customer> list = createSQLQuery.list();