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

Hibernate 查询方式
1 Hibernate 查询 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 where cus.name='zhou'");

 2 、取表中部分列时
(1) 单一属性查询。还是返回一个集合,只不过集合中存储的不是表的实例而是对象。
Session session = null;
session = HibernateSessionFactory.getSession();
List cnames = session.createQuery(" select cname from Customer").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(" select sno, sname from Students").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(" select new 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(" select new 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.name from 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.name LIKE ?");
 query .setParameter(0, “%周%”); //传递参数参数的索引是从0开始的。   如条件查询, 使用 ": 参数 " 名称的方式传递参数
Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name LIKE :myname");
query.setParameter("myname", "张三");//传递参数
因为setParameter方法返回Query接口,所以可用省略方式来查询
List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name LIKE :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]);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值