MyBatisの紹介
MyBatisは、Javaベースのデータ永続性レイヤー/オブジェクトリレーショナルマッピング(ORM)フレームワークであるIbatisによって前身でした。
MyBatisはJDBCのカプセル化であり、開発者がドライバーの登録、パラメーターの設定、接続/ステートメントの作成、結果セットの作成など、JDBCの手続きコードを処理するためにあまりにも多くの努力をすることなくSQL自体にのみ集中できるようにします。MyBatisはXML/ANNOTATIONに基づいてSQLを実行し、DEVISTのDEVIST DEVISTのマッピングをマッピングします。
MyBatisは、カスタムSQL、ストアドプロシージャ、高度なマッピングをサポートするファーストクラスの永続性フレームワークです。 MyBatisは、JDBCコードのほぼすべてとパラメーターの手動設定と結果の取得を排除します。 MyBatisは、構成に単純なXMLまたはアノテーションを使用し、マップインターフェイス、Java Pojo(プレーンオールドJavaオブジェクト)をデータベースレコードに使用できます。
MyBatisプロジェクトアドレス/オンラインドキュメント。
最初にミバティスに会います
MyBatisを使用するには、pom.xmlに次の依存関係を追加する必要があります。
<Code> <Dependency> groupId> org.mybatis </groupId> <artifactid> mybatis </artifactid> <version> 3.3.0 </version> </dependency> <deprofency> mysql> mysql </groupid> <artifactid> mysql-connector-java
選択します
mybatis/mybatis-configuration.xmlを構成します
MyBatisのグローバル構成ファイルとして、MyBatisの実行中の環境情報(データソース/マッパーファイルなど)で構成されています。
<Code> <Code> <! - {cke_protected} {c}%3c!%2d%2d%3fxml%20version%3d%3d%221.0%22%20エンコード%3D%22UTF-8%22%20%3F%2D%2D%3E-> <環境> <環境= <環境= <環境ID = "Development"> <! - {cke_protected} {c}%3c!%2d%2d%20%e9%85%8d%e7%bd%aejdbc%e4%ba%8b%e5%8a%a1%e7%a1%e7%90%86%2d%2d%3 type = "jdbc"> <! - {cke_protected} {c}%3c!%2d%2d%20%e9%85%85%85%85%e6%8d%ae%e6%ba%90%2d%2d%2d%3e-> <datasourceタイプ " value = "com.mysql.jdbc.driver"> <プロパティ名= "url" value = "jdbc:mysql:// host:port/db?charaterencoding = utf-8"> <プロパティ名= "username"> <プロパティ名= "パスワード" value = "password"> </property> </property> </property> </dataSource> </transactionManager> </Environment> </environments> <! - {c ke_protected} {c}%3c!%2d%2d%20%e5%8a%a0%e8%bdmapper%e6%98%a0%e5%b0%84%e6%96%87%e4%bb%b6%20%2d%2d%3e-> <mappers> <maper resource = "mybatis/mapper/userdao.xml"> </mapper> </mappers> </configuration> </code>userdaoを書く(マッパーマップ)
MyBatisの最もコア部分は、データベースを操作するSQLステートメントで構成されています。
<code> <code> <code> <! - {cke_protected} {c}%3c!%2d%2d%3fxml%20version%3d%221.0%22%20Encoding%3D%3D%3D%3D%3D%3D% parametertype="java.lang.Integer" resulttype="com.fq.domain.User">SELECT * FROM user WHERE id = #{id};</select><select id="selectUserByName" parametertype="java.lang.String" resulttype="com.fq.domain.User">SELECT * FROM user WHERE name LIKE '%$ {value}%'; </select> </mapper> </code> </code>属性の説明
SQLステートメントを分離するために使用される名前空間名空間
ParameterTypeはSQL入力マッピングタイプを定義し、MyBatisはOGNLを介して入力オブジェクトからパラメーターを取得してSQLステートメントに渡します。
resultTypeは、SQL出力マッピングタイプを定義します。 MyBatisは、SQLクエリの結果のレコードの行をマップし、結果をresultTypeで指定したタイプにマッピングします。
マッパーマッピングファイル名には、userdao.xml/usermapper.xml/user.xmlおよびその他のフォームが含まれています。これらは通常、mybatis-configuration.xmlと同じレベルのマッパーディレクトリに保存されます。その主な機能は、SQLステートメントとマッピングの関係を定義することであるため、一般にマッパーマッピングファイルと呼ばれます。
POクラスを定義します
POクラスの主な機能はSQL(入力/出力)マッピングです。これは通常、データベーステーブルに対応します。
<code> <code> <code> <code> <code>/*** @author jifang*@since 15/12/31 2:27 pm。 {return id;} public void setid(integer id){this.id = id;} public string getname(){return name;} public void setname(string name){this.name = name;} public string getPassword(){return password;} public void setpassword(return passwring; "user {" + "id =" + id + "、name = '" + name +'/'' + "、password = '" + password +'/'' + '}';}} </code> </code> </code> </code>userdao(javaオブジェクト)
SQLSessionを取得し、SQLステートメントを実行し、マッピング結果を取得します。
<Code> <Code> <Code> <Code> <Code> <Code> <Code>/*** @Author Jifang*@Since 16/2/24 6:15 PM。 sqlSessionFactoryBuilder()。build(resources.getResourceasStream(resource));}@testpublic selectuserbyid(){try(sqlsession session = factory.opensession()){user user = session.selectone( "namespace.selectuserbyid"、1); system。 selectuserbyname(){try(sqlsession session = factory.opensession()){list <user> users = session.selectlist( "namespace.selectuserbyname"、 "desute"); for(user user:user){system.out.println(user);}}}} </user> </code> </code> </code> </code> </code>入れる
マッパー
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <挿入id = "Insertuser" parametertype = "com.fq.domain.user">ユーザー(name、password)値(#{name}、#{password}); </code> </code> </code> </code> </code> </code>userdao
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> @testPublic void Insertuser(){try(sqlsession session = factory.opensession()){user user = new user(); user.setname( "new_name1"); user.setpassword( "new_password"); session.insert( "namespace.insertuser"、user.commit();}} </code> </code> </code> </code> </code> </code> </code.commit();自動インクリメントのプライマリキーで戻ります
マッパーファイルを変更して追加すると、MySQLの自動インクリメントプライマリキーを返すことができます(つまり、データが挿入されたときに生成されたIDが生成されます):
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <ID = "Insertuser" parametertype = "com.fq.domain.user"> <selectkey keyporty = "id" after "java last_insert_id(); </selectkey> inserting insoing(name、password)values(#{name}、#{password}); </insert> </code> </code> </code> </code> </code>userdao
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> @TestPublic void Insertuser(){try(sqlsession = factory.opensession(){system.out.println(session); "new_password");session.insert("namespace.insertUser", user);// You need to get the autoincrement primary key session.commit();System.out.println(user.getId());}}</code></code></code></code></code></code></code></code></code>この関数は、UseGeneratedKeys/KeyPropertyプロパティを介して完了することもできます。詳細については、MyBatisのドキュメントを参照してください。
アップデート
マッパー
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Update ID = "uppetwususerbyid" parametertype = "com.fq.domain">ユーザーセットname =#{name}、passwerd = {passwerd = { #{id}; </update> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>userdao
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> @testPublic void updetususerbyid(){try(sqlsession session = factory.opensession(true){frue session session session session.utdate(one fictoryusedte) 「feiqing」、 "ICY5YQXZB1UWSWCVLSNLCA ==")消去
マッパー
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Delete ID = "DeleteUserbyId" parametertype = "java.lang.integer" #{id}; </delete> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>userdao
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> @testPublic DeleteUserbyId(){try(sqlsession session = factory.opensession(true)) {session.delete( "namespace.deleteuserbyid"、51615);}} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>まとめ
#{}/$ {}
#{}:プレースホルダーを表し、prepedStatementプレースホルダーに値を設定する(#{}はプレースホルダーを表しますか?)を実装し、JavaタイプをJDBCタイプに自動的に変換します(したがって#{}はSQL注入を効果的に防止できます)。 #{}は、単純なタイプまたはPO属性値を受信できます。パラメータ型が単一の単純なタイプ値を送信する場合、#{}は#{} curlyブレースの値または他の名前になります。 $ {}は、SQL文字列をスプライスするために使用できます。パラメータ型コンテンツは、JDBCタイプの変換なしでSQLでスプライスできます。 $ {}は、単純なタイプまたはPO属性値を受信するために使用できます。パラメータ型が単一の単純なタイプ値を送信する場合、$ {}は$ {} curlyブレースの値にのみ使用できます。
$ {}はSQLインジェクションを防ぐことはできませんが、$ {}が非常に便利な場合があります(並べ替えによる順序など、パラメーターを介して列名をSQLに渡す必要があります。$ {column}を使用する必要があり、#{}を使用してこの関数を実装できません(詳細については、JDBC基本的な議論を参照してください)。
sqlsession
データベースを操作する方法を提供します(selectone/selectlistなど)。ただし、sqlsessionはスレッドインセクターであるため、使用するローカル変数として定義することをお勧めします。
MyBatisの利点(JDBCと比較)
SQLはJavaコードで記述されているため、メンテナンスが困難になります。 MyBatisはMapperでSQLを書き込み、XMLはJavaコードから分離されています。パラメーターをSQLステートメントに渡すことは複雑です(条件が異なる場合、SQLデータ型はJavaとは異なります)。 MyBatisは、ParameterTypeを介してJavaオブジェクトをSQLステートメントに自動的にマッピングします。結果セットの解析は面倒です(SQLの変更はコードの変更につながり、SQLデータ型はJavaとは異なります)。 MyBatisは、SQL実行の結果を自動的にMaps sultSTypeを介してJavaオブジェクトにマップします。
添付ファイル:ログシステムの実装(logback/log4j)をpom.xmlに追加することをお勧めします。そのため、プログラムをデバッグするときにログ情報が印刷され、エラーの確認が容易になります。例としてログバックを取ります:
pom.xml
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <依存関係> ch.qos.logb ack </groupid> logback-classic </artifactid> <バージョン> 1.1.2 </version> </dependency> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
logback.xml
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Configuration> <Configuration> <Property name = "logroot" Value " value = "%d {hh:mm:ss.sss} [%thread]%-5level%logger {0} - %msg%n"> <appender name = "stdout"> <encoder> <pattern> $ {pattern} </pattern> </encoder> </appender> <adpenend name = "file"> <RollingPolicy> <filenamepattern> $ {logRoot}/common-server.%D {yyyy-mm-dd} .log </filenamepattern> <maxhistory> 7 </maxhistory> </rollingpolicy> apperder> </pittern> </pittern> </pittern> level = "debug"> <appender-ref ref = "stdout"> <appender-ref ref = "file"> </appender-ref> </appender-ref> </root> </property> </property> </configuration> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>MyBatisログに関するその他の詳細については、MyBatisドキュメントログセクションを参照してください。
DAO開発
MyBatis、オリジナルのDAO開発、マッパーマッピングDAO開発を使用してDAOを開発する方法は2つあります。
オリジナルのDAO開発オリジナルDAO開発では、開発者がIDに基づいてユーザー情報の照会など、DAOインターフェイスとDAOの実装を作成する必要があります。
マッパー(前と同じ)
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> resultType = "com.fq.domain.user"> select * from user where user where id =#{id}; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> userdaoインターフェイス
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code>/*** @author jifang* @publfid10 am。 selectuserbyid(integer id)スロー例外;} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
userdao実装
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code Factory; public userdaoimpl(sqlsessionFactory Factory){this.factory = factory;}@overridepublic user selectuserbyid(integer id)throws exception {sqlsession session = factory.opensession(); user user = session.selectone( "namespace.selectuserbyid"ユーザー;} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>クライアント
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Codes> <Codest> <Codest> <Codest> <Codes OriginalClient()スロー例外{userdao dao = new userdaoimpl(new sqlsessionfactorybuilder()。build(classloader.getsystemresourceasstream( "mybatis/mybatis-configuration.xml")); user user =); dao.selectuserbyid(1); System.out.println(user);}} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </</</code>元のDAO開発の問題:
1)DAO実装方法本体には多くの手続き的コードがあります。
2)SQLSessionメソッド(Select/Insert/Update)を呼び出すには、ステートメントのIDを指定する必要があります。これは、コードメンテナンスを助長しないハードコード化されています。
マッパーマッピング開発
マッパーマッピング開発方法では、DAOインターフェイスの書き込みのみが必要であり、MyBatisはマッパーファイルのインターフェイス定義とSQLステートメントに基づいてインターフェイスの実装を動的に作成します。
マッパー
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <! - ?XMLバージョン= "1.0 namespace = "com.fq.mybatis.userdao"> <select id = "selectuserbyid" parametertype = "java.lang.integer" resulttype = "com.fq.domain.user"> select * #{id}; </select> </mapper> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> <注:現時点では、名前空間はuserdaoインターフェイスの完全な資格のある名前と同じでなければなりません。
userdaoインターフェイスは以前と同じですが、userdaoimplクライアントは使用されなくなりました。
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code PM。*/public class mybatisclient {private sqlsession session; private sqlsessionfactory Factory; @beforepublic void setup(){factory = new sqlsessionfactorybuilder()。 Factory.opensession();}@testpublic void mappperclient()throws exception {userdao dao = session.getMapper(userdao.class); user user = dao.selectuserbyid(1); system.out.println(user);}@afterpublic boid teardown( {session.close();}} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>マッパーマッピング開発方法は、次の仕様に従う必要があります。
マッパーファイルの名前空間は、DAOインターフェイスの完全な資格のある名前と同じです。マッパーファイルのステートメントのIDは、DAOインターフェイスのメソッド名と同じです。マッパーファイルのステートメントのパラメータ型/resultTypeは、DAOメソッドのパラメーター/resultTypeと同じです。
マッパーマッピング
Mapperマッピングファイル(userDao.xmlなど)の主な機能は、MyBatisの中核であるSQLステートメント(各SQLはステートメントです)を定義することです。
Mybatisは、Mapperマッピング方法を使用してDAOを開発することを正式に推奨するため、将来の元のDAOの開発についてあまり紹介しません。
入力マッピング
複数の正式なパラメーター
単純なタイプの合格の前の例が使用されているため、ここでは繰り返されません。複数の正式なパラメーターを渡す必要がある場合、パラメータ型パラメーターは不要になります。
マッパー
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Coded #{1}、password =#{2} where id =#{0}; </update> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>userdao
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code updateUserById(Integer id, String name, String password) throws Exception;</code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
着信PO
MyBatisはOGNL式を使用してオブジェクト属性値を解析します。
マッパー
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Select id = "selectuserbynamepassword" parametertype = "com.fq.domain.user" resulttype = "com.fq.domain.user"> select *from ushwere where name =#{name}およびpassword = #{password}; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>userdao
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> selectuserbynamepassword(ユーザーユーザー)スロー Exception;</code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
マッパー
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Co de> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Select id = "SelectUserByMap" parameterType = "Java.util.map" resultType = "com.fq.domain.user"> select *from userwhere name =#{name}およびpassword = #{password};</select></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>#{}巻き毛装具のマップの対応するキー。
userdao
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> selectuserbymap(map <string、object = ""> map)スローException;</string,></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
出力マッピング
出力シンプルタイプ
マッパー
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Co de> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Select id = "SelectUserCount" parameterType = "java.lang.String" resultType = "java.lang.integer"> select count(*)from where where name like '%$ {value}%'; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code > </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>userdao
<Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <CODER Exception;</code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
シンプルなタイプを返す必要は、クエリの結果に1つのレコードしかないことを確認する必要があり、最初のフィールドの値が最終的に出力タイプに変換されます。
出力POオブジェクト/リスト
2種類の出力が以前に実証されたことがあります(SelectuserbyId/selectuserbynameはその時点で元のDAO開発方法を使用していましたが、マッパー定義フォームは似ていました)ので、ここでは簡単な要約を作成します。
単一のPOオブジェクトを出力するときにマッパーで定義された結果型は、マッパーで定義されている結果型と同じです。 SQLクエリの結果は、単一のデータであることが保証されている必要があり、SelectOneメソッドを使用して内部的に呼ばれます。出力POリストは、クエリの結果が複数である可能性があることを示し、SelectListメソッドを使用して内部的に呼ばれ、インターフェイスの戻り値はリスト/セットでホストできます。
出力マップ
出力POオブジェクトを代わりに使用して、フィールド名をキーとして、フィールド値を値として使用するために使用できます。
マッパー
<code> <select id = "selectuserlikename" resulttype = "java.util.map"> select *fromユーザーname '%$ {value}%'; </select> </code>userdao
<Code> <Code>リスト<Map <String、object = "" >> Selectuserlikename(string name)throws Exception; </map <string、> </code> </code>
結果マップ
resultTypeはクエリの結果をPOにマッピングできますが、前提は、POプロパティ名とSQLフィールド名が同じでなければならないことです。一貫性がない場合、対応するマッピングは結果マップを使用して作成できます。
マッパー
<code> <code> <code> <resultmap id = "usermap" type = "com.fq.domain.user"> <id column = "user_id" property = "id"> <result column = "user_name" property = "name"> <result column = "user_password" "property =" property "> </result> </id> <選択parametertype = "java.lang.String" resultmap = "usermap"> sequedid user_id、name user_name、password user_passwordfrom userwhere name =#{name}; </select> </code> </code> </code>userdaoインターフェイスは以前と同じです。