From 494dccf941e090b0adde1aaa34450086bb4e810f Mon Sep 17 00:00:00 2001 From: Iwao AVE! Date: Sat, 15 Feb 2020 00:06:12 +0900 Subject: [PATCH] Added a test demonstrating nested column prefix --- .../CreateDB.sql | 5 +++-- .../OneManyColumnPrefixTest.java | 16 ++++++++++++++++ .../User.java | 9 +++++++++ .../UserDao.java | 19 +++++++++++++++++++ 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/CreateDB.sql b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/CreateDB.sql index 6664ddc40ce..5d834a33b8f 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/CreateDB.sql +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/CreateDB.sql @@ -37,6 +37,7 @@ VALUES ('4', 'Learning-commissary'); CREATE TABLE user ( id int, username varchar(32), +friend_id int ); -- ---------------------------- @@ -48,8 +49,8 @@ INSERT INTO user (id,username) VALUES ('2', 'Doug Lea'); INSERT INTO user (id,username) VALUES ('3', 'Rod johnson'); -INSERT INTO user (id,username) -VALUES ('4', 'Juergen Hoeller'); +INSERT INTO user (id,username, friend_id) +VALUES ('4', 'Juergen Hoeller', 1); -- ---------------------------- -- Table structure for `user_role` diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/OneManyColumnPrefixTest.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/OneManyColumnPrefixTest.java index 44cebd00e68..1b02dd19bd7 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/OneManyColumnPrefixTest.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/OneManyColumnPrefixTest.java @@ -78,4 +78,20 @@ void shouldUseColumnPrefixWithOne() { assertEquals("teacher", users.get(0).getRole().getName()); } } + + @Test + void shouldResolveNestedColumnPrefix() { + try (SqlSession sqlSession = sqlSessionFactory.openSession()) { + UserDao mapper = sqlSession.getMapper(UserDao.class); + User user = mapper.findUserWithFriend(4); + assertEquals(4, user.getId()); + assertEquals(2, user.getRoles().size()); + assertEquals("student", user.getRoles().get(0).getName()); + assertEquals("Learning-commissary", user.getRoles().get(1).getName()); + assertEquals(1, user.getFriend().getId()); + assertEquals(2, user.getFriend().getRoles().size()); + assertEquals("teacher", user.getFriend().getRoles().get(0).getName()); + assertEquals("Headmaster", user.getFriend().getRoles().get(1).getName()); + } + } } diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/User.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/User.java index bdb92641e62..8b0e059184a 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/User.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/User.java @@ -23,6 +23,7 @@ public class User { private List teachers; private Role role; private List roles; + private User friend; public Role getRole() { return role; @@ -72,4 +73,12 @@ public List getTeachers() { public void setTeachers(List teachers) { this.teachers = teachers; } + + public User getFriend() { + return friend; + } + + public void setFriend(User friend) { + this.friend = friend; + } } diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/UserDao.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/UserDao.java index 7f0fe655629..49cee642351 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/UserDao.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_columnprefix/UserDao.java @@ -69,4 +69,23 @@ public interface UserDao { @Result(column = "teacher_name", property = "username") }) List justUseResult(); + + @Select({ "select", + " u.id, u.username, r.id role_id, r.name role_name,", + " f.id friend_id, f.username, fr.id friend_role_id, fr.name friend_role_name", + " from user u", + " left join user_role ur on u.id = ur.user_id", + " left join role r on ur.role_id = r.id" , + " left join user f on u.friend_id = f.id", + " left join user_role fur on f.id = fur.user_id", + " left join role fr on fur.role_id = fr.id" , + " where u.id = #{userId} order by r.id, fr.id" + }) + @Results(id = "userWithFriendMap", value = { + @Result(id = true, column = "id", property = "id"), + @Result(column = "username", property = "username"), + @Result(property = "roles", many = @Many(resultMap = "org.apache.ibatis.submitted.annotion_many_one_add_columnprefix.RoleDao.roleMap1", columnPrefix = "role_")), + @Result(property = "friend", one = @One(resultMap = "org.apache.ibatis.submitted.annotion_many_one_add_columnprefix.UserDao.userWithFriendMap", columnPrefix = "friend_")) + }) + User findUserWithFriend(Integer userId); }