hibernateの2種類のクエリーとページング

2081 ワード

久しぶりにhibernateを使って開発して、多くのものが少し疎遠になりました.今日ふと思いついたついでに自分で復習して、hibernateはやはり便利だと思って、少なくとも彼は統一的なページを提供しました.開発はデータベースを交換するために大量のコードを修正することはありません.
hibernateのクエリーには、hqlクエリー、Criteriaクエリーの2種類があります.2種類とも使いやすいと思います
1.hqlのパラメータ付きクエリーには、インデックスを使用しない小さなテクニックがあります.
Query q=session.createQuery("update StudentInfo set username=? where fid=?");
			q.setString(0, "   ");
			q.setInteger(1, 3);

上のこれは原始的な書き方で、もう一つもっと使いやすいのは疑問符の場所を     :パラメータの名前  ,これで順番を間違えるのを恐れる必要はありません.
Query q=session.createQuery("update StudentInfo set username=:username where fid=:fid");
			q.setString("username", "   ");
			q.setInteger("fid", 3);

2.Criteriaを使用してデータを照会する方法はhql文を書く必要がなく、個人的には簡単にこの方法を使うのも十分だと思います.Restrictionsにはorなど多くのクエリー条件があり、inには対応するサポートがあります.
public void otherQuery() {
		Session session = null;
		Transaction tra = null;
		//        session
		try {
			session = HibernateUtil.getSession();
			tra = session.beginTransaction();
			Criteria c=session.createCriteria(StudentInfo.class);
			//c.add(Restrictions.eq("username", "   "));
                        c.add(Restrictions.or(Restrictions.lt("fid", 5)));
                        //        
                        c.setFirstResult(0);
                        //    10   
                        c.setMaxResults(10);
			List<StudentInfo> all = c.list();
			//      
			//StudentInfo info=(StudentInfo)c.uniqueResult();
			for (StudentInfo studentInfo : all) {
				System.out.println("  :"+studentInfo.getUsername());
			}
			tra.commit();

		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}

同じクエリーの単一データもgetメソッドを使うことができます.自分でやってみてください.次のページの面接でよく聞かれますが、メモに重点を置いてください.
           //        
            c.setFirstResult(0);
            //    10   
            c.setMaxResults(10);