---------------------接上篇------------------------------
3 查询指定列信息
使用投影查询可以得到List<Customer>结果。
我们只须在Customer类中提供name与address作为参数的构造方法就可以了,注意无参数构造也要有。而且HQL语句要写成select new Customer(name,address) from Customer
。
public class HibernateTest {
// 查询指定列信息
@Test
public void test() {
Session session = HibernateUtils.openSession();
session.beginTransaction();
Query query = session.createQuery("select new Customer(name,address) from Customer");
List<Customer> list = query.list();
System.out.println(list);
session.getTransaction().commit();
session.close();
}
}
4 条件查询
条件查询,可以使用where关键字。
例,需求:查询name=姓名0的客户。
首先通过无名称参数来完成这个需求。
public class HibernateTest3 {
// 条件查询,可以使用where关键字
@Test
public void test5() {
Session session = HibernateUtils.openSession();
session.beginTransaction();
// 查询name=姓名0的信息
Query query = session.createQuery("from Customer where name=?"); // 这是一种无名称参数
//Query query = session.createQuery("from Customer where name=:myname"); // 这是一种有名称参数
// 要对参数进行赋值
query.setParameter(0, "姓名0");
//query.setParameter("myname","姓名0");
//如果查询结果可以保证就是唯一 的,我们可以使用query. uniqueResult()来得到一个单独对象。
//Customer customer = (Customer) query.uniqueResult();
//System.out.println(customer);
List<Customer> list = query.list();
System.out.println(list);
session.getTransaction().commit();
session.close();
}
}
5 执行本地sql
SQLQuery sqlQuery=session.createSqlQuery(String sql);
public class HibernateTest3 {
// 执行本地sql,查询全部
@Test
public void test6() {
Session session = HibernateUtils.openSession();
session.beginTransaction();
// 执行 select * from t_customer;
SQLQuery sqlQuery = session.createSQLQuery("select * from t_customer");
// 想要将结果封装到Customer对象中
sqlQuery.addEntity(Customer.class);
List<Customer> list = sqlQuery.list();
System.out.println(list);
session.getTransaction().commit();
session.close();
}
}
6 Criteria
Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
得到Criteria:
Criteria criteria = session.createCriteria(Xxx.class);
需求一:查询所有客户。
public class HibernateTest3 {
// 测试Criteria
@Test
public void test8() {
Session session = HibernateUtils.openSession();
session.beginTransaction();
// 得到Criteria
Criteria criteria = session.createCriteria(Customer.class);
// 查询所有
List<Customer> list = criteria.list();
System.out.println(list);
session.getTransaction().commit();
session.close();
}
}
需求二:分页查询。
分页查询操作与query的方法一样。
需求三:多条件查询。例如查询name=”姓名1”并且address=”上海”的客户。
public class HibernateTest3 {
// 测试Criteria
@Test
public void test8() {
Session session = HibernateUtils.openSession();
session.beginTransaction();
// 得到Criteria
Criteria criteria = session.createCriteria(Customer.class);
// 多条件查询
// 1.查询name='姓名1'
criteria.add(Restrictions.eq("name", "姓名1")); // where name="姓名1";
// 2.查询address='上海'
criteria.add(Restrictions.eq("address", "上海")); // where name="姓名1" and address="上海"
//组合查询
//criteria.add(Restrictions.or(Restrictions.eq("name", "姓名1"),Restrictions.eq("address", "上海")));
Customer customer = (Customer) criteria.uniqueResult();
session.getTransaction().commit();
session.close();
}
}