MyBatisの紹介
MyBatisはApacheのオープンソースプロジェクトです。 2010年、このプロジェクトはApache Software FoundationからGoogleコードに移動し、MyBatisと改名されました。 2013年11月にGithubに移住しました。
Ibatisという用語は、「インターネット」と「Abatis」の組み合わせに由来し、JavaベースのPersistence Layer Frameworkです。 Ibatisは、SQLマップやデータアクセスオブジェクト(DAO)を含む永続レイヤーフレームワークを提供します
1。必要な瓶パッケージ
ここでは、MyBatisの使用について個別に説明します。MyBatis-Xxxjarパッケージを挿入します。
Mavenを使用してプロジェクトを構築する場合は、pom.xmlの依存関係に次の構成を配置する必要があります。
<Dependency> groupId> org.mybatis </groupid> mybatis </artifactid> <version> 3.2.2 </version> </dependency>
同社は現在3.2.2を使用しており、自分のJARパッケージに従ってバージョン番号を配置できます。
対応するフレームワークと統合している場合は、統合パッケージを配置する必要があります。たとえば、当社はMyBatisを使用してSpringと統合しています。
また、mybatis-spring-xxx.jarパッケージを追加し、実際の状況に基づいて決定する必要があります。もちろん、データベースドライバーのJARパッケージも不可欠です。
2。XMLからSQLSessionFactoryを構築します
各MyBatisベースのアプリケーションは、SQLSessionFactoryのインスタンスに集中しています。
SQLSessionFactoryのインスタンスは、SQLSessionFactoryBuilderを介して取得できます。
sqlSessionFactoryBuilderは、XML構成ファイルまたは事前に顧客構成インスタンスからSQLSessionFactoryのインスタンスを構築できます。
XMLファイルからSQLSessionFactoryのインスタンスを構築するのは非常に簡単です。 ClassPathの下のリソースファイルを構成に使用することをお勧めします。
ただし、文字列の形式のファイルパスまたはファイルの形式のファイルパスを含む、入力ストリームインスタンスを使用して構成することもできます:// url。
MyBatisには、ClassPathまたは他の場所からのリソースファイルを簡単にロードできるようにする実用的な方法が含まれているリソースと呼ばれるツールクラスが含まれています。
例えば:
string resource = "mybatis-config.xml"; inputstream is = resources.getResourceasStream(resource); sqlsessionFactory sqlsessionFactory = new SQLSessionFactoryBuilder()。ビルド(IS);
XML構成ファイル(構成XML)には、データベース接続インスタンス(DataSource)を取得するためのデータソースなど、MyBatisシステムのコア設定が含まれています。
トランザクションの範囲と制御モードを決定するトランザクションマネージャー(TransactionManager)。構成ファイルについては、後で詳しく説明します。
例えば:
<! - ?xmlバージョン= "1.0"エンコード= "utf-8"? - > <configuration> <環境デフォルト= "開発"> <環境id = "development"> <transactionmanager type = "jdbc"> <datasourceタイプ= "プール"> <プロパティネーム= "ドライバー" value = "com.mysql.jdbc.driver"> value = "jdbc:mysql://192.168.200.12:3306/test_mybatis"> <プロパティ名= "username" value "value" = "root name"> <property name "value =" root123 "> </property> </property> </propertion usermainmapper.xmlファイル。 usermainmapper.xmlはパッケージcom.lanhuigu.mybatis.mapにあるため、リソースはcom/lanhuigu/mybatis/map/usermainmapper.xml - > <mapperリソース= "com/lanhuigu/mybatis/map/mapers.xml> </mapper"> </mappers
環境要素本体には、トランザクション管理と接続プーリングの構成が含まれています。マッパー要素には、マッパーマッパーのセットが含まれています(これらのマッパーのXMLファイルには、SQLコードとマッピング定義情報が含まれています)。
3。SQLSessionFactoryからSQLSessionを取得します
SQLSessionFactoryができたので、SQLSessionのインスタンスを取得できます。 SQLSessionには、SQLコマンドをデータベースに実行するために必要なすべてのメソッドが完全に含まれています。
SQLSessionインスタンスを介して、マッピングされたSQLステートメントを直接実行できます。例えば:
sqlsessionfactory sqlsessionfactory = null; // xml build build sqlsessionfactory instance sqlsession session = null; // sqlsessionfactoryファクトリーインスタンスからsqlsessionオブジェクトを取得{文字列リソース= "mybatis-config.xml";入力リソース=リソース=リソース=リソースsqlSessionFactoryBuilder()。build(is); session = sqlsessionfactory.opensession(); user user = session.selectone( "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid"、1); system.out.out.println(user.getusername();この方法でマッピングを実行することに問題はありません。また、より簡潔な方法でマッピングを実行することもできます。
特定のステートメントのパラメーターと返品値を合理的に説明できるインターフェイスを使用します(たとえば、usermainmapper.class)、
今すぐより明確でタイプセーフコードを実行できるだけでなく、エラーが発生しやすい文字列リテラルやキャストについて心配する必要はありません。例えば:
sqlsession session = sqlsessionfactory.opensession(); usermainmapper usermainmapper = session.getmapper(usermainmapper.class); user user = usermainmapper .queryusermainbyid(1);
4。例
読むだけで練習していないだけで混乱するのは簡単です。例を見て、ドキュメントを読むために戻って、おそらく効果が良くなるでしょう。
JARパッケージを準備します:
mybatis-3.2.2.jar(mybatis)
mysql-connector-java-5.1.21.jar(データベースドライバー)
Junit-4.4.jar(テスト、このJunitを使用したくない、メイン方法を使用してテストすることができます)
プロジェクト構造:
データベース:
テーブルを作成します `t_user_main`(` f_id` int(11)not null、 `f_username` varchar(20)デフォルトヌル、` f_age` int(3)デフォルトヌル、プライマリキー( `f_id`))エンジン= myisamデフォルトcharset = latin1; insert in Insert(1、 'testmybatis');
MyBatisのXML構成 - Mybatis-Config.xml:
<! - ?xmlバージョン= "1.0"エンコード= "utf-8"? - > <configuration> <環境デフォルト= "開発"> <環境id = "development"> <transactionmanager type = "jdbc"> <datasourceタイプ= "プール"> <プロパティネーム= "ドライバー" value = "com.mysql.jdbc.driver"> value = "jdbc:mysql://192.168.200.12:3306/test_mybatis"> <プロパティ名= "username" value "value" = "root name"> <property name "value =" root123 "> </property> </property> </propertion usermainmapper.xmlファイル。 usermainmapper.xmlはパッケージcom.lanhuigu.mybatis.mapにあるため、リソースはcom/lanhuigu/mybatis/map/usermainmapper.xml - > <mapperリソース= "com/lanhuigu/mybatis/map/mapers.xml> </mapper"> </mappers
user.java:
パッケージcom.lanhuigu.mybatis.entity; import java.io.serializable; public classユーザーはシリアル化可能{serializable {private static final long serialversionuid = -341206809734875984l; private integer id; private integer getid(public integer getid;} id){this.id = id;} public string getusername(){return username;} public void setusername(string username){this.username = username;} public integer getage(){return age;} public void setage(integer age){this.age;}}}}usermainmapper.xml:
<! - ?xmlバージョン= "1.0" encoding = "utf-8"? - > <! - このマッパーの一意の名前空間を指定します。名前空間の値は、従来、パッケージ名に設定されており、SQLマップファイルのサフィックスのファイル名を削除します。これにより、名前空間の値が一意になるようにします。たとえば、namespace = "com.lanhuigu.mybatis.map.usermainmapper"はcom.lanhuigu.mybatis.map(パッケージ名) + usermainmapper(usermainmapper.xmlファイルが削除されます) - > <mapper namepace = "com.lanhuigu.mybatis.map. SQLステートメントSELECTタグでは、SELECTタグのID属性をQueryUserMainByIDに設定し、ID属性値は一意でなければならず、パラメータ型属性を再利用してクエリで使用されるパラメータータイプを示すことはできません。 resultType属性は、query resulttype = "com.lanhuigu.mybatis.entity.user" query resulttype = "com.lanhuigu.entity.user"によって返される結果セットタイプを示します。 resultType = "com.lanhuigu.mybatis.entity.user"> select f_id id、f_username username、f_age age from t_user_main where f_id =#{id} </select> </mapper>mybatistest.javaテストコード:
パッケージcom.lanhuigu.mybatis; import java.io.ioexception; Import java.io.inputstream; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.clsessionfactory; import; org.apache.ibatis.session.sqlsessionfactorybuilder; Import org.junit.test; import com.lanhuigu.mybatis.entity.user; public class mybatistest {@testpublic void testmybatis()Throws ioexception sqlSessionFactory Instance sqlsession session = null; // sqlsessionオブジェクトを取得{//1.mybatis構成ファイルパスを取得します。これはclassPathの下に配置されます。 MyBatis構成ファイルを読み、SQLSessionFactory Factory Instance // ======= 2.1クラスローダーを使用してMyBatis構成ファイル(関連するマッピングファイルもロードします)//入力ストリームIS = MyBatistest.Class.getClassLoader()。 new SQLSessionFactoryBuilder()。ビルド(IS); // ====== 2.2 MyBatisが提供するリソースクラスを使用してMyBatisの構成ファイルをロードします(関連するマッピングファイルもロードします) // sqlSessionFactory Factoryをビルド// sqlsessionfactory = new sqlsessionFactoryBuilder() sqlSessionFactoryBuilder()。build(is); // 3。マッピングファイル= sqlsessionfactory.opensession();/***マッピングSQL:* com.lanhuigu.mybatis.map.usermainMainMainMainMainMainMainMapperの識別文字列でマッピングファイルでsqlを実行できるsqlsessionsessionsを作成します。 usermainmapper.xmlファイルの選択タグの値。選択タグのID属性値を介して、 *実行されるSQLは、これら2つの組み合わせを通じて見つけることができます。 *///クエリを実行し、一意のユーザーオブジェクトを返します。注:「com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid」は、sqlをマップする識別文字列です。ユーザーユーザー= session.selectone( "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid"、1); system.out.println(user.getusername());}最後に{session.close();}}}}}コンソール出力:
上記の例については、テストコード:
ユーザーユーザー= session.selectone( "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid"、1); system.out.println(user.getusername());
このコードは非常に不快ですか?私たちは、より直接的な方法があると言いました:
プロジェクト構造マップにマッピングインターフェイスを追加します。
パッケージcom.lanhuigu.mybatis.map; import com.lanhuigu.mybatis.entity.user; public interface usermainmapper {public user queryusermainbyid(int id);}同時に、次のようにテストコードを変更します。
パッケージcom.lanhuigu.mybatis; import java.io.ioexception; Import java.io.inputstream; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.clsessionfactory; import; org.apache.ibatis.session.sqlsessionfactorybuilder; Import org.junit.test; import com.lanhuigu.mybatis.entity.user; import com.lanhuigu.mybatis.map.usermainmainmapper; public class mybatest {@testpublic void void void void mybatis( {sqlSessionFactory sqlsessionFactory = null; // xml build build sqlsessionfactory instance sqlsession session = null; // sqlsessionオブジェクトを取得する{//1.mybatis構成ファイルパス。クラスパスの下に配置されます。 MyBatis構成ファイルを読み、SQLSessionFactory Factory Instance // ======= 2.1クラスローダーを使用してMyBatis構成ファイル(関連するマッピングファイルもロードします)//入力ストリームIS = MyBatistest.Class.getClassLoader()。 new SQLSessionFactoryBuilder()。ビルド(IS); // ====== 2.2 MyBatisが提供するリソースクラスを使用してMyBatisの構成ファイルをロードします(関連するマッピングファイルもロードします) // sqlSessionFactory Factoryをビルド// sqlsessionfactory = new sqlsessionFactoryBuilder() sqlSessionFactoryBuilder()。build(is); // 3。マッピングファイル= sqlsessionfactory.opensession();/***マッピングSQL:* com.lanhuigu.mybatis.map.usermainMainMainMainMainMainMainMapperの識別文字列でマッピングファイルでsqlを実行できるsqlsessionsessionsを作成します。 usermainmapper.xmlファイルの選択タグの値。選択タグのID属性値を介して、 *実行されるSQLは、これら2つの組み合わせを通じて見つけることができます。 *///クエリを実行し、一意のユーザーオブジェクトを返します。注: "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid"は、sql/*user user = session.selectone( "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid"、マップをマップする識別文字列です。 1); system.out.println(user.getUsername());以前のクエリパーツを次のように変更します。
usermainmapper usermainmapper = session.getmapper(usermainmapper.class); user user = usermainmapper.queryusermainbyid(1);
特定のステートメントのパラメーターと返品値を合理的に説明できるインターフェイスを使用します(たとえば、usermainmapper.class)、
今すぐより明確でタイプセーフコードを実行できるだけでなく、エラーが発生しやすい文字列リテラルやキャストについて心配する必要はありません。
テストコードを実行すると、効果が同じです。
usermainmapperインターフェイス場所:
インターフェイスを追加したため、mybatis-config.xmlはマッパーパーツの構成を変更し、usermainmapperインターフェイスが配置されているパッケージファイルを直接マッピングできます。
そうです
に変更します
完全な構成は次のとおりであり、テストコードを実行して確認できます。このプラクティスは、統一された方法でマップを維持および管理する方が簡単です。
<! - ?xmlバージョン= "1.0"エンコード= "utf-8"? - > <configuration> <環境デフォルト= "開発"> <環境id = "development"> <transactionmanager type = "jdbc"> <datasourceタイプ= "プール"> <プロパティネーム= "ドライバー" value = "com.mysql.jdbc.driver"> value = "jdbc:mysql://192.168.200.12:3306/test_mybatis"> <プロパティ名= "username" value "value" = "root name"> <property name "value =" root123 "> </property> </property> </propertion usermainmapper.xmlファイル。 usermainmapper.xmlはパッケージcom.lanhuigu.mybatis.mapにあるため、リソースはcom/lanhuigu/mybatis/map/usermainmapper.xml - > <! - <mapper resource = "com/lanhuigu/mybatis/map/maper.copper"> </</</masper name = "com.lanhuigu.mybatis.map"> </package> </mappers> </configuration>
上記のように、私たちがどのようにプレイしても、SQLはまだusermainmapper.xmlにマッピングされていることがわかりますか?
この実装はユニークですか? XMLを使用する必要がありますか?
もちろん違います。上記のコードが正常に変更およびテストされている場合は、最後の変更を行いましょう。
usermainmapper.xmlを使用してマッピングを実装する代わりに、Javaアノテーションを使用してマッピングを実装します。
主な変更はusermainmapper.javaインターフェイスで、新しいメソッドqueryusermainbyidnewを追加し、アノテーションを使用してマッピングを実装する
MyBatis自己解決インターフェイスマッピング。
修正されたusermainmapper.javaインターフェイス:
パッケージcom.lanhuigu.mybatis.map; Import org.apache.ibatis.annotations.anotations.param; import org.apache.ibatis.annotations.select; import com.lanhuigu.mybatis.entity.user; public interface usermainmapper {/*** xml*/publicユーザーユーザーquerymainbyid(*** jvaid( annotation*/@select( "select f_id id、f_username username、f_age age from t_user_main where f_id = $ {id}")publy user queryusermainbyidnew(@param( "id")int id);}変更されたテストコードは、次の方法で実行します。
パッケージcom.lanhuigu.mybatis; import java.io.ioexception; Import java.io.inputstream; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.clsessionfactory; import; org.apache.ibatis.session.sqlsessionfactorybuilder; Import org.junit.test; import com.lanhuigu.mybatis.entity.user; import com.lanhuigu.mybatis.map.usermainmainmapper; public class mybatest {@testpublic void void void void mybatis( {sqlSessionFactory sqlsessionFactory = null; // xml build build sqlsessionfactory instance sqlsession session = null; // sqlsessionオブジェクトを取得する{//1.mybatis構成ファイルパス。クラスパスの下に配置されます。 MyBatis構成ファイルを読み、SQLSessionFactory Factory Instance // ======= 2.1クラスローダーを使用してMyBatis構成ファイル(関連するマッピングファイルもロードします)//入力ストリームIS = MyBatistest.Class.getClassLoader()。 new SQLSessionFactoryBuilder()。ビルド(IS); // ====== 2.2 MyBatisが提供するリソースクラスを使用してMyBatisの構成ファイルをロードします(関連するマッピングファイルもロードします) // sqlSessionFactory Factoryをビルド// sqlsessionfactory = new sqlsessionFactoryBuilder() sqlSessionFactoryBuilder()。build(is); // 3。マッピングファイル= sqlsessionfactory.opensession();/***マッピングSQL:* com.lanhuigu.mybatis.map.usermainMainMainMainMainMainMainMapperの識別文字列でマッピングファイルでsqlを実行できるsqlsessionsessionsを作成します。 usermainmapper.xmlファイルの選択タグの値。選択タグのID属性値を介して、 *実行されるSQLは、これら2つの組み合わせを通じて見つけることができます。 *///クエリを実行し、一意のユーザーオブジェクトを返します。注: "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid"は、sql/*user user = session.selectone( "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid"、マップをマップする識別文字列です。 1); system.out.println(user.getUsername());*//*usermainmapper usermainmapper = session.getMapper(usermainmapper.class); user user = usermainmapper.queryusermainbyid(1); system.out.out.println(user.getusname(); session.getMapper(usermainmapper.class); user user = usermainmapper.queryusermainbyidnew(1); system.out.println(user.getusername());} finally {session.close();}}}}}上記は、編集者によって紹介されたMyBatisの紹介(2)の完全なコレクションです。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!