基本的な使用レビュー:
SQLステートメントは、XMLファイルまたはJavaアノテーションに保存されます。 Mabatisマッピングの例(JavaインターフェイスとMyBatis Annotationを使用):
パッケージorg.mybatis.example; public interface blogmapper {@select( "select * from blog where id =#{id}")blog selectblog(int id);}実行の例:
BlogMapper mapper = session.getMapper(blogmapper.class); blog blog = mapper.selectblog(101);
SQLステートメントとマッピングは、XMLファイルに外部化することもできます。
<?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 <select id = "selectblog" parametertype = "int" resulttype = "blog"> select * from blog where id =#{id} </select> </mapper>MyBatis APIを使用してステートメントを実行することもできます。
ブログblog = session.selectone( "org.mybatis.example.blogmapper.selectblog"、101);
詳細については、MyBatis Webサイトが提供するユーザーマニュアルを参照してください。
春と統合します
MyBatisは、Springフレームワークと統合されています。スプリングフレームワークにより、MyBatisはSpring Transactionsに参加し、MyBatisマッパーとセッションを作成し、他の豆に注入することができます。
基本的なXML構成の例は次のとおりです。マッパーが作成され、「BlogService」Beanに注入されます。
<bean id = "sqlsessionfactory"> <プロパティ名= "dataSource" ref = "datasource" /> < /bean id = "blogmapper"> <プロパティ名= "sqlsessionfactory" ref = "sqlsessionfactory" /> <property name = "mapperinterface" org.mybatis. exexample id = "blogservice"> <プロパティ名= "blogmapper" ref = "blogmapper" /> < /bean>
MyBatisを呼び出すには、1つの豆を呼び出す必要があります。
Public Class BlogServiceImpl BlogService {private blogmapper blogmapper; public void setblogmapper(blogmapper blogmapper){this.blogmapper = blogmapper; } public void dosomethingwithablog(int blogid){blog blog = blogmapper.selectblog(blogid); ...}} sqlsessionFactory
各MyBatisアプリケーションは、SQLSessionFactoryオブジェクトのインスタンスをコアとして取得します。 SQLSessionFactory自体は、SQLSessionFactoryBuilderによって作成されます。一般的に、アプリケーションでは、データベースはSQLSessionFactoryにのみ対応するため、一般にSQLSessionFactoryをSingletonパターンとして定義するか、春などから注入します。
SQLSessionFactoryBuilderを作成してSQLSessionFactoryを作成する方法は次のとおりです。
これらのメソッドによって設計された主なパラメーターは、入力ストリーム、環境、およびプロパティで、入力ストリームは構成ファイルから取得された入力ストリームです。環境は、データソースやトランザクションを含む構成ファイルで構成されている多くの環境で現在使用している環境を表し、デフォルトの環境はデフォルトで使用されます。プロパティを使用して、MyBatisは、構成ファイルで使用できる対応するプロパティまたはファイルをロードします。
XMLからSQLSessionFactoryを構築します
private static sqlsessionfactory sqlsessionfactory = null; static {try {inputstream is = resources.getResourceasStream( "config/mybatis_config.xml"); sqlSessionFactory = new SQLSessionFactoryBuilder()。build(is); } catch(ioException e){// todo auto-fenated catch block e.printstacktrace(); }} public static sqlsessionfactory getSqlSessionFactory(){return sqlsessionFactory; }
以下は、構成ファイルの基本構造です。
MyBatisの構成ファイルには、通常、次の部分が含まれています。
<環境デフォルト= "Development"> <環境ID = "Development"> <TransactionManager Type = "JDBC" /> <DataSource Type = "Pooled"> <Driver "value =" $ {jdbc.driver} " /> <プロパティ名=" URL "VALUE =" $ {jdbc.url} value = "$ {jdbc.username}"/> <property name = "password" value = "$ {jdbc.password}"/> </dataSource> </environment> </environments> MyBatisは複数の環境を構成できるため、SQLSessionFactoryを作成してSQLSessionFactoryを作成するときに特定の環境を指定できます。指定しない場合、デフォルトの環境が使用されます。
TransactionManager
MyBatisには2種類のトランザクションマネージャーがあります(つまり、type =” [jdbc | managed]”):
JDBCこの構成は、JDBCのコミットとロールバック設定を単純に使用します。データソースから取得した接続に依存して、トランザクションスコープを管理します。
管理された構成はほとんどありません。接続をコミットしたりロールバックしたりすることはありません。また、コンテナがトランザクションのライフサイクル全体(SpringまたはJEEアプリケーションサーバーのコンテキストなど)を管理することができます。デフォルトで接続を閉じます。ただし、一部のコンテナはこれを望んでいないため、接続から停止する必要がある場合は、CloseConnectionプロパティをFalseに設定してください。
DataSource
DataSource要素は、基本的なJDBCデータソースインターフェイスを使用して、JDBC接続オブジェクトのリソースを構成します。
多くのMyBatisアプリケーションが、例に示すようにデータソースを構成します。ただし、必要はありません。怠zyなロードの使用を容易にするためには、データソースが必要であることを知っておく必要があります。
組み込みのデータソースタイプが3つあります(つまり、type = "???"):
未処理このデータソースの実装は、要求されるたびに接続を単純に開閉することです。少し遅いです。これは、タイムリーに利用可能な接続を必要としないため、簡単なアプリケーションに最適です。これも異なるデータベースも異なるため、データベースの一部ではデータソースを構成することは重要ではなく、この構成もアイドル状態です。未処理のタイプデータソースは、次の5つのプロパティを構成するためにのみ使用されます。
オプションとして、データベースドライバープロパティを渡すことができます。これを行うために、属性のプレフィックスは「ドライバー」から始まります。例えば:
driver.encoding = utf8
これにより、値「UTF8」を渡してプロパティ「エンコード」を渡し、DriverManager.GetConnection(URL、DriverProperties)メソッドを介してデータベースドライバーに渡されます。
プールこれは、JDBC接続オブジェクトのデータソース接続プールの実装であり、新しい接続インスタンスを作成するときに必要な初期接続と認証時間を回避するために使用されます。これは、リクエストに迅速に応答するためにWebアプリケーションで現在使用されている一般的な方法です。
上記の(未処理の)属性に加えて、プールされたデータソースを構成するために使用できる多くの属性があります。
その中で、JNDIデータソースの構成には2つのプロパティのみが必要です。
(1)Initial_Contextプロパティは、初期コンテキスト(つまり、initialContext.lookup(initial - context))から環境を見つけるために使用されます。これはオプションのプロパティです。
(2)data_Sourceこれは、データソースインスタンスの場所のコンテキストを参照するパスです。 initial_contextクエリによって返される環境を背景として探します。 initial_contextが結果を返さない場合、初期コンテキストを環境として直接探します。
それからマッパーがあります。 Mapperは、SQLステートメントのマッピングに使用されます。まず、MyBatisにこれらのSQLステートメントを見つける場所、つまりリソースの場所を指定する必要があります。
<mappers> <mapper resource = "com/tiantian/mybatis/model/blogmapper.xml"/> </mappers>
これは、テストプロセス中に行った単純な構成ファイルです。
<?xml version = "1.0" encoding = "utf-8"?> <!doctype構成public " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" <TypeAliase> <TypeAlias Alias = "Blog" Type = "com.tiantian.mybatis.model.blog" /> < /typealiase> <環境デフォルト= "開発"> <環境id = "開発"> <transactionManager Type = "JDBC" />> <DataSource Type = "POOLED"> <Propert "> <プロパティ名= "url" value = "$ {jdbc.url}" /> <プロパティ名= "username" value = "$ {jdbc.username}" /> <プロパティ名= "パスワード" $ "$ {jdbc.password}" />> < /datasource> resource = "com/tiantian/mybatis/model/blogmapper.xml"/> </mappers> </configuration>
外部プロパティファイルは、上記の構成ファイルにインポートされます。 MyBatis構成ファイルのプロパティの紹介は、プロパティ要素に直接含めることができます。または、Properties要素を使用して外部から導入することも、SQLSessionFactoryを作成するときにパラメータープロパティとして渡すこともできます。 MyBatis構成ファイルのプロパティは非常に多くの場所から導入できるため、優先順位の問題が含まれ、MyBatisは次の順序でそれらを探します。
まず、構成ファイルでは、プロパティ要素本体のプロパティが読み取られ、外部から導入されたプロパティファイルのプロパティが読み取りされ、前に読み取られた同じプロパティが上書きされます。最後に、SQLSessionFactoryを作成するときに渡されたプロパティのプロパティが読み取られます。これは、以前に同じプロパティを上書きします。
SQLSessionFactoryを使用した後、特定のSQLSessionを取得します。 MyBatisを使用する過程で、すべての操作はSQLSessionとは切り離せないため、SQLSessionを取得することが非常に重要です。さらに、sqlsessionを共有してスレッドインセクチャできないため、sqlsessionが必要なときにそれを開いてから、使用した後に閉じる必要があります。
sqlsession session = sqlsessionfactory.opensession();
sqlsessionFactory Zhonghu地区の方法は次のとおりです。
彼らの主な違いは次のとおりです。
デフォルトのオープンセッションメソッドにはパラメーターがなく、次の特性を備えたSQLSessionが作成されます。
executortypeには3つの値があります。
MyBatisの基本操作は、追加、削除、変更、チェック、つまり挿入、削除、更新、選択です。これらの基本操作を実行する場合、SQLSessionを使用してマッパー構成ファイルのマッピングにアクセスするか、マッパー構成ファイルに対応するマッパーインターフェイスを使用して操作を実行できます。さらに、マッパーインターフェイスを使用する場合、対応するSQLステートメントはマッパー構成ファイルに記述することも、対応する注釈を使用してマッパーインターフェイスの対応するメソッドに直接マークすることもできます。これは、次の例コードで見られます。
これが一連の例コードです:
最初にツールクラスを投稿して、SQLSessionFactoryを取得します。
java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 Import org.apache.ibatis.io.resources; Import org.apache.ibatis.session.sqlsessionfactory; Import org.apache.ibatis.session.sqlsessionfactoryBuilder; public class util {private static sqlsessionfactory sqlsessionfactory = null; static {try {inputstream is = resources.getResourceasStream( "config/mybatis_config.xml"); sqlSessionFactory = new SQLSessionFactoryBuilder()。build(is); } catch(ioException e){// todo auto-fenated catch block e.printstacktrace(); }} public static sqlsessionfactory getSqlSessionFactory(){return sqlsessionFactory; }}
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" <TypeAliase> <TypeAlias Alias = "Blog" Type = "com.tiantian.mybatis.model.blog" /> < /typealiase> <環境デフォルト= "開発"> <環境id = "開発"> <transactionManager Type = "JDBC" />> <DataSource Type = "POOLED"> <Propert "> <プロパティ名= "url" value = "$ {jdbc.url}" /> <プロパティ名= "username" value = "$ {jdbc.username}" /> <プロパティ名= "パスワード" $ "$ {jdbc.password}" />> < /datasource> resource = "com/tiantian/mybatis/model/blogmapper.xml"/> </mappers> </configuration>
blogmapper.xml
<?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" namespace = "com.tiantian.mybatis.model.blogmapper"> <! - add record-> <insert id = "insertblog" parametertype = "blog"> t_blog(title、content、owner)values(#{title}、#{content}、#{所有者}) parametertype = "int" resultType = "blog"> select * from t_blog where id =#{id} </select> <! - record-> <update id = "updateblog" parametertype = "> update t_blog set title =#{title}、content =#{content}、owner =##{onder}そして、結果を返すために複数のレコードをクエリするのはコレクションです。 resultTypeはコレクションタイプではありませんが、コレクションに含まれるタイプ - > <選択id = "selectal" resulttype = "blog"> select * from t_blog </select> <! - fuzzy query - > <selectid = "fuzzyquery" fuzzyquery "fuzzyquery" fuzzyquery = "fuzzyquery =" blog "parametertype =" java.lang.string "%"#{title} "%" </select> <! - delete record-> <delete id = "deleteblog" parametertype = "int"> delete from id =#{id} </delete> </mapper>SQLマッピングステートメントに記載されるべきいくつかの問題:
blog.java
パッケージcom.tiantian.mybatis.model;パブリッククラスブログ{private int id;プライベートストリングタイトル。プライベート文字列コンテンツ。プライベート文字列所有者。 public int getid(){return id; } public void setid(int id){this.id = id; } public string getTitle(){return title; } public void settitle(string title){this.title = title; } public string getContent(){return content; } public void setContent(string content){this.content = content; } public string getOwner(){return所有者; } public void setowner(string owner){this.owner = owner; } @Override public String toString(){return "id:" + id + "、title:" + title + "、content:" + content + "、所有者:" +所有者; }}
blogmapper.java
パッケージcom.tiantian.mybatis.model; java.util.listをインポートします。 org.apache.ibatis.annotations.deleteをインポートします。 org.apache.ibatis.annotations.insertをインポートします。 org.apache.ibatis.annotations.selectをインポートします。 org.apache.ibatis.annotations.updateをインポートします。 / ***次の操作1は構成ファイルにSQLを書き込み、操作2はアノテーションで実行されるSQLステートメントを直接示します*マッパーのフルネームはblogmapper.xmlファイルの名前空間と同じであるため、ここに含めることはできません。 selectblog(int id); @Select( "select * from t_blog where id =#{id}")public blog selectblog2(int id); public void insertblog(ブログブログ); @Insert( "INSERT INTO T_BLOG(title、content、owner)values(#{title}、#{content}、#{所有者})")public void insertblog2(blog blog); public void updateblog(ブログブログ); @update( "Update T_Blog Set Title =#{Title}、content =#{content}、所有者=#{所有者} where id =#{id}")public void updateblog2(blog blog); public void deleteblog(int id); @delete( "delete from t_blog where id =#{id}")public void deleteblog2(int id);パブリックリスト<Blog> SelectAll(); @Select( "select * from t_blog")public list <blog> selectall2();パブリックリスト<Blog> FuzzYquery(String Title); @Select( "select * from t_blog where where where like/"%/"#{title}/"%/"")public list <blog> fuzzyquery2(string title); }
test1.java
パッケージcom.tiantian.mybatis.test; java.util.listをインポートします。 Import org.apache.ibatis.session.sqlsession; Import org.junit.test; com.tiantian.mybatis.model.blogをインポートします。 com.tiantian.mybatis.util.utilをインポートします。 / ***この一連の操作は、sqlを構成ファイルに記述し、次に操作にsqlsessionを使用することです。ブログblog = new blog(); blog.settitle( "中国語"); blog.setContent(「5000年にわたって風と雨に隠されている夢」); blog.setowner( "Daily"); session.insert( "com.tiantian.mybatis.model.blogmapper.insertblog"、blog); session.commit(); session.close(); } / ***単一のレコードをクエリ* / @test public void testSelectone(){sqlsession session = util.getSqlSessionFactory()。openSession();ブログblog =(blog)session.selectone( "com.tiantian.mybatis.model.blogmapper.selectblog"、8); System.out.println(blog); session.close(); } / ***レコードを変更* / @test public void testupdateblog(){sqlsession session = util.getsqlsessionfactory()。opensession();ブログblog = new blog(); blog.setid(7); //ブログを変更する必要があるブログのID.settitle( "中国2"); //タイトルblog.setcontent( "yellow、black eyes、unchanged smile"); //コンテンツブログの変更( "day 2");ブログ); session.commit(); session.close(); } / ***すべてのレコード* / @test public void testselectall(){sqlsession session = util.getsqlsessionfactory()。opensession();リスト<ブログ> blogs = session.selectlist( "com.tiantian.mybatis.model.blogmapper.selectall"); for(blog blog:blogs)system.out.println(blog); session.close(); } / *** fuzzy query* / @test public void testfuzzyquery(){sqlsession session = util.getsqlsessionfactory()。opensession();文字列タイトル= "中国";リスト<Blog> blogs = session.selectlist( "com.tiantian.mybatis.model.blogmapper.fuzzyquery"、title); for(blog blog:blogs)system.out.println(blog); session.close(); } / *** delete record* / @test public void testdeleteblog(){sqlsession session = util.getsqlsessionfactory()。opensession(); session.delete( "com.tiantian.mybatis.model.blogmapper.deleteblog"、8); session.commit(); session.close(); }}
test2.java
パッケージcom.tiantian.mybatis.test; java.util.listをインポートします。 Import org.apache.ibatis.session.sqlsession; Import org.junit.test; com.tiantian.mybatis.model.blogをインポートします。 com.tiantian.mybatis.model.blogmapperをインポートします。 com.tiantian.mybatis.util.utilをインポートします。 / ***この一連の操作は、構成ファイルにSQLステートメントを記述し、対応するマッパーインターフェイスを介して動作することです。ブログblog = new blog(); blog.settitle( "中国語"); blog.setContent(「5000年にわたって風と雨に隠されている夢」); blog.setowner( "Daily"); blogmapper blogmapper = session.getMapper(blogmapper.class); blogmapper.insertblog(blog); session.commit(); session.close(); } / ***単一のレコードをクエリ* / @test public void testSelectone(){sqlsession session = util.getSqlSessionFactory()。openSession(); blogmapper blogmapper = session.getMapper(blogmapper.class);ブログblog = blogmapper.selectblog(7); System.out.println(blog); session.close(); } / ***レコードを変更* / @test public void testupdateblog(){sqlsession session = util.getsqlsessionfactory()。opensession();ブログblog = new blog(); blog.setid(9); //ブログを変更する必要があるブログのID.settitle( "chishn 2"); //タイトルブログを変更します。 blogmapper.updateblog(blog); session.commit(); session.close(); } / ***すべてのレコード* / @test public void testselectall(){sqlsession session = util.getsqlsessionfactory()。opensession(); blogmapper blogmapper = session.getMapper(blogmapper.class);リスト<Blog> blogs = blogmapper.selectall(); for(blog blog:blogs)system.out.println(blog); session.close(); } / *** fuzzy query* / @test public void testfuzzyquery(){sqlsession session = util.getsqlsessionfactory()。opensession(); blogmapper blogmapper = session.getMapper(blogmapper.class);文字列タイトル= "中国";リスト<Blog> blogs = blogmapper.fuzzyquery(title); for(blog blog:blogs)system.out.println(blog); session.close(); } / *** delete record* / @test public void testdeleteblog(){sqlsession session = util.getsqlsessionfactory()。opensession(); blogmapper blogmapper = session.getMapper(blogmapper.class); blogmapper.deleteblog(10); session.commit(); session.close(); }}
test3.java
パッケージcom.tiantian.mybatis.test; java.util.listをインポートします。 Import org.apache.ibatis.session.sqlsession; Import org.junit.test; com.tiantian.mybatis.model.blogをインポートします。 com.tiantian.mybatis.model.blogmapperをインポートします。 com.tiantian.mybatis.util.utilをインポートします。 / ** *この一連の操作はマッパーインターフェイス *を使用して実行されますが、対応するSQLステートメントは、対応する * annotation * @author andy * */ public class test3 {/ ** * new Record */ @test public void testinsert(){sqlsession session = ut.getsqlsessionseftionsection() blogmapper blogmapper = session.getMapper(blogmapper.class);ブログblog = new blog(); blog.settitle( "title2"); blog.setContent( "content2"); blog.setowner( "owner2"); blogmapper.insertblog2(blog); session.commit(); session.close(); } / ***単一のレコードを見つけます* / @test public void testselectone(){sqlsession session = util.getsqlsessionfactory()。opensession(); blogmapper blogmapper = session.getMapper(blogmapper.class);ブログblog = blogmapper.selectblog2(1); System.out.println(blog); session.close(); } / ***複数のレコードを見つけて、結果をコレクションとして返します* / @test public void testselectall(){sqlsession session = util.getsqlsessionfactory()。opensession(); blogmapper blogmapper = session.getMapper(blogmapper.class);リスト<Blog> blogs = blogmapper.selectall2(); for(blog blog:blogs)system.out.println(blog); session.close(); } / ***レコードを変更* / @test public void testupdate(){sqlsession session = util.getsqlsessionfactory()。opensession(); blogmapper blogmapper = session.getMapper(blogmapper.class);ブログblog = new blog(); blog.setId(3); blog.settitle( "title3"); blog.setContent( "content3"); blog.setowner( "owner3"); blogmapper.updateblog2(blog); session.commit(); session.close(); } / *** delete Record* / @test public void testdelete(){sqlsession session = util.getsqlsessionfactory()。opensession(); blogmapper blogmapper = session.getMapper(blogmapper.class); blogmapper.deleteblog2(5); session.commit(); session.close(); } @test public void testfuzzyquery(){sqlsession session = util.getsqlsessionfactory()。opensession(); blogmapper blogmapper = session.getMapper(blogmapper.class); List <Blog> blogs = blogmapper.fuzzyquery2( "China"); for(blog blog:blogs)system.out.println(blog); session.close(); }}対応するテーブル作成ステートメント:
テーブルを作成します `t_blog`(` id` int(11)not null auto_increment、 `title` varchar(255)デフォルトnull、` content 'varchar(255)デフォルトnull、 `所有者` varchar(50)デフォルトヌル、プライマリキー( `id`))