요구 사항 : 요구 사항 쿼리 결과는 사용자 이름, 사용자 암호, 사용자의 역할을 표시
사용자 테이블 만 사용자 역할 코드 값이 대응하는 이름, 코드 테이블 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, 사용자 역할 : 일반 직원