Hibernate環境http://www.hibernate.org/からHibernate CoreとHibernate Toolsをダウンロードしました。 Hibernate Tools(Update site:http://download.jboss.org/jbosside/updates/development )はEclipseに組み込んでDBよりJavaBeans,マッピングファイル,設定ファイルを自動生成してくれます。 この中のHibernate ConsoleはHQLを試すには便利です。Eclipse3.2でも動きました。 Eclipse パーフェクトマニュアル Vol.6に詳細があります。 またMiddlegen(http://boss.bekk.no/boss/middlegen/ )もあり、EclipsePlugin?として、MiddlegenIDE 1.3.3(http://sourceforge.net/project/showfiles.php?group_id=36044 )があり、自動生成してくれます。 参考http://www.atmarkit.co.jp/fjava/rensai3/eclipseplgn03/eclipseplgn03_3.html サンプル* Table001 * <many-to-one * name="table003" * class="org.ultimania.model.Table003" * update="false" insert="false"> * <column name="nokokyaku" /> * <column name="nokanri" /> * </many-to-one> public static void main(String[] args) { Configuration config = new Configuration(); config = config.configure(); SessionFactory sessionfactory = config.buildSessionFactory(); Session session = sessionfactory.openSession(); Transaction tx = session.beginTransaction(); try { // 1テーブル全件ロード Criteria crit = session.createCriteria(Table003.class); List list = crit.list(); for (int i = 0; i < list.size(); i++) { Table003 table003 = (Table003) list.get(i); System.out.println("A:" + table003.getComp_id().getDbhinban() + ":" + table003.getNmsyohin()); } // 1テーブルプライマリーキーで検索 load使用 Table003PK table003PK = new Table003PK(); table003PK.setNokokyaku("A"); table003PK.setDbhinban("BBB"); Table003 table003 = (Table003) session.load(Table003.class, table003PK); System.out.println("B:" + table003.getComp_id().getDbhinban() + ":" + table003.getNmsyohin()); //criteriaを複数 Criteria crit2; crit = session.createCriteria(Table001.class); crit2 = crit.createCriteria("table003"); crit.add(Expression.like("nokanri", "OHR%")); crit2.add(Expression.like("comp_id.dbhinban", "%BK")); //where this_.dbhinban like ? list = crit.list(); for (int i = 0; i < list.size(); i++) { Table001 table001 = (Table001) list.get(i); System.out.println("B1:" + table001.getNmsyohin() ); } // HSQLで検索 プライマリキーの場合は、middlegenで生成したプライマリキークラスを使用 Query q = session.createQuery("from Table003 x3 where x3.comp_id.nokokyaku = :nokokyaku"); q.setString("nokokyaku", "TOP"); List result = q.list(); for (int i = 0; i < result.size(); i++) { Table003 table0031 = (Table003) result.get(i); System.out.println("C:" + table0031.getComp_id().getDbhinban() + ":" + table0031.getNmsyohin()); } // HSQLで検索 件数をしている 11件目(0から始まる)から20件 同等にCriteriaでも件数指定可 q = session.createQuery("from Table003 x3 where x3.comp_id.nokokyaku = :nokokyaku"); q.setString("nokokyaku", "TOP"); q.setFirstResult(10); q.setMaxResults(20); result = q.list(); for (int i = 0; i < result.size(); i++) { Table003 table0031 = (Table003) result.get(i); System.out.println("D:" + table0031.getComp_id().getDbhinban() + ":" + table0031.getNmsyohin()); } // 集合関数 q = session.createQuery("select sum(kgjyodai),avg(kgjyodai) from Table003 x3"); Object[] data = (Object[])q.uniqueResult(); System.out.println("E:" + ((Integer)data[0]).toString()); /* 複数の場合 result = q.list(); for (int i = 0; i < result.size(); i++) { Object[] data = (Object[])result.get(i); Integer a = (Integer)data[0]; System.out.println("E:" + ((Integer)((Object[])result.get(i))[0]).toString()); } */ // HSQLで検索 1件と分かっている場合 uniqueResultをつかっている。 q = session.createQuery("from Table003 x3 where x3.comp_id.nokokyaku = :nokokyaku and x3.comp_id.dbhinban = :dbhinban"); q.setString("nokokyaku", "A"); q.setString("dbhinban", "BBB"); table003 = (Table003) q.uniqueResult(); System.out.println("F:" + table003.getComp_id().getDbhinban() + ":" + table003.getNmsyohin()); // 結合(シータスタイル) String strSQL = " select xx001.*,xx003.* from table_xx003 xx003,table_xx001 xx001 where xx003.dbhinban = xx001.nokanri"; strSQL = strSQL + " and xx003.dbhinban like '11%'"; strSQL = strSQL + " order by xx003.dbhinban"; SQLQuery sqlQuery = session.createSQLQuery(strSQL); sqlQuery.addEntity("xx003", Table003.class); sqlQuery.addEntity("xx001", Table001.class); list = sqlQuery.list(); for (int i = 0; i < list.size(); i++) { Object[] items = (Object[]) list.get(i); Table003 table003a = (Table003) items[0]; Table001 table001a; if (items[1] == null) { table001a = new Table001(); } else { table001a = (Table001) items[1]; } System.out.println("G:" + table003a.getComp_id().getDbhinban() + ":" + table001a.getNolot()); } // 外部結合 strSQL = " select xx003.*,xx001.* from table_003 xx003 left join table_001 xx001 on xx003.dbhinban = xx001.nokanri"; strSQL = strSQL + " where xx003.dbhinban like '11%'"; strSQL = strSQL + " order by xx003.dbhinban"; sqlQuery = session.createSQLQuery(strSQL); sqlQuery.addEntity("xx003", Table003.class); sqlQuery.addEntity("xx001", Table001.class); sqlQuery.setFirstResult(0); sqlQuery.setMaxResults(3); list = sqlQuery.list(); for (int i = 0; i < list.size(); i++) { Object[] items = (Object[]) list.get(i); Table003 table003a = (Table003) items[0]; Table001 table001a; if (items[1] == null) { table001a = new Table001(); } else { table001a = (Table001) items[1]; } System.out.println("H:" + table003a.getComp_id().getDbhinban() + ":" + table001a.getNolot()); } // 1件更新 table003.setCdcolor("ほほ"); //session.save(table003); // clearを使った場合、分離されsave時にinsertとなってしまうので、updateにしている。 session.clear(); session.update(table003); //一括更新 Query query = session.createQuery("update Table003 set cdcolor = '赤'"); int intResult = query.executeUpdate(); System.out.println("I:" + intResult); tx.commit(); } catch (HibernateException ex) { ex.printStackTrace(); tx.rollback(); } finally { session.close(); } } ここでのTable003PKはデフォルトでMiddlegenで生成した時にプライマリキーのクラスが別に作成されますので、そのまま使用しています。 TIPSSQL文の表示hibernate.cfg.xmlに <property name="show_sql">true</property> を追加 リンクHibernateリファレンス・ドキュメント 参考書籍コメント
|