要件:要件クエリの結果は、ユーザー名、ユーザーパスワード、ユーザーの役割の表示します
userテーブルの唯一のユーザーの役割のコード値は、該当する名前、コード表smbms_roleテーブル内の文字名がありませんので、我々はリンクテーブルを照会する必要があります。
私たちが使用する前にマッピングする結果フィールドの別名とエンティティクラスのプロパティを照会するための方法です。今、私たちは、このresultMapノードを使用し、異なる言い回しです。
まず、SQLそして、私たちは、SQLの別名でほのめかすために、すべてのであれば、実際のプロジェクトの開発プロセスでは、データベース内のエンティティクラスと列名の存在は、常に対応していない、合計はよく知られている、魔法のこのresultMapノードについて教えてくださいそれは長いと退屈な書きます、読んする方法はありません、メンテナンスを投稿することは容易ではない、このresultMapはここだけで、この問題を解決するために
これにより、開発効率の向上、コード読みやすいと後のメンテナンスです。
UserMapper.xml
!1 < -クエリの役割のユーザー名、パスワードとユーザー名を表示する結果、ニーズ、さらには、テーブル、クエリ注:最後に実行されたプログラムのroleNameがnullの 2つの理由:データベースのフィールド名と名前ユーザエンティティクラス属性であります一貫性のない、そして今はこのresultMapノードを使用し た結果が影響を受けることなく、可能であるマップを選択するために、3つのこのresultMapノードノードの上方および下方- > 4 <上記選択ID =「getUserListByUserName5」ParameterTypeが=「マップ」を言及=このresultMap "UserListMap"> 。5 SELECT A. * smbms_user A、R&LTのsmbms_roleから、r.roleName 。6 CONCATなどWHERE名( '%'、USERNAME1#{}、 '%' ) 。7 とUSERROLE userRole1 =#{A}と= .userRoleはr.id 。8 </ SELECT> 9 <このresultMapタイプ= "ユーザー" ID = "UserListMap"> 10 < resultプロパティ= "userNameに"列= "userNameに" /> 11 <結果プロパティ= "userRoleName"欄= "のroleName" /> 12 </このresultMap>
UserMapper.java
対応するテストメソッドを書きます:
1 @Test 2 公共 ボイドTEST9(){ 3 地図<文字列、文字列>マップ= 新しい HashMapの<文字列、文字列> (); 4 map.put( "USERNAME1"、 "赵" )。 5 map.put( "userRole1"、 "3" )。 6 7 SQLSESSION SQLSESSION = NULL ; 8 java.util.Listに<ユーザー> userList2 = 新規のArrayList <ユーザー> (); 9 トライ{ 10 SQLSESSION = MyBatisUtil.createSqlSession()。 // userList2 = sqlSession.selectList( "cn.smbms.dao.user.UserMapper.getUserListByUserName"、userNameString); 13である // 呼び出しインタフェース方法マッパ 14 userList2 = sqlSession.getMapper(UserMapper クラス).getUserListByUserName5(マップ) ; 15 int型のサイズ= userList2.size(); 16 mlogger.info( "レコードの数を取得する:" + サイズ); 17 18れる } キャッチ(例外E){ 19 // TODO:例外処理 20はである } 最後に{ 21であります // 最後に、我々は注意を払う必要があります:セッションを閉じる 22 ; MyBatisUtil.closeSqlSession(SQLSESSION) 23は、 24 } 25 のための{(userList2ユーザuser2) 26である "+ user2.getUserName()+:mlogger.info( "ユーザ名" 、 + user2.getUserPassword()+":パスワード" 、 ユーザ役割:「+ user2.getUserRoleName()); 27 } 28 29 }
結果:
1 [DEBUG] 2019年11月2日21:01:00291 cn.smbms.dao.user.UserMapper.getUserListByUserName5 - ==>準備:。、smbms_role R smbms_userから*、r.roleNameを選択CONCAT様名( '%'、?、 '%')とUSERROLE =?そしてa.userRole = r.id 2 [デバッグ] 2019年11月2日21:01:00433 cn.smbms.dao.user.UserMapper.getUserListByUserName5 - ==>パラメータ:赵(文字列)、3 (文字列) 3 [ INFO] 2019年11月2日21:01:00504 cn.smbms.dao.test.UserMapperTest -获取到的记录数是:1 4 [DEBUG] 2019年11月2日21:01:00505 org.apache.ibatis。 transaction.jdbc.JdbcTransaction -へのリセット自動コミット真のJDBC接続の[com.mysql.jdbc.JDBC4Connection@51a19458] 5[デバッグ] 2019年11月2日21である:01:00505 org.apache.ibatis.transaction.jdbc.JdbcTransaction - JDBC接続[com.mysql.jdbc.JDBC4Connection@51a19458]を閉じる 6。 [DEBUG] 2019年11月2日21です。 01:00506 org.apache.ibatis.datasource.pooled.PooledDataSource -返さ接続1369543768 プールに。 7 [INFO] 2019年11月2日21:01:00506 cn.smbms.dao.test.UserMapperTest -名:趙ヤンパスワード:0000000、ユーザーの役割:一般的なスタッフ