Java-hibernate框架3(查询语句总结)

来源:互联网 发布:管家婆软件怎么注册 编辑:程序博客网 时间:2024/06/05 07:43
Hibernate 查询方式
1Hibernate查询HQL语句
限制查询结果记录数与起始记录
Session session=HibernateSessionFactory.getSession();
Query query=session.createQuery("from Customer");
query.setFirstResult(10); //设置查询记录开始位置,索引从0开始。
query.setMaxResults(10);//设置查询返回的最大记录个数。
List list=query.list();
注意:条件查询
Session session=HibernateSessionFactory.getSession();
Query query=session.createQuery("from Customer cus wherecus.name='zhou'");

 2、取表中部分列时
(1) 单一属性查询。还是返回一个集合,只不过集合中存储的不是表的实例而是对象。
Session session = null;
session = HibernateSessionFactory.getSession();
List cnames = session.createQuery("selectcname fromCustomer").list();
for (int i=0;i< cnames.size();i++) {
String name = (String)cnames.get(i);
System.out.println(name);
}


(2) 多个属性的查询,使用对象数组
Session session = null;
session = HibernateSessionFactory.getSession();
//查询多个属性,其集合元素是对象数组
//数组元素的类型,跟实体类的属性的类型相关
List students = session.createQuery("selectsno, sname fromStudents").list();
for (int i=0;i< students.size();i++) {
Object[] obj = (Object[])students.get(i);
System.out.println(obj[0] + ", " + obj[1]);
}

 (3) 多个属性的查询,使用List集合装部分列
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery("selectnew list(cus.name,cus.phone) from Customer cus");
List list = query.list();
for (int i = 0; i < list.size(); i++) {
List temp=(List)list.get(i);
System.out.println(temp.get(0));  //0是索引
}

 (4)使用Map集合装部分列
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery("selectnew map(cus.name,cus.phone) from Customer cus");
List list = query.list();
for (int i = 0; i < list.size(); i++) {
Map temp=(Map)list.get(i);
System.out.println(temp.get("1"));  //"1"是key
}

 3、内连接
Query query=session.createQuery("select c.name, s.namefrom Student s join s.classes c ").list();
for (Iterator iter = students.iterator();iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + ", " + obj[1]);
}
4、外连接
select c.name, s.name from Classes c left join c.students s
select c.name, s.name from Classes c right join c.students s

5、带参数的查询
(1)  ?作为参数如"from Customer cus where cus.name=?";
     Session session = HibernateSessionFactory.getSession();
    Query query = session.createQuery("from Customer cus where cus.name=?");
     query.setParameter(0, "zhou");
     List list = query.list();
(2)  参数名称 :name   如" from Customer cus where cus.name=:name";
Session session = HibernateSessionFactory.getSession();
   Query query = session.createQuery("from Customer cus where cus.name=:name ");
   query.setParameter("name", "zhou");
   List list = query.list();

(3)  条件查询,使用?的方式传递参数
 Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.nameLIKE ?");
 query.setParameter(0, “%周%”); //传递参数参数的索引是从0开始的。   如条件查询,使用":参数"名称的方式传递参数
Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.nameLIKE :myname");
query.setParameter("myname", "张三");//传递参数
因为setParameter方法返回Query接口,所以可用省略方式来查询
List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.nameLIKE :myname and s.id = :myid")
setParameter("myname", "%周%").setParameter("myid", 15).list();

6、嵌入原生sql测试
 SQLQuery sqlQuery = session.createSQLQuery("select *from t_student");
List students = sqlQuery.list();
for (Iterator iter = students.iterator();iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + ", " + obj[1]);
}


0 0
原创粉丝点击