MyBatis-Springプロジェクト
現在、ほとんどのJavaインターネットプロジェクトは、Spring MVC + Spring + MyBatisを使用して構築されています。
Spring IOCを使用すると、さまざまなJavaリソースを効果的に管理し、プラグアンドプレイ機能を実現できます。 Spring AOPフレームワークを通じて、データベーストランザクションはSpring管理に委ねられ、トランザクションコードの大部分を排除し、MyBatisの高い柔軟性、構成可能、最適化されたSQL特性と組み合わせることができます。
MyBatisとSpringの2つの主要なフレームワークがJavaインターネットテクノロジーの主流のフレームワークの組み合わせになったことは間違いありません。彼らは、大規模なデータボリュームと大規模な要求のテストに耐え、インターネットシステムで広く使用されています。 MyBatis-Springを使用すると、ビジネスレイヤーとモデル層の分離が良くなります。同時に、Spring環境でMyBatisを使用することはよりシンプルで、多くのコードを保存します。MyBatis-Springがそれらをカプセル化するため、SQLSessionFactoryやSQLSessionなどのオブジェクトの使用を避けることさえできます。
抜粋:「Java EEインターネット軽量フレームワーク統合開発」
ステップ1:テストプロジェクトを作成します
最初のステップは、アイデアで[MyBatisandSpring]と呼ばれる新しいWebProjectプロジェクトを作成することです。
次に、[SRC]で4つの空のパッケージを作成します。
次に、さまざまなリソース構成ファイルを配置する新しいソースフォルダー[config]を作成します。
次に、[web]フォルダーの下に新しい[web-inf]デフォルトのデフォルトのフォルダーを作成し、その下に[クラス]と[lib]を作成し、[クラス]の下のプロジェクトの出力場所を変更します。
プロジェクトの完全な初期構造は次のとおりです。
ステップ2:依存関係JARパッケージの導入
2番目のステップは、プロジェクトの依存関係JARパッケージを準備することです。
上記のJARパッケージを[lib]フォルダーに[web-inf]フォルダーの下に置き、依存関係を追加します。
ステップ3:スプリング構成ファイルを書き込みます
3番目のステップは、スプリング構成ファイルを書き込むことです。
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns:context = "http://www.springframework.org/schema/context" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.orgwork.org/schems.spring/ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <! - 構成ファイルの読み込み - > <コンテキスト:プロパティホルダーロケーションid = "dataSource"> <プロパティ名= "driverclassname" value = "$ {jdbc.driver}"/> <property name = "url" value = "$ {jdbc.url}"/> <プロパティ名= "username" value = "$ {jdbc.username}" </bean> <! - sqlsessionfactory-> <bean id = "sqlsessionfactory"> <! - mybatis configuration file-> <property name = "configlocation" value = "mybatis/sqlmapconfig.xml"/> <! - データソース - >ステップ4:MyBatis構成ファイルを書き込みます
ステップ4:[MyBatis]パッケージSQLMAPCONFIG.XMLの下にMyBatisのグローバル構成ファイルを書き込む:
<?xml version = "1.0" encoding = "utf-8"?> <!doctype構成public " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" name = "lazyloadinginabled" value = "true"/> <! - アクティブロードをパッシブロードに変更する(つまり、オンデマンドのロード) - > <name = "aggressivelazyloading" value = "false"/> <! - グローバルキャッシュスイッチをオンにする(セカンダリキャッシュ)デフォルト値はtrueです - > < <パッケージ名= "cn.wmyskxz.pojo"/> </typealiase> <! - マップファイルをロードする - > <マッパーズ> <! - リソース方法を介して一度に1つのマップファイルをロードする - > <マッパーリソース= " </mappers> </configuration>
この構成ファイルで:
ステップ5:マッパーおよびその他の構成ファイルを書き込みます
ステップ5:マッパーマッピングファイルを書き込みます。ここでは、マッパーマッピングファイルの名前は「usermapper.xml」(sqlmapconfig.xmlの構成と一致しています)として定義されています。効果をテストするために、1つのクエリクラスSQLマップのみが構成されています。
<?xml version = "1.0" encoding = "utf-8"?> <!doctype mapper public " - // mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd parametertype = "_ int" resultType = "user"> select * from user where id =#{id} </select> </mapper>この構成では、「cn.wmyskxz.pojo」パッケージの下のエンティティクラスがエイリアス(つまり、下皮イニシャルのクラス名)を使用する前にsqlmapconfig.xmlで構成されていたため、出力パラメーターは「ユーザー」にマッピングされます。 「cn.wmyskxz.pojo」パッケージ:
パッケージcn.wmyskxz.pojo; import java.io.serializable; public classユーザーはSerializable {private int id;プライベート文字列ユーザー名; / * getter and setter */}シリアル化可能なインターフェイスを実装することは、マッパーダイナミックプロキシのその後の使用に備えるためであり、ここでは動的プロキシは使用されません。
データベース接続情報は、データベースリソース「db.properties」で構成され、「key = value」の形式で構成されています。文字列は「$ {}」を使用して、キーに対応する値を取得します。
jdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc:mysql:// localhost:3306/mybatis?charatereCoding = utf-8jdbc.username = rootjdbc.password = root
さらに、ログ構成は以前の構成と同じなので、直接貼り付けました。
#グローバルロギング構成#開発環境では、ログレベルをデバッグするように設定し、生産環境をinfoまたはerrorlog4j.rootlogger = debug、stdout#consoleに設定する必要があります出力... log4j.appender.stdout = org.apache.log4j.consoleappenderlog4j.appender.stdout.layout = org.apache.log4j.patternlayoutlog4j.Appender.stdout.layout.conversionpattern =%5p [%t] -%m%n
ステップ6:DAOレイヤーを書きます
ステップ6:データアクセスオブジェクトレイヤーを書き込みます。
このプロジェクトはユーザーユーザーのみを照会しているため、DAOレイヤーには1つのクラスのみがあります。 DAOレイヤーのインターフェイスインターフェイスは、finduserbyIDメソッドを定義する「cn.wmyskxz」パッケージの下に作成され、パラメーターはユーザーのID値(intタイプ)です。
パッケージcn.wmyskxz.dao;インポートcn.wmyskxz.pojo.user; public interface userdao {// id public user finduserbyid(int id)throws exception;}次に、同じパッケージの下にuserdaoインターフェイス実装クラスuserdaoimplを作成します。
パッケージcn.wmyskxz.dao; Import cn.wmyskxz.pojo.user; Import org.apache.ibatis.session.sqlsession; Import org.mybatis.spring.support.sqlsessiondaosupport; Public class userdaoimpl extends sqlsessiondaosuptorts extends sqlsessiondaosuptort extens finduserbyid(int id)スロー例外{// sqlsessiondaosupportクラスを継承し、this.getsqlsession()get sqlsession sqlsession sqlsession = this.getsqlsession();ユーザーユーザー= sqlsession.selectone( "test.finduserbyid"、id);ユーザーを返します。 }}いくつかの説明があります:
<! - 元のDAOインターフェイス - > <Bean Id = "userdao"> <プロパティ名= "sqlsessionfactory" ref = "sqlsessionfactory"/> </bean>
注:DAO実装クラスがSQLSessionDaoSupport親クラスを継承した後、SQLSession Sessionインスタンスクラスを自然に取得する方法を定義する必要はありません。親クラスは、デフォルトでデータソース情報をロードし、SQLSessionクラスを取得する方法を提供します。
ステップ7:サービステストクラスを書き込みます
[cn.wmyskxz.test]パッケージの下に[userservicetest]テストクラスを作成します。
パッケージcn.wmyskxz.test; Import cn.wmyskxz.dao.userdao; Import cn.wmyskxz.pojo.user; import org.junit.before; import org.junit.test; import org.springframework.context.context; Import; org.springframework.context.support.classpathxmlapplicationcontext; public class userservicetest {private applicationcontext applicationContext; //テスト方法を実行する前に最初にスプリング構成ファイルオブジェクトを取得します} @test public void testfinduserbyid()スロー例外{// userdao userdao =(userdao)applicationContext.getBean( "userdao"); //ユーザーユーザー= userdao.finduserbyid(1)を呼び出す; //ユーザー情報System.out.println(user.getId() + ":" + user.getUsername()); }}テスト方法を実行すると、出力の結果は次のとおりです。
動的プロキシ +注釈の実装
上記の例プログラムは、Mapper Dynamic ProxyとAnnotationsを使用して完了しません。動的プロキシと注釈の使用方法を試してみましょう。
ステップ1:userqueryMapperを書き込みます
[Mapper]の下に新しい[userqueryMapper]プロキシインターフェイスを作成し、注釈を使用します。
パッケージcn.wmyskxz.mapper; Import cn.wmyskxz.pojo.user; Import org.apache.ibatis.annotations.select; public interface userquerymapper {@select( "select * from user where where where where where where where where where where where where where where where where where where where where where where findusid(int id)show注:デフォルトでは、Beanの名前はuserqueryMapperです(つまり、最初の文字は小文字です)
プロキシクラスができたので、ここでこのクラスをスキャンするためにSpringに通知する必要があります。 Mapperは、構成オブジェクトをスキャンするために特別なスキャナーを使用する必要があります。
<! - マッパースキャナー - > <bean> <! - cn.wmyskxz.mapperパッケージの下のコンポーネントをスキャン - > <プロパティ名= "basepackage" value = "cn.wmyskxz.mapper"/> </bean>
ステップ2:テストクラスを書きます
今回は、userdaoオブジェクトを取得しなくなりましたが、定義されたマッパープロキシオブジェクトuserquerymapper:
パッケージcn.wmyskxz.test; Import cn.wmyskxz.mapper.userquerymapper; import cn.wmyskxz.pojo.user; import org.junit.before; import org.junit.test; import org.springframework.context.context.context; import; org.springframework.context.support.classpathxmlapplicationcontext; public class userservicetest {private applicationcontext applicationContext; //テスト方法を実行する前に最初にスプリング構成ファイルオブジェクトを取得します} @test public void testfinduserbyid()スロー例外{//リソースオブジェクトを設定してユーザーダオオブジェクトを取得しますusrequerymapper userquerymapper =(userquerymapper)applicationcontext.getBean( "userquerymapper"); // userdaoメソッドユーザー= userquerymapper.finduserbyid(1); //ユーザー情報System.out.println(user.getId() + ":" + user.getUsername()); }}テスト方法を実行し、正しい結果を取得します。
クエリの結果は、以前の非マッパーエージェントの結果と同じであることがわかります。
要約します
上記は、編集者が紹介したMybatisとSpringの間の完璧な統合方法です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!