hibernated的hql语法(查询,分页)方法介绍



hibernated的hql语法(查询,分页)方法介绍。注: * uniqueResult方法

如果我们检索一个对象,明确知道最多只有一个对象,则建议使用该方法:

具体用法如下:

Student s=(Student) session.createQuery(“from Student where sid=’20050003′”).uniqueResult();

                     System.out.println(s.getSname());

hibernated的hql语法(查询,分页)


1.3张表

CREATE TABLE `course` (
  `cid` int(11) NOT NULL,
  `cname` varchar(20) NOT NULL,
  `ccredit` int(11) NOT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*******

CREATE TABLE `student` (
  `sid` int(11) NOT NULL,
  `sname` varchar(20) NOT NULL,
  `ssex` char(2) NOT NULL,
  `sdept` varchar(20) NOT NULL,
  `sage` int(11) NOT NULL,
  `saddress` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
***********

CREATE TABLE `stucourse` (
  `stucourseid` int(11) NOT NULL AUTO_INCREMENT,
  `sid` int(20) NOT NULL,
  `cid` int(11) NOT NULL,
  `grade` float NOT NULL,
  PRIMARY KEY (`stucourseid`),
  KEY `sid` (`sid`),
  KEY `cid` (`cid`),
  CONSTRAINT `cid` FOREIGN KEY (`cid`) REFERENCES `course` (`cid`),
  CONSTRAINT `sid` FOREIGN KEY (`sid`) REFERENCES `student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
2.hibernate的关系映射文件

(1)public class Student implements java.io.Serializable {
 
// Fields
 
private Integer sid;
private String sname;
private String ssex;
private String sdept;
private Integer sage;
private String saddress;
private Set stucourses = new HashSet(0);
(2)

public class Course implements java.io.Serializable {

 
// Fields
 
private Integer cid;
private String cname;
private Integer ccredit;
private Set stucourses = new HashSet(0);
(3)public class Stucourse implements java.io.Serializable {
 
// Fields
 
private Integer stucourseid;
private Student student;
private Course course;
private Float grade;
3.查询语句

package com.ru.service;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.management.RuntimeErrorException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.ru.domain.Stucourse;
import com.ru.domain.Student;
import com.ru.utils.GetSessionFactory;
public class test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//getallpro();
//getlocalpro();
//getlocalpro2();
//getlocalpro3();
page(2);
}
//数据库分页
public static void page(int pagenow1){
//创建变量
int pagenow=1;
int pagesize=3;
int pagecount=0;
int rowscount=0;
//创建session
Session session=GetSessionFactory.getcurrentsession();
//开始事务处理
Transaction ts=session.beginTransaction();
try {
//获取rowscount一共有多少行
String rows=session.createQuery(“select count(*) from Student”).uniqueResult().toString();
if (rows!=null||rows!=”") {
rowscount=Integer.parseInt(rows);
}
//后去pagecount一共有多少页
if (rowscount%pagesize==0) {
pagecount=rowscount/pagesize;
} else {
pagecount=rowscount/pagesize+1;
}
System.out.println(“一共”+pagecount+”页”+(7/3));
//分页查询,firstresult指从那一条开始默认是从0开始,pagerows每一页的行数。
for (int i = 0; i <pagecount; i++) {
System.out.println(“************第”+(i+1)+”页***************”);
pagenow=i+1;
List<Student> list=session.createQuery(“from Student order by sid”).setFirstResult((pagenow-1)*pagesize).setMaxResults(pagesize).list();
for (Student s : list) {
System.out.println(“学号:”+s.getSid()+”姓名:”+s.getSname()+”–年龄:”+s.getSage());
}
}
//提交事务
ts.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
if (ts!=null) {
ts.rollback();
}
e.printStackTrace();
}finally{
if (session!=null&&session.isOpen()) {
session.close();
}
}
}
//查询全部属性
public static void getallpro() {
Session session=null;
Transaction ts=null;
try {
session=GetSessionFactory.getcurrentsession();
ts=session.beginTransaction();
List<Student> list=session.createQuery(“from Student”).list();
//for循环获取数据
for (Student s : list) {
System.out.println(s.getSname());
}
System.out.println(“****************************************”);
//迭代器取
Iterator<Student> it=list.iterator();
while(it.hasNext()){
Student s=it.next();
System.out.println(“—-”+s.getSname()+”—”+s.getSaddress());
}
//通过查询Student获取选得课
System.out.println(“***************************************”);
for (Student s : list) {
if (s.getStucourses().size()==0) {
System.out.println(s.getSname()+”没有选课”);
} else {
Set<Stucourse> sc=s.getStucourses();
for (Stucourse scs : sc) {
System.out.println(s.getSname()+”选了”+scs.getCourse().getCname());
}
}
}
ts.commit();
} catch (Exception e) {
// TODO: handle exception
if (ts!=null) {
ts.rollback();
}
throw new RuntimeException(“全局查询student表错误1″);
}finally{
if (session!=null&&session.isOpen()) {
session.close();
}
}
}
//查询部分属性 1
public static void getlocalpro(){
//获取session,得到连接
Session session=GetSessionFactory.getcurrentsession();
//创建事务
Transaction ts=session.beginTransaction();
//局部查询是返回对象数组列表
try {
List list=session.createQuery(“select sname,sdept from Student”).list();
//for循环获取查询结果
for (int i = 0; i < list.size(); i++) {
Object o[]=(Object[]) list.get(i);
System.out.println(o[0].toString()+”—”+o[1].toString());
}
//iterator获取查询结果
Iterator it=list.iterator();
while(it.hasNext()){
Object ob[]=(Object[]) it.next();
System.out.println(ob[0].toString()+”…..”+ob[1].toString());
}
//提交事务
ts.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
if (ts!=null) {
ts.rollback();
}
e.printStackTrace();
}finally{
if (session!=null&&session.isOpen()) {
session.close();
}
}
}
//查询部分属性 3,
public static void getlocalpro3(){
//获取session,得到连接
Session session=GetSessionFactory.getcurrentsession();
//创建事务
Transaction ts=session.beginTransaction();
//局部查询是返回一个对象数组
try {
//查询计算机系和外语系的学生信息
//2.查询计算机系共多少人?->如果我们返回的是一列数据那么不能用对象数组,而是用对象直接获取
//3.查询选修11号课程的最高分和最低分.
//计算各个科目不及格的学生数量.
List<Object[]> list=(List) session.createQuery(“select count(*),course.cid from Stucourse where grade<60 group by course.cid”).list();
for (Object[] ob:list) {
System.out.println(ob[0]+”—-”+ob[1]);
}
//提交事务
ts.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
if (ts!=null) {
ts.rollback();
}
e.printStackTrace();
}finally{
if (session!=null&&session.isOpen()) {
session.close();
}
}
}
//假如查询到的结果只有一个,那要用uniqueresult,并且得到的是一个对象数组
public static void getlocalpro2(){
//获取session,得到连接
Session session=GetSessionFactory.getcurrentsession();
//创建事务
Transaction ts=session.beginTransaction();
//局部查询是返回一个对象数组
try {
Object stu[]=(Object[]) session.createQuery(“select sname,sdept from Student where id=’1′”).uniqueResult();
System.out.print(stu[0]+”—”+stu[1]);
//提交事务
ts.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
if (ts!=null) {
ts.rollback();
}
e.printStackTrace();
}finally{
if (session!=null&&session.isOpen()) {
session.close();
}
}
}
}