インターフェイス操作でのプログラミング
一般的に言えば、SQLインターフェイスをマップするクラスを作成すると、通常は次のようになります。
public static void testbasicquery(int id){sqlsession session = mybatisutils.getsqlsession(); { / * * david.mybatis.demo.ivisitoroperation.basicqueryは、下の図の構成の名前空間に対応する必要があります。 mybatisutils.closessession(session); System.out.println(訪問者); } catch(例外e){// todo:例外を処理}}<! - ここで名前空間は、渡した文字列パラメーターに対応します - > <マッパーネームスペース= "david.mybatis.demo.ivisitoroperation"> <! - ここでresultTypeは、TypeAlias nodeで指定したばかりのエイリアスに対応します - > <select id = "basic quayery" parametertype = "intttype =" bisitpe = "ステータス> 0 IDによる注文</select> </mapper>
このようにして、実際の開発プロセス中に両側の名前が誤って対応していない場合、例外が発生します。このような状況を回避するために、インターフェイス法を使用して対応する操作を実行できます。以下のこの記事を変更しましょう。
まず、パッケージ名David.mybatis.demoの下に新しいivisitoperationクラスを作成します。これは、すべてのデータベースメソッドのインターフェイスが将来動作することを示しています。
パッケージDavid.mybatis.demo; Import java.util.list; Import David.mybatis.model.pagenateargs; Import david.mybatis.model.visitor; public civisitoroperation { /** Basic Query* / Public Visitor BasicAquery(int id) = mybatisutils.getsqlsession(); try {ivisitoroperation voperation = session.getMapper(ivisitoroperation.class);訪問者訪問者= voperation.basicquery(id); mybatisutils.closessession(session); System.out.println(訪問者); } catch(例外e){// todo:例外を処理}}これは行われているため、手動書き込みメソッド名から生じる可能性のある不一致について心配する必要はありません。
CRUD操作
以下は、単一のテーブル操作に基づいてCRUDおよびGetList操作の作成を説明します。いくつかのテストデータを作成するために、最初にADDメソッドを取得しましょう。
以下に示すように、最後のiVisitoroperationインターフェイスクラスに追加、削除、更新、クエリ、およびゲットリストインターフェイスメソッドを追加し続けます。
/**基本クエリ*/ Public Visitor BasicQuery(int id); /**訪問者を追加*/ public int add(訪問者訪問者); /** visitorを削除*/ public int delete(int id); /**訪問者の更新*/ public int update(訪問者訪問者); /**クエリ訪問者*/パブリックビジタークエリ(int id); / * *クエリ訪問者リスト */ public List <visitor> getList();
対応するCRUD操作の場合、挿入、更新、削除、および選択ノードは、それぞれvisitormapper.xmlの<mapper>ノードの下にあります。詳細な構成の詳細については、公式Webサイトhttp://mybatis.github.io/mybatis-3/sqlmap-xml.htmlを参照してください。
この例の構成は次のとおりです。#{parameter_name}を使用してパラメーターを渡します。もちろん、$ {parameter_name}を直接使用することもできます。
前者の方法では、MyBatisはそれをパラメーター化された形式に変換します。たとえば、テーブルに挿入値(name)値(#{name})=>テーブル(名前)値に挿入(?)(mysqlの場合)
後者の方法では、MyBatisは、テーブル($ {name)値($ {name})=> Insert Into table(name)values([渡された値])に挿入されるなど、操作を実行せずにパラメーターを渡します。
<?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 <! - useGeneratedKeys = "true"は、自己成長シーケンスを使用するかどうかを意味します。KeyProperty= "ID"は、どの列が自己成長列であるかを指定します。カスタマイズされたリターンタイプは、複雑なタイプを返すのに最適な選択であり、MyBatisで最も強力な武器でもあります - > <ID = "add" parametertype = "Visitor" useGeneratedKeys = "true" keyproperty = "id">訪問者(名前、電子メール、ステータス、createTime)値(#{name} {name}、{email}、{email}、#{ecreat}、#{emad}、#{emad}、#{emad}、#{emad}、 </insert> <delete id = "delete" parametertype = "int"> delete from visitor where status> 0 and id =#{delete> <update id = "uppated" parametertype = "visitor"> update visitor set name =#{name}、email =#{email}、#{status} {status} </update> <id = "query" parametertype = "int" resultType = "visitor"> select id、name、email、status、createTime from Id =#{id}およびstatus> 0注文</select> <"basic query" parametertype = "int" restertytor = "bisid> < /select> Select id = "getList" resultMap = "visitOrrs"> <included refid = "getListsql" /> < /selectmap = "visitor" id = "visitorrs"> <id column = "id" property = "id" /> <result column = "name =" property " />" spatution " />" " />>>> <oclows" />> <sporty = " column = "createtime" property = "createtime"/> </resultmap> <sql id = "getListsQl"> select *訪問者からステータス> 0 </sql> </mapper>ここで注意すべきことの1つは、操作ノードのIDがインターフェイス定義のインターフェイス名に対応する必要があり、パラメータータイプもそれに対応する必要があることです。たとえば、インターフェイスは追加(訪問者訪問者)です。次に、挿入ノードを構成するとき、id = "add"とparametertype = "Visitor"
それ以外の場合、対応する例外が報告されます。たとえば、IDノードがインターフェイス名に対応していない場合、次の例外が表示されます。
visitormapper.xml構成ファイルでリストを取得すると、resultmapを使用することに気付くことができます。 resultMapを使用する場合、自分のSQLステートメントマップを使用するフィールドを指定できます。これは、それほど多くの列を必要としない場合があるため、マッピングを構成するときにそれほど多くのマップを構成する必要がないか、列がエイリアスされているため、Mybatisのデフォルトマッピング方法がフィールドに属するかどうかにかかわらず、Mybatisのデフォルトのマッピング方法であるため、resultType = "Visitor"をマップに直接使用することはできません。また、<settings>属性値を<configuration>ノードで構成するかどうかを制御することもできます。
<settings> <名前を設定= "mapunderscoretocamelcase" value = "false" /> < /settings>
マッパーを変更する他の構成については、http://mybatis.github.io/mybatis-3/configuration.html#settingsで表示できます。
訪問者のマッパークラスは次のとおりです。
<mapper namespace = "david.mybatis.demo.ivisitoroperation"> <sql id = "getListsql"> select id as visitor_id、name、email、status、createTime from visitor> 0プロパティプロパティです。その中のフィールドは、エンティティで定義するプロパティと同じでなければなりません。これはケースに敏感です。そうしないと、デフォルトのセッターは、プロパティに値を割り当てるときに対応するプロパティが見つかりません。クエリステートメントによって返された結果セットの名前に対応する列プロパティを試すことができます。たとえば、対応するフィールドにエイリアスが与えられている場合、IDがVisitor_IDになり、対応する列名も対応する必要があります - > <resultMap type = "visitor" id = "visitorrs"> <id column = "visitor_id" property = "id" /> <result column = "name" property = "name" /> <result列= column = "createTime"プロパティ= "createTime"/> </resultMap> </mapper>
ここでは、ノード<SQL>ノードがあることにも気付くでしょう。これは、他の場所で再利用するためのパブリックSQLステートメントまたはフィールドを抽出するために使用されます。その他の詳細な手順については、http://mybatis.github.io/mybatis-3/sqlmap-xml.htmlを参照してください。
残りは今と同じ操作です。次のように、さまざまなテスト方法を保存するデモプログラムでDemorunクラスを作成できます。
Package David.mybatis.demo; Import java.util.arrays; Import Java.util.list; Import org.apache.ibatis.session.sqlsession; Import David.mybatis.model.basicqueryargs; Import david.mybatis.model.crud_enum; Import.mybatis.model.channel David.mybatis.model.pagenateargs; import david.mybatis.model.visitor; import david.mybatis.model.website; public class demorun {public static void testbasicquery(int id){sqlsession session = mybatisutils.getsqlsession(); { / * * david.mybatis.demo.ivisitoroperation.basicqueryは、下の図の構成の名前空間に対応する必要があります。 mybatisutils.closessession(session); System.out.println(訪問者); } catch(例外e){// todo:例外を処理するe.printstacktrace(); }} public static void testBasicqueryByInterfaceway(int id){sqlsession session = mybatisutils.getsqlsession(); try {ivisitoroperation voperation = session.getMapper(ivisitoroperation.class);訪問者訪問者= voperation.basicquery(id); mybatisutils.closessession(session); System.out.println(訪問者); } catch(例外e){// todo:例外を処理するe.printstacktrace(); }} /** batchesに訪問者レコードを追加* / public static void addvisitors(){sqlsession session = mybatisutils.getsqlsession();リスト<ビジター>訪問者= arrays.aslist(new Visitor [] {new Visitor( "Mongodb"、 "[email protected]")、new Visitor( "Redis"、 "[email protected]")、新しい訪問者(「Memcached "、" [email protected] ")、新しい訪問者(" couchdb "" "couchdb")訪問者( "hbase"、 "[email protected]")、新しい訪問者( "bigtable"、 "[email protected]")、新しい訪問者( "hive"、 "[email protected]")、新しい訪問者( "mapreduce"、 "[email protected]")、}); for(訪問者訪問者:訪問者){addvisitor(訪問者、セッション); } mybatisutils.closessession(session); mybatisutils.showmessages(crud_enum.list、visitors.size()); } /**訪問者情報の追加* / @suppresswarnings( "unused")private static addvisitor(訪問者訪問者、sqlsessionセッション){if(session == null)session = mybatisutils.getsqlsession(); ivisitoroperation voperation = session.getMapper(ivisitoroperation.class); int recordcount = voperation.add(visitor); session.commit(); if(session == null)mybatisutils.closessession(session); mybatisutils.showmessages(crud_enum.add、RecordCount); } /**訪問者のオーバーロード* / public static void addvisitor(訪問者訪問者){addvisitor(visitor、null); } /**訪問者情報を削除* / public static void deletevisitor(int id){sqlsession session = mybatisutils.getsqlsession(); ivisitoroperation voperation = session.getMapper(ivisitoroperation.class); int recordcount = voperation.delete(id); session.commit(); mybatisutils.closessession(session); mybatisutils.showmessages(crud_enum.delete、RecordCount); } /**訪問者情報を更新* / public static void updateVisitor(int id){sqlsession session = mybatisutils.getsqlsession(); ivisitoroperation voperation = session.getMapper(ivisitoroperation.class);訪問者訪問者= voperation.Query(ID); system.out.println( "Original Object:" + Visitor);文字列名= visitor.getName(); if(name.contains( "updated"))){visitor.setname(name.substring(0、name.indexof( "updated"))); } else {visitor.setName(name + "updated"); } int RecordCount = voperation.update(visitor); session.commit(); mybatisutils.closessession(session); mybatisutils.showmessages(crud_enum.update、RecordCount); system.out.println( "Object:" + Visitor); } /** query訪問者情報* / public static void queryvisitor(int id){sqlsession session = mybatisutils.getsqlsession(); ivisitoroperation voperation = session.getMapper(ivisitoroperation.class);訪問者訪問者= voperation.Query(ID); mybatisutils.closessession(session); mybatisutils.showmessages(crud_enum.query、1); System.out.println(訪問者); } /** Visitorリストをクエリ* / public static void queryvisitorlist(){sqlsession session = mybatisutils.getsqlsession(); ivisitoroperation voperation = session.getMapper(ivisitoroperation.class);リスト<ビジター> visitors = voperation.getList(); for(訪問者訪問者:訪問者){System.out.println(訪問者); } mybatisutils.closessession(session); mybatisutils.showmessages(crud_enum.list、visitors.size()); }} DemorunクラスはシンプルなシングルテーブルCrudを実行し、デモが完了します。