MyBatis로 프레임 워크 -ResultMap 노드

요구 사항 : 요구 사항 쿼리 결과는 사용자 이름, 사용자 암호, 사용자의 역할을 표시

사용자 테이블 만 사용자 역할 코드 값이 대응하는 이름, 코드 테이블 smbms_role 테이블에서 캐릭터 이름이 없기 때문에, 우리는 연결된 테이블을 조회해야합니다.

우리가 사용하기 전에하는 것은 매핑 할 결과 필드 별칭을 조회하는 방법과 엔티티 클래스의 호텔입니다. 이제 우리는, 다른 표현에 된 resultMap 노드를 사용합니다.

먼저 우리는 다음 SQL 별명은 SQL에 의해 빗대 모든 경우 총이 아니라 실제 프로젝트 개발 과정에서 알려진, 마법적인 resultMap 노드에 대해 말해, 데이터베이스 엔티티 클래스와 열 이름의 존재는 항상 일치하지 않습니다 그것은 길고 지루한 쓸 것, 읽을 수있는 방법이 없습니다, 유지 보수를 게시하는 것은 쉽지 않다, resultMap는 여기에 바로이 문제를 해결하기 위해

이 읽기 및 사후 유지 보수하여 개발 효율성을 개선하는 코드 쉽다.

UserMapper.xml

! 마지막 실행 roleName가 null의 프로그램 : - 1 <쿼리 결과는 역할, 요구, 심지어 테이블 쿼리 참고 사용자 이름, 암호 및 사용자 이름을 표시하는 
 2 가지 이유 : 데이터베이스 필드 이름과 이름 사용자 엔티티 클래스는 속성 일관성은, 지금 우리가 된 resultMap 노드 사용 
 지도를 선택 3 resultMap는 노드 위 노드 아래 가능하며, 결과는 영향을받지 않습니다 -> 
4      <위에서 ID = "getUserListByUserName5"parameterType = "지도"를 언급 선택 = 된 resultMap "UserListMap">
 . 5          SELECT A에 * , r.roleName smbms_user A로부터, R & LT smbms_role
 . 6          WHERE CONCAT ( '%', USERNAME1 번호 {}, '%'등 자명 )
 .도 7          및 userRole userRole1 = # {A} 및 = .userRole는 r.id
 . 8      </ SELECT>
 . 9      <된 resultMap 타입 = "사용자"ID = "UserListMap">
 10          <
결과 속성 = '사용자 이름 "열에 ='사용자 이름"/> 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 = ;
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 (MAP) ;
 15              INT의 크기 = userList2.size ();
 16              mlogger.info는 ( "레코드의 수를 취득한다 :"+ 크기),
 17.  
18된다          } 캐치 (예외 E) {
 19.              // TODO : 예외 처리 
(20)하는 것은          } 되고 finally {
 21 인              // 폐회 세션 : 마지막으로, 우리는 관심을 지불해야합니다 
(22)             ; MyBatisUtil.closeSqlSession (SQLSESSION)
 (23)은  
24          }
 25          에 대한 {: (userList2 사용자 사용자 2)
 (26)입니다              "+ user2.getUserName () + : mlogger.info ("사용자 이름 " , + user2.getUserPassword () +": 비밀 번호 " , 사용자 역할 : "+ user2.getUserRoleName ());
 27          }
 28  
29      }

결과 :

1 [DEBUG] 2019년 11월 2일 21 : 01 : 00,291 cn.smbms.dao.user.UserMapper.getUserListByUserName5 - ==> 준비 :. A, R smbms_role smbms_user에서 * r.roleName을 선택 CONCAT 같은 아이디 ( '%',?, '%')와 userRole =? 및 a.userRole는 = r.id 
 2 [DEBUG] 2019년 11월 2일 21 : 01 : 00,433 cn.smbms.dao.user.UserMapper.getUserListByUserName5 - ==> 파라미터 :赵(문자열), 3- (문자열)
 3 [ INFO] 2019년 11월 2일 21 : 01 : 00,504 cn.smbms.dao.test.UserMapperTest -获取到的记录数是: 1
 (4) [DEBUG] 2019년 11월 2일 21 : 01 : 00,505 org.apache.ibatis. transaction.jdbc.JdbcTransaction는 -로 자동 커밋을 재설정 진정한 JDBC 연결에 [com.mysql.jdbc.JDBC4Connection@51a19458]
 (5)[디버그] 2019년 11월 2일 21이다 : 01 : 00,505 org.apache.ibatis.transaction.jdbc.JdbcTransaction - JDBC 연결 [com.mysql.jdbc.JDBC4Connection@51a19458] 닫기
 6. [디버그] 2019년 11월 2일 21이다 : 01 : 00,506 org.apache.ibatis.datasource.pooled.PooledDataSource - 반환 연결 1,369,543,768 풀로.
 7 [INFO] 2019년 11월 2일 21 : 01 : 00,506 cn.smbms.dao.test.UserMapperTest - 이름 : 자오 얀 암호 : 0000000, 사용자 역할 : 일반 직원

 

 

추천

출처www.cnblogs.com/dongyaotou/p/11784064.html