上記の記事では、EasyUIメニューの実装を完了しました。表示するにはここをクリックしてください。このセクションでは、主にカテゴリServiceImpl実装クラスについて書き、データベースのカスケードクエリを完了します。一般的に、プロジェクトは背面から正面に行われ、最初にサービスを実行し(DAOを抽出せず、最終的に抽出しませんでした)、次に終了後に上層を実行します。
書く前に、データベースのテーブルを見てみましょう。
存在する場合はデータベースをドロップします。 /*データベースを作成し、エンコードを設定*/データベースショップのデフォルト文字セットUTF8を作成します。ショップを使用します。 /*管理者テーブルを削除*/ councedが存在する場合はテーブルをドロップします。 /*製品カテゴリテーブルを削除*/テーブルをドロップするカテゴリが存在する場合。 /*========================================================================================================================= ====================================================================================================================================== ============================================================================================================================================== ======================================================================================================================================管理者ログイン名*/ログインvarchar(20)、/*管理者名*/ name varchar(20)、/*管理者パスワード*/ pass varchar(20)); /*================================================================================================ ============================================================================================== ============================================================================================== ==================================================================================================== false、 /*管理者がこのカテゴリを管理する外部キー
主に2つのテーブル、製品カテゴリテーブルと管理者テーブル、および外部キー関連の管理者テーブルが製品カテゴリテーブルに提供されています。つまり、製品と管理者は多くの関係です。次に、製品のクエリのカテゴリ情報の作成を開始し、カスケード管理者が必要です。
1.カスケードクエリメソッドを実装します
まず、このメソッドをカテゴリサービスインターフェイスで定義します。
パブリックインターフェイスカテゴリセルサービスは、baseService <カテゴリ> {//クエリカテゴリ情報、カスケード管理者パブリックリスト<カテゴリ> queryjoinaccount(string type); //カテゴリの名前のクエリ}次に、このメソッドをCategoryServiceの実装クラスCategoryServiceImplに実装します。
@Service( "CategoryService")Public Class CategoryServiceImpl拡張BaseServiceimpl <Category> CategoryService {@Override publics <category> queryjoinaccount(string hql = "from category c。 return getsession()。create query(hql).setString( "type"、 "%" + type + "%")。list(); }} 2つのモデルの中で、注釈へのリンクを割り当てます。
// @manytoone(fetch = fetchtype.eager)@joincolumn(name = "account_id")パブリックアカウントgetAccount(){return this.account; } // @onetomany(cascade = cascadeType.all、fetch = fetchtype.lazy、mappedby = "account")public set <category> getCategories(){return this.categories; }次に、テストクラスでテストします。
@runwith(springjunit4classrunner.class)@contextconfiguration(locations = "classpath:beans.xml")public class categoryserviceimpltest {@resource private categoryservice categoryservice; @test public void testqueryjoinaccount(){for(category c:categoryservice.queryjoinaccount( "")){system.out.println(c); System.out.println(c.getAccount()); }}} 2。カスケードクエリの問題
コンソールの出力を見ると、複数のSQLステートメントが送信されたことがわかりますが、一度だけクエリしたので、なぜそんなに多くのステートメントを送信するのですか?これは一般的な1+nの問題です。いわゆる1+nの問題は、最初に現在のオブジェクトを照会するためのステートメントを発行し、次にnステートメントを発行して関連するオブジェクトを照会することであり、効率が非常に低くなります。ここには2つのオブジェクトしかありません。より多くのオブジェクトがある場合、効率は大幅に低下します。この問題をどのように解決する必要がありますか?
FetchType.lazyを生成するためにFetchを設定した場合、複数のステートメントを投稿することはありませんが、これは間違いなく不可能だと思うでしょう。より良い解決策は、HQLステートメントを自分で書き、Join Fetchを使用することです。詳細については、変更されたカテゴリServiceImpl実装クラスをご覧ください。
@Service( "CategoryService")Public Class CategoryServiceImpl拡張BaseServiceImpl <Category> CategoryService {@Override public list <category> queryjoinaccount(string hql = "from category c from category c left effect from from from fitch c.account c.type return getsession()。create query(hql).setString( "type"、 "%" + type + "%")。list(); }}アカウントと一緒にクエリするための左結合手段、アカウントオブジェクトをカテゴリに追加する手段を取得するため、1つのSQLステートメントのみが送信され、返されたカテゴリにはアカウントオブジェクトも含まれます。
3.ページング関数を完了します
冬眠のページネーションは非常に簡単です。 2つのメソッドを呼び出す必要があります。SetFirstResultとSetMaxResults:CategoryServiceインターフェイスとその実装クラスCategoryServiceImplを変更しましょう。
//カテゴリサービスパブリックインターフェイスカテゴリサービスbaseService <カテゴリ> {//クエリカテゴリ情報、カスケード管理者パブリックリスト<カテゴリ> queryjoinAccount(string type、int page、int size); //ページネーションを実装} // categoryserviceimpl @service( "categoryservice")パブリッククラスカテゴリcategoryserviceimpl extends baseServiceimpl <カテゴリ>カテゴリセルビス{@Override public <category> queryjoinaccount(string type、int page、int size) return getsession()。create query(hql).setString( "type"、 "%" + type + "%").setfirstreSult((page-1) * size)// show .setmaxResults(size)//いくつかの.list(); }}テストクラスでテストしましょう。
@runwith(springjunit4classrunner.class)@contextconfiguration(locations = "classpath:beans.xml")public class categoryserviceimpltest {@resource private categoryservice categoryservice; @test public void testqueryjoinaccount(){for(category c:categoryservice.queryjoinaccount( ""、1,2)){//最初のページ、ページごとの2つのデータを表示します。 }}}この目的のために、サービス方法の作成を終了し、製品カテゴリのカスケードクエリとページング機能を完了しました。
(注:最後に、プロジェクト全体のソースコードのダウンロードを提供します!誰もが収集または共有できます)
元のアドレス:http://blog.csdn.net/eson_15/article/details/51320212
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。