在Hibernate中有一種查詢語句是Criteria查詢(QBC查詢),今天呢 我們就一個個的詳細的跟大家一起探討Criteria語句的相關知識點 案例前的準備 案例一:查詢所有學生信息(Criteria) 經過以上語句我們可以看到的查詢結果如下: 案例二:查詢男生的信息(帶條件查詢)(Restr ...
在Hibernate中有一種查詢語句是Criteria查詢(QBC查詢),今天呢 我們就一個個的詳細的跟大家一起探討Criteria語句的相關知識點
案例前的準備
//插入測試數據,構建資料庫 public static void insertInfo(){ //獲取Session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //構建班級 Grade grade=new Grade("超級無敵宇宙班","炒雞不錯"); //構建第二個班級 Grade grade2=new Grade("超級班","很不錯"); //構建學生 Student stu1=new Student("高冷小伙3","男"); Student stu2=new Student("高冷小伙4","女"); //指定關係 grade.getStus().add(stu1); grade.getStus().add(stu2); //保存班級 session.save(grade); session.save(grade2); //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
案例一:查詢所有學生信息(Criteria)
//使用Criteria語句查詢所有學生信息 public static void selectStu(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Student.class); List<Student> list = criteria.list(); for (Student stu : list) { System.out.println(stu.getSname()); System.out.println(stu.getSex()); } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
經過以上語句我們可以看到的查詢結果如下:
案例二:查詢男生的信息(帶條件查詢)(Restrictions.eq())
//使用Criteria語句帶條件查詢學生信息 public static void selectStuWhere(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Student.class).add(Restrictions.eq("sex", "男")); List<Student> list = criteria.list(); for (Student stu : list) { System.out.println(stu.getSname()); System.out.println(stu.getSex()); } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
查詢結果如下:
案例三:關聯查詢,查詢班級下的學生信息(Restrictions.eq())
//查詢班級為超級無敵宇宙班的班級學生信息 public static void selectStuWhereGrade(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Grade.class).add(Restrictions.eq("gname", "超級無敵宇宙班")); List<Grade> list = criteria.list(); for (Grade gra : list) { for(Student stu:gra.getStus()){ System.out.println(stu.getSname()); } } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
查詢結果如圖:
案例四:關聯查詢,查詢班級下的學生信息(取別名的方式)(Restrictions.eq())
//查詢班級為超級無敵宇宙班的班級學生信息(方式二:取別名) public static void selectStuWhereGradeAsName(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Student.class); //取別名 criteria.createAlias("grade", "g"); Criterion criterion= Restrictions.eq("g.gname", "超級無敵宇宙班"); criteria.add(criterion); List<Student> list = criteria.list(); for (Student stu : list) { System.out.println(stu.getSname()); } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
查詢結果如圖
案例五:範圍查詢 查詢名字是高冷小伙3和高冷小伙4的學生信息(Restrictions.in())
//範圍查詢 查詢名字是高冷小伙3和高冷小伙4的學生信息 public static void selectStuWhereName(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Student.class); List lists=new ArrayList(); lists.add("高冷小伙3"); lists.add("高冷小伙4"); Criterion criterion= Restrictions.in("sname", lists); criteria.add(criterion); List<Student> list = criteria.list(); for (Student stu : list) { System.out.println(stu.getSname()); } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
查詢結果如圖
案例六:模糊查詢,查詢學生姓名中有3的學生名稱(Restrictions.like())
//模糊查詢,查詢學生姓名中有3的學生名稱 public static void selectStuLike(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Student.class); //如果是 ilike的話是不區分大小寫的 //Criterion criterion= Restrictions.like("sname", "%3%"); //或者是採用如下方式,則可以省略%% Criterion criterion= Restrictions.like("sname", "3",MatchMode.ANYWHERE); criteria.add(criterion); List<Student> list = criteria.list(); for (Student stu : list) { System.out.println(stu.getSname()); } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
查詢結果如圖
案例七:邏輯控制 多條件查詢 查詢性別為男 名字中有 3的學生信息(Restrictions.and())
//邏輯控制 多條件查詢 查詢性別為男 名字中有 3的學生信息 public static void selectStuManyWhere(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Student.class); //條件1 Criterion c1= Restrictions.like("sname", "3",MatchMode.ANYWHERE); //條件2 Criterion c2= Restrictions.eq("sex","男"); //整合條件 and Criterion criterion=Restrictions.and(c1, c2); criteria.add(criterion); List<Student> list = criteria.list(); for (Student stu : list) { System.out.println(stu.getSname()); } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
查詢結果如圖
案例八:非空檢查 查詢沒有學生的班級(Restrictions.isEmpty())
//非空檢查 查詢沒有學生的班級 public static void selectNotStuGrade(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Grade.class); Criterion criterion=Restrictions.isEmpty("stus"); criteria.add(criterion); List<Grade> list = criteria.list(); for (Grade grade : list) { System.out.println(grade.getGname()); } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
查詢結果如圖
案例九:動態查詢 查詢 學號大於0 名字中有3的學生信息(Criteria.add())
//動態查詢 查詢 學號大於0 名字中有3的學生信息 public static void selectStuDynamic(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Student.class); //準備兩個變數當成是前臺穿過來的條件 Integer stuno=0; String stuname="3"; //動態拼接 if(stuno!=null){ criteria.add(Restrictions.gt("sid",stuno)); } if(stuname!=null){ criteria.add(Restrictions.ilike("sname",stuname,MatchMode.ANYWHERE)); } List<Student> list = criteria.list(); for (Student stu : list) { System.out.println(stu.getSname()); } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
查詢結果如圖
案例十:排序 查詢學號大於0的學生按照學號降序排列(criteria.addOrder())
//排序 查詢學號大於0的學生按照學號降序排列 public static void selectStuOraderby(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Student.class); Criterion criterion=Restrictions.gt("sid", 0); criteria.add(criterion).addOrder(Order.desc("sid")); List<Student> list = criteria.list(); for (Student stu : list) { System.out.println(stu.getSname()); } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
查詢結果如圖
案例十一:分頁查詢 查詢第二頁數據 每頁顯示一條記錄(criteria.setMaxResults()和criteria.setFirstResult())
//分頁查詢 查詢第二頁數據 每頁顯示一條 public static void selectStuPage(){ //獲取session Session session=HibernateUtil.currentSession(); //開啟事務 Transaction tx = session.beginTransaction(); //使用Criteria查詢 Criteria criteria = session.createCriteria(Student.class); /*//顯示總記錄數 Projection projection = Projections.count("sid"); criteria.setProjection(projection); int count = ((Long)criteria.uniqueResult()).intValue(); System.out.println("總記錄數為:"+count);*/ //準備兩個變數 int pageSize=1;//每頁顯示的條數 int pageIndex=2;//第幾頁 criteria.setMaxResults(pageSize); criteria.setFirstResult((pageIndex-1)*pageSize); List<Student> list = criteria.list(); for (Student stu : list) { System.out.println(stu.getSid()); System.out.println(stu.getSname()); } //提交事務 tx.commit(); //關閉連接 HibernateUtil.closeSession(); }
查詢結果如圖
案例十二:使用DetachedCriteria查詢超級無敵宇宙班的所有學生信息(DetachedCriteria)
//使用DetachedCriteria查詢超級無敵宇宙班的所有學生信息 public static void detachedCriteria(){ //獲取session Session session=HibernateUtil.currentSession(); //構建一個DetachedCriteria對象 DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Student.class); //取別名 detachedCriteria.createAlias("grade", "g"); //查詢 Criterion criterion= Restrictions.eq("g.gname", "超級無敵宇宙班"); //綁定 detachedCriteria.add(criterion); //引入session List<Student> list = detachedCriteria.getExecutableCriteria(session).list(); for (Student stu : list) { System.out.println(stu.getSid()); System.out.println(stu.getSname()); } }
結果如圖
通過以上幾種方式就差不多完成了Criteria查詢的常用的知識點了!