hibernate 条件查询的一些写法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
hibernate 条件查询的一些写法
默认分类 2010-09-28 22:14:38 阅读39 评论0 字号:大中小订阅这里定义了两个实体类,是一对多双向关联:
public class SimpleConditionQuery extends TestCase { //
public void testQuery1(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("select id,name from Student s where like '%1%'");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+"---"+obj[1]);
}
session.getTransaction().commit();
}
//使用占位符
public void testQuery2(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
// Query query = session.createQuery("select id,name from Student s where like ?"); // query.setParameter(0, "%1%");
// List list = query.list();
//基于方法链的编程
List list = session.createQuery("select id,name from Student s where like ?") .setParameter(0, "%1%")
.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+"---"+obj[1]);
}
session.getTransaction().commit();
}
//另外一种写法,:参数名称的方式传递参数
public void testQuery3(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("select id,name from Student s where
like :myname");
query.setParameter("myname", "%1%");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+"---"+obj[1]);
}
session.getTransaction().commit();
}
//
public void testQuery4(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
List list = session.createQuery("select id,name from Student s where like :myname and s.id=:myid")
.setParameter("myname", "%1%")
.setParameter("myid", 12)
.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+"---"+obj[1]);
}
session.getTransaction().commit();
}
//支持in,需要使用setParameterList进行参数传递,后一个参数传数组
public void testQuery5(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
List list = session.createQuery("select id,name from Student s where s.id in(:myid)") .setParameterList("myid", new Object[]{1,3,5,7,9})
.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+"---"+obj[1]);
}
session.getTransaction().commit();
}
、
//分页查询 setFirstResult(),从0开始
//setMaxResults,每页显示多少条数据
//对象导航查询,在 hql中采用. 进行导航
public void testQuery11(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("select from Student s where like '%1%'");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
String name = (String) iter.next();
System.out.println(name);
}
session.getTransaction().commit();
}
//连接查询,内连接,外连接,(左/右连接),
//内连
public void testQuery12(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
//数据库里,我们查询是这样写Select From A Left Join B On A.id=B.id
//仔细看看在hibernate里是怎么写
Query query = session.createQuery("select , from Student s join s.classes c where like '%班级9%'");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+"---"+obj[1]);
}
session.getTransaction().commit();
}
//左连接,即,把没有学生的班级也可以加载上来
public void testQuery13(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("select , from Classes c left join c.students s ");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+"---"+obj[1]);
}
session.getTransaction().commit();
}
//右连接,把没有班级的无业游民也加载上来
public void testQuery14(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("select , from Classes c right join c.students s ");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+"---"+obj[1]);
}
session.getTransaction().commit();
}
//统计查询
public void testQuery15(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
// Query query = session.createQuery("select count(*) from Student ");
// List list = query.list();
//因为 count(*)得到的是一个单一值,所以可以如下
Long count = (Long) session.createQuery("select count(*) from Student
").uniqueResult();
System.out.println(count);
session.getTransaction().commit();
}
public void testQuery16(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("select ,count(*) from Classes c join c.students group by order by ");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+"---"+obj[1]);
}
session.getTransaction().commit();
}
//hibernate也提供原生SQL查询,session.createSQLQuery()
public void testQuery9(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
List list = null;
list = session.createSQLQuery("select * from student")
.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+"---"+obj[1]+"---"+obj[2]);
}
session.getTransaction().commit();
}
//hibernate 也可以使用外置命名查询,即:sql语句与程序解耦
//具体做法,在映射文件中采用 query标签,
//<query name="searchStudent">
//<![CDATA[
// select s form Student s where s.id<?
// ]]>
// </query>
//在代码里采用session.getNamedQuery("searchStudent")
public void testQuery10(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
List list = null;
list = session.getNamedQuery("searchStudent")
.setParameter(0, 10)
.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Student stu = (Student) iter.next();
System.out.println(stu.getId()+"---"+stu.getName());
}
session.getTransaction().commit();
}
}
//查询多个简单属性,其集合元素是对象数组
//数组元素的类型和对应的属性在实体类中的类型一致
//数组的长度取决与select中属性的个数
public void testQuery2(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("select id,name from Student");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+" "+obj[1]);
}
session.getTransaction().commit();
}
//如果认为返回数组不够对象化,可以采用hql动态实例化student对象
//此时list中为student对象集合,这是,Student实体要提供相应属性的构造函数
public void testQuery3(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("select new Student(id,name) from Student");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Student stu = (Student) iter.next();
System.out.println(stu.getId()+"---"+stu.getName());
}
session.getTransaction().commit();
}
//多个属性查询,可以使用别名
public void testQuery4(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("select s.id, from Student s");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+" "+obj[1]);
}
session.getTransaction().commit();
}
//可以使用as命别名
public void testQuery5(){
Session session = HibernateUtil.getSession();
session.beginTransaction();
Query query = session.createQuery("select s.id, from Student as s");
List list = query.list();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] obj = (Object[]) iter.next();
System.out.println(obj[0]+" "+obj[1]);
}
session.getTransaction().commit();
}。