From e05d686bf8bb5b0d7c319a117e47e77e969880cb Mon Sep 17 00:00:00 2001 From: ink_heart <1521215732@qq.com> Date: Tue, 10 Dec 2019 16:27:34 +0800 Subject: [PATCH 1/6] add resultmapId to @many and @one --- .../org/apache/ibatis/annotations/Many.java | 6 ++++++ .../org/apache/ibatis/annotations/One.java | 6 ++++++ .../annotation/MapperAnnotationBuilder.java | 20 ++++++++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/ibatis/annotations/Many.java b/src/main/java/org/apache/ibatis/annotations/Many.java index 800acb3f071..e439bb1decc 100644 --- a/src/main/java/org/apache/ibatis/annotations/Many.java +++ b/src/main/java/org/apache/ibatis/annotations/Many.java @@ -33,6 +33,12 @@ @Retention(RetentionPolicy.RUNTIME) @Target({}) public @interface Many { + /** + * Returns the id that retrieves result map. + * + * @return the id that retrieves result map. + */ + String resultMapId() default ""; /** * Returns the statement id that retrieves collection. * diff --git a/src/main/java/org/apache/ibatis/annotations/One.java b/src/main/java/org/apache/ibatis/annotations/One.java index 7ca298afa42..0c3d60a56ed 100644 --- a/src/main/java/org/apache/ibatis/annotations/One.java +++ b/src/main/java/org/apache/ibatis/annotations/One.java @@ -33,6 +33,12 @@ @Retention(RetentionPolicy.RUNTIME) @Target({}) public @interface One { + /** + * Returns the id that retrieves result map. + * + * @return the id that retrieves result map. + */ + String resultMapId() default ""; /** * Returns the statement id that retrieves single object. * diff --git a/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java b/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java index 20b14e69557..9ff93d62836 100644 --- a/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java +++ b/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java @@ -552,7 +552,7 @@ private void applyResults(Result[] results, Class resultType, List resultType, List 0 && result.many().resultMapId().length() > 0) { + throw new BuilderException("Cannot use both @One and @Many annotations in the same @Result"); + } + return result.one().resultMapId().length() > 0 || result.many().resultMapId().length() > 0; + } + private String nestedSelectId(Result result) { String nestedSelect = result.one().select(); if (nestedSelect.length() < 1) { From 5e2fc178f6e0b3f3458ccdc3b4d89636fb7854f7 Mon Sep 17 00:00:00 2001 From: ink_heart <1521215732@qq.com> Date: Tue, 10 Dec 2019 16:52:07 +0800 Subject: [PATCH 2/6] test case --- .../CreateDB.sql | 61 +++++++++++++++++++ .../MyBatisTest.java | 55 +++++++++++++++++ .../Role.java | 31 ++++++++++ .../RoleDao.java | 30 +++++++++ .../RoleDao.xml | 10 +++ .../SqlMapConfig.xml | 21 +++++++ .../User.java | 43 +++++++++++++ .../UserDao.java | 45 ++++++++++++++ 8 files changed, 296 insertions(+) create mode 100644 src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql create mode 100644 src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java create mode 100644 src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/Role.java create mode 100644 src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java create mode 100644 src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.xml create mode 100644 src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml create mode 100644 src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java create mode 100644 src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql new file mode 100644 index 00000000000..4f4db8961f6 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql @@ -0,0 +1,61 @@ +-- ---------------------------- +-- Table structure for role +-- ---------------------------- +CREATE TABLE role ( +id int, +role_name varchar(10) +); + +-- ---------------------------- +-- Records of role +-- ---------------------------- +INSERT INTO role (id,role_name) +VALUES ('1', '老师'); +INSERT INTO role (id,role_name) +VALUES ('2', '学生'); +INSERT INTO role (id,role_name) +VALUES ('3', '班主任'); +INSERT INTO role (id,role_name) +VALUES ('4', '学习委员'); + +CREATE TABLE user ( +id int, +username varchar(32), +); + +-- ---------------------------- +-- Records of user +-- ---------------------------- +INSERT INTO user (id,username) +VALUES ('1', '赵六'); +INSERT INTO user (id,username) +VALUES ('2', '李四'); +INSERT INTO user (id,username) +VALUES ('3', '毛六'); +INSERT INTO user (id,username) +VALUES ('4', '王五'); + +-- ---------------------------- +-- Table structure for `user_role` +-- ---------------------------- +CREATE TABLE user_role ( + id int, + role_id int, + user_id int +); + +-- ---------------------------- +-- Records of user_role +-- ---------------------------- +INSERT INTO user_role (id,role_id,user_id) +VALUES ('1', '2', '4'); +INSERT INTO user_role (id,role_id,user_id) +VALUES ('2', '3', '1'); +INSERT INTO user_role (id,role_id,user_id) +VALUES ('3', '1', '2'); +INSERT INTO user_role (id,role_id,user_id) +VALUES ('4', '2', '3'); +INSERT INTO user_role (id,role_id,user_id) +VALUES ('5', '4', '4'); +INSERT INTO user_role (id,role_id,user_id) +VALUES ('6', '1', '1'); diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java new file mode 100644 index 00000000000..1b0ba873418 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java @@ -0,0 +1,55 @@ +package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; + +import org.apache.ibatis.BaseDataTest; +import org.apache.ibatis.io.Resources; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.session.SqlSessionFactoryBuilder; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.io.Reader; +import java.util.List; + +class MyBatisTest { + + private static SqlSessionFactory sqlSessionFactory; + + @BeforeAll + static void setUp() throws Exception { + // create an SqlSessionFactory + try (Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml")) { + sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); + } + + // populate in-memory database + BaseDataTest.runScript(sqlSessionFactory.getConfiguration().getEnvironment().getDataSource(), + "org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql"); + } + + @Test + void test() { + try (SqlSession sqlSession = sqlSessionFactory.openSession()){ + UserDao mapper = sqlSession.getMapper(UserDao.class); + List users = mapper.flindAll(); + System.out.println(users); + Assertions.assertNotNull(users, "users must not be null"); + Assertions.assertEquals(4, users.size(), "should return 4 results"); + Assertions.assertEquals(2, users.get(0).getRoles().size(), "should have 2 roles"); + } + } + + @Test + void test2() { + try (SqlSession sqlSession = sqlSessionFactory.openSession()){ + UserDao mapper = sqlSession.getMapper(UserDao.class); + List users = mapper.flindAll2(); + System.out.println(users); + Assertions.assertNotNull(users, "users must not be null"); + Assertions.assertEquals(4, users.size(), "should return 4 results"); + Assertions.assertEquals(2, users.get(0).getRoles().size(), "should have 2 roles"); + } + } + +} diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/Role.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/Role.java new file mode 100644 index 00000000000..2aec879eb69 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/Role.java @@ -0,0 +1,31 @@ +package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; + +public class Role { + private Integer id; //int + + @Override + public String toString() { + return "Role{" + + "id=" + id + + ", roleName='" + roleName + '\'' + + '}'; + } + + private String roleName;//varchar + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } +} diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java new file mode 100644 index 00000000000..ccb5b756078 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2019 ucsmy.com, All rights reserved. + */ +package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; + +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @Description: + * @Author: lvyang + * @Created Date: 2019年12月10日 + * @LastModifyDate: + * @LastModifyBy: + * @Version: + */ +public interface RoleDao { + @Select("select * from role") + @Results( + id="roleMap1", + value = { + @Result(id = true,column="role_id",property = "id"), + @Result(column="role_name",property = "roleName") + } + ) + public List findAll(); +} diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.xml b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.xml new file mode 100644 index 00000000000..1ffe77395d2 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml new file mode 100644 index 00000000000..6f5f46a22c7 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java new file mode 100644 index 00000000000..cff6bd6c11d --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java @@ -0,0 +1,43 @@ +package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; + + +import java.util.List; + +public class User { + private Integer id; //int + private String username; //varchar + private List roles; + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", username='" + username + '\'' + + ", roles=" + roles + + '}'; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public List getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } +} diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java new file mode 100644 index 00000000000..d65672d3396 --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2019 ucsmy.com, All rights reserved. + */ +package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; + +import org.apache.ibatis.annotations.Many; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @Description: + * @Author: lvyang + * @Created Date: 2019年12月10日 + * @LastModifyDate: + * @LastModifyBy: + * @Version: + */ +public interface UserDao { + @Select("select\n" + + " u.id,u.username,r.id role_id,r.role_name\n" + + " from user u\n" + + " left join user_role ur on u.id =ur.user_id\n" + + " left join role r on ur.role_id = r.id") + @Results({ + @Result(id = true,column="id",property = "id"), + @Result(column="username",property = "username"), + @Result(property = "roles",many = @Many(resultMapId = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap1")) + }) + public List flindAll(); + + @Select("select\n" + + " u.id,u.username,r.id role_id,r.role_name\n" + + " from user u\n" + + " left join user_role ur on u.id =ur.user_id\n" + + " left join role r on ur.role_id = r.id") + @Results({ + @Result(id = true,column="id",property = "id"), + @Result(column="username",property = "username"), + @Result(property = "roles",many = @Many(resultMapId = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")) + }) + public List flindAll2(); +} From 50e2f10b71d036c3a4f53dddf6728c35e88099c7 Mon Sep 17 00:00:00 2001 From: ink_heart <1521215732@qq.com> Date: Tue, 10 Dec 2019 17:01:49 +0800 Subject: [PATCH 3/6] add test case --- .../MyBatisTest.java | 14 ++++++++++++-- .../UserDao.java | 17 +++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java index 1b0ba873418..cfceed63ab6 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java @@ -33,7 +33,6 @@ void test() { try (SqlSession sqlSession = sqlSessionFactory.openSession()){ UserDao mapper = sqlSession.getMapper(UserDao.class); List users = mapper.flindAll(); - System.out.println(users); Assertions.assertNotNull(users, "users must not be null"); Assertions.assertEquals(4, users.size(), "should return 4 results"); Assertions.assertEquals(2, users.get(0).getRoles().size(), "should have 2 roles"); @@ -45,11 +44,22 @@ void test2() { try (SqlSession sqlSession = sqlSessionFactory.openSession()){ UserDao mapper = sqlSession.getMapper(UserDao.class); List users = mapper.flindAll2(); - System.out.println(users); Assertions.assertNotNull(users, "users must not be null"); Assertions.assertEquals(4, users.size(), "should return 4 results"); Assertions.assertEquals(2, users.get(0).getRoles().size(), "should have 2 roles"); } } + @Test + void test3() { + try (SqlSession sqlSession = sqlSessionFactory.openSession()){ + UserDao mapper = sqlSession.getMapper(UserDao.class); + List users = mapper.flindAll3(); + Assertions.assertNotNull(users, "users must not be null"); + Assertions.assertEquals(2, users.size(), "should return 2 results"); + Assertions.assertEquals(1, users.get(0).getRoles().size(), "should have 1 roles"); + Assertions.assertEquals("老师", users.get(0).getRoles().get(0).getRoleName(), "should have 1 roles"); + } + } + } diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java index d65672d3396..05eb0c90489 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java @@ -3,10 +3,7 @@ */ package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; -import org.apache.ibatis.annotations.Many; -import org.apache.ibatis.annotations.Result; -import org.apache.ibatis.annotations.Results; -import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.*; import java.util.List; @@ -42,4 +39,16 @@ public interface UserDao { @Result(property = "roles",many = @Many(resultMapId = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")) }) public List flindAll2(); + + @Select("select\n" + + " u.id,u.username,r.id role_id,r.role_name\n" + + " from user u\n" + + " left join user_role ur on u.id =ur.user_id\n" + + " left join role r on ur.role_id = r.id where u.id in (2,3)") + @Results({ + @Result(id = true,column="id",property = "id"), + @Result(column="username",property = "username"), + @Result(property = "roles",one = @One(resultMapId = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")) + }) + public List flindAll3(); } From 2f6023ef6564a29665797be9dc90c4fae5bc6b4a Mon Sep 17 00:00:00 2001 From: ink_heart <1521215732@qq.com> Date: Tue, 24 Dec 2019 15:10:32 +0800 Subject: [PATCH 4/6] added a few change --- .../org/apache/ibatis/annotations/Many.java | 2 +- .../org/apache/ibatis/annotations/One.java | 2 +- .../annotation/MapperAnnotationBuilder.java | 8 ++-- .../CreateDB.sql | 16 ++++---- .../MyBatisTest.java | 28 +++++++++---- .../User.java | 18 +++++++++ .../UserDao.java | 40 +++++++++++++++---- 7 files changed, 85 insertions(+), 29 deletions(-) diff --git a/src/main/java/org/apache/ibatis/annotations/Many.java b/src/main/java/org/apache/ibatis/annotations/Many.java index e439bb1decc..f09aafbd80b 100644 --- a/src/main/java/org/apache/ibatis/annotations/Many.java +++ b/src/main/java/org/apache/ibatis/annotations/Many.java @@ -38,7 +38,7 @@ * * @return the id that retrieves result map. */ - String resultMapId() default ""; + String resultMap() default ""; /** * Returns the statement id that retrieves collection. * diff --git a/src/main/java/org/apache/ibatis/annotations/One.java b/src/main/java/org/apache/ibatis/annotations/One.java index 0c3d60a56ed..ff6d12b1c4c 100644 --- a/src/main/java/org/apache/ibatis/annotations/One.java +++ b/src/main/java/org/apache/ibatis/annotations/One.java @@ -38,7 +38,7 @@ * * @return the id that retrieves result map. */ - String resultMapId() default ""; + String resultMap() default ""; /** * Returns the statement id that retrieves single object. * diff --git a/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java b/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java index 9ff93d62836..2af92659c0f 100644 --- a/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java +++ b/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java @@ -565,9 +565,9 @@ private void applyResults(Result[] results, Class resultType, List 0 && result.many().resultMapId().length() > 0) { + if (result.one().resultMap().length() > 0 && result.many().resultMap().length() > 0) { throw new BuilderException("Cannot use both @One and @Many annotations in the same @Result"); } - return result.one().resultMapId().length() > 0 || result.many().resultMapId().length() > 0; + return result.one().resultMap().length() > 0 || result.many().resultMap().length() > 0; } private String nestedSelectId(Result result) { diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql index 4f4db8961f6..060a9035238 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql @@ -10,13 +10,13 @@ role_name varchar(10) -- Records of role -- ---------------------------- INSERT INTO role (id,role_name) -VALUES ('1', '老师'); +VALUES ('1', 'teacher'); INSERT INTO role (id,role_name) -VALUES ('2', '学生'); +VALUES ('2', 'student'); INSERT INTO role (id,role_name) -VALUES ('3', '班主任'); +VALUES ('3', 'Headmaster'); INSERT INTO role (id,role_name) -VALUES ('4', '学习委员'); +VALUES ('4', 'Learning-commissary'); CREATE TABLE user ( id int, @@ -27,13 +27,13 @@ username varchar(32), -- Records of user -- ---------------------------- INSERT INTO user (id,username) -VALUES ('1', '赵六'); +VALUES ('1', 'James Gosling'); INSERT INTO user (id,username) -VALUES ('2', '李四'); +VALUES ('2', 'Doug Lea'); INSERT INTO user (id,username) -VALUES ('3', '毛六'); +VALUES ('3', 'Rod johnson'); INSERT INTO user (id,username) -VALUES ('4', '王五'); +VALUES ('4', 'Juergen Hoeller'); -- ---------------------------- -- Table structure for `user_role` diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java index cfceed63ab6..8cd9d3cdd92 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java @@ -29,10 +29,10 @@ static void setUp() throws Exception { } @Test - void test() { + void testFindAll() { try (SqlSession sqlSession = sqlSessionFactory.openSession()){ UserDao mapper = sqlSession.getMapper(UserDao.class); - List users = mapper.flindAll(); + List users = mapper.findAll(); Assertions.assertNotNull(users, "users must not be null"); Assertions.assertEquals(4, users.size(), "should return 4 results"); Assertions.assertEquals(2, users.get(0).getRoles().size(), "should have 2 roles"); @@ -40,10 +40,10 @@ void test() { } @Test - void test2() { + void testFindAll2() { try (SqlSession sqlSession = sqlSessionFactory.openSession()){ UserDao mapper = sqlSession.getMapper(UserDao.class); - List users = mapper.flindAll2(); + List users = mapper.findAll2(); Assertions.assertNotNull(users, "users must not be null"); Assertions.assertEquals(4, users.size(), "should return 4 results"); Assertions.assertEquals(2, users.get(0).getRoles().size(), "should have 2 roles"); @@ -51,14 +51,26 @@ void test2() { } @Test - void test3() { + void testFindAll3() { try (SqlSession sqlSession = sqlSessionFactory.openSession()){ UserDao mapper = sqlSession.getMapper(UserDao.class); - List users = mapper.flindAll3(); + List users = mapper.findAll3(); Assertions.assertNotNull(users, "users must not be null"); Assertions.assertEquals(2, users.size(), "should return 2 results"); - Assertions.assertEquals(1, users.get(0).getRoles().size(), "should have 1 roles"); - Assertions.assertEquals("老师", users.get(0).getRoles().get(0).getRoleName(), "should have 1 roles"); + Assertions.assertNotNull(users.get(0).getRole(), "role must not be null"); + Assertions.assertEquals("teacher", users.get(0).getRole().getRoleName(), "roleName should be teacher"); + } + } + + + @Test + void testFindHeadmaster() { + try (SqlSession sqlSession = sqlSessionFactory.openSession()){ + UserDao mapper = sqlSession.getMapper(UserDao.class); + User headmaster = mapper.findHeadmaster(); + Assertions.assertNotNull(headmaster, "users must not be null"); + Assertions.assertEquals(3, headmaster.getTeachers().size(), "should return 3 results"); + Assertions.assertEquals("Doug Lea", headmaster.getTeachers().get(0).getUsername(), "userName should be lisi"); } } diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java index cff6bd6c11d..f2d4b066cd6 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java @@ -6,8 +6,19 @@ public class User { private Integer id; //int private String username; //varchar + private List teachers; + private Role role; private List roles; + public Role getRole() { + return role; + } + + public void setRole(Role role) { + this.role = role; + } + + @Override public String toString() { return "User{" + @@ -40,4 +51,11 @@ public List getRoles() { public void setRoles(List roles) { this.roles = roles; } + public List getTeachers() { + return teachers; + } + + public void setTeachers(List teachers) { + this.teachers = teachers; + } } diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java index 05eb0c90489..00a9012b956 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java @@ -24,9 +24,9 @@ public interface UserDao { @Results({ @Result(id = true,column="id",property = "id"), @Result(column="username",property = "username"), - @Result(property = "roles",many = @Many(resultMapId = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap1")) + @Result(property = "roles",many = @Many(resultMap = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap1")) }) - public List flindAll(); + public List findAll(); @Select("select\n" + " u.id,u.username,r.id role_id,r.role_name\n" + @@ -36,19 +36,45 @@ public interface UserDao { @Results({ @Result(id = true,column="id",property = "id"), @Result(column="username",property = "username"), - @Result(property = "roles",many = @Many(resultMapId = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")) + @Result(property = "roles",many = @Many(resultMap = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")) }) - public List flindAll2(); + public List findAll2(); @Select("select\n" + " u.id,u.username,r.id role_id,r.role_name\n" + " from user u\n" + " left join user_role ur on u.id =ur.user_id\n" + " left join role r on ur.role_id = r.id where u.id in (2,3)") - @Results({ + @Results( + { @Result(id = true,column="id",property = "id"), @Result(column="username",property = "username"), - @Result(property = "roles",one = @One(resultMapId = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")) + @Result(property = "role",one = @One(resultMap = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")) + }) + public List findAll3(); + + @Select("select id teacher_id,username teacher_name from user") + @Results( + id = "userMap", + value = { + @Result(id = true,column="teacher_id",property = "id"), + @Result(column="teacher_name",property = "username"), }) - public List flindAll3(); + public List justUseResult(); + + @Select("select\n" + + "u.id,u.username,r.id role_id,r.role_name,ut.id teacher_id,ut.username teacher_name\n" + + "from user u\n" + + "left join user_role ur on u.id =ur.user_id\n" + + "left join role r on ur.role_id = r.id\n" + + "left join user ut on ut.id != u.id\n" + + "where role_id = 3" + ) + @Results({ + @Result(id = true,column="id",property = "id"), + @Result(column="username",property = "username"), + @Result(property = "role",one = @One(resultMap = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")), + @Result(property = "teachers",many = @Many(resultMap = "userMap")), + }) + public User findHeadmaster(); } From 6945700b6e011e00c6bc7ba45d8f6615e87d4de7 Mon Sep 17 00:00:00 2001 From: ink_heart <1521215732@qq.com> Date: Fri, 27 Dec 2019 10:28:11 +0800 Subject: [PATCH 5/6] remove Copyright --- .../submitted/annotion_many_one_add_resultmapid/RoleDao.java | 3 --- .../submitted/annotion_many_one_add_resultmapid/UserDao.java | 3 --- 2 files changed, 6 deletions(-) diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java index ccb5b756078..01c26355749 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java @@ -1,6 +1,3 @@ -/** - * Copyright (c) 2019 ucsmy.com, All rights reserved. - */ package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; import org.apache.ibatis.annotations.Result; diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java index 00a9012b956..af09e96ed4e 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java @@ -1,6 +1,3 @@ -/** - * Copyright (c) 2019 ucsmy.com, All rights reserved. - */ package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; import org.apache.ibatis.annotations.*; From dd8d87ebbabcaf36e92012aa8ef27132d7add108 Mon Sep 17 00:00:00 2001 From: Iwao AVE! Date: Sat, 28 Dec 2019 02:19:07 +0900 Subject: [PATCH 6/6] Polishing - Applied formatter. - Renamed tests to clarify intention. - Removed redundant comments. - Added license headers. --- .../org/apache/ibatis/annotations/Many.java | 5 +- .../org/apache/ibatis/annotations/One.java | 5 +- .../CreateDB.sql | 16 +++ .../MyBatisTest.java | 77 ------------ .../OneManyResultMapTest.java | 93 ++++++++++++++ .../Role.java | 25 +++- .../RoleDao.java | 33 +++-- .../RoleDao.xml | 27 ++++- .../SqlMapConfig.xml | 32 ++++- .../User.java | 30 +++-- .../UserDao.java | 114 +++++++++--------- 11 files changed, 286 insertions(+), 171 deletions(-) delete mode 100644 src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java create mode 100644 src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/OneManyResultMapTest.java diff --git a/src/main/java/org/apache/ibatis/annotations/Many.java b/src/main/java/org/apache/ibatis/annotations/Many.java index f09aafbd80b..564809a0870 100644 --- a/src/main/java/org/apache/ibatis/annotations/Many.java +++ b/src/main/java/org/apache/ibatis/annotations/Many.java @@ -34,11 +34,12 @@ @Target({}) public @interface Many { /** - * Returns the id that retrieves result map. + * Returns the result map id used to map collection. * - * @return the id that retrieves result map. + * @return the result map id */ String resultMap() default ""; + /** * Returns the statement id that retrieves collection. * diff --git a/src/main/java/org/apache/ibatis/annotations/One.java b/src/main/java/org/apache/ibatis/annotations/One.java index ff6d12b1c4c..e2b27143f93 100644 --- a/src/main/java/org/apache/ibatis/annotations/One.java +++ b/src/main/java/org/apache/ibatis/annotations/One.java @@ -34,11 +34,12 @@ @Target({}) public @interface One { /** - * Returns the id that retrieves result map. + * Returns the result map id used to map single object. * - * @return the id that retrieves result map. + * @return the result map id */ String resultMap() default ""; + /** * Returns the statement id that retrieves single object. * diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql index 060a9035238..c6841bdbc0d 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql @@ -1,3 +1,19 @@ +-- +-- Copyright 2009-2019 the original author or authors. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + -- ---------------------------- -- Table structure for role -- ---------------------------- diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java deleted file mode 100644 index 8cd9d3cdd92..00000000000 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/MyBatisTest.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; - -import org.apache.ibatis.BaseDataTest; -import org.apache.ibatis.io.Resources; -import org.apache.ibatis.session.SqlSession; -import org.apache.ibatis.session.SqlSessionFactory; -import org.apache.ibatis.session.SqlSessionFactoryBuilder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.io.Reader; -import java.util.List; - -class MyBatisTest { - - private static SqlSessionFactory sqlSessionFactory; - - @BeforeAll - static void setUp() throws Exception { - // create an SqlSessionFactory - try (Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml")) { - sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); - } - - // populate in-memory database - BaseDataTest.runScript(sqlSessionFactory.getConfiguration().getEnvironment().getDataSource(), - "org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql"); - } - - @Test - void testFindAll() { - try (SqlSession sqlSession = sqlSessionFactory.openSession()){ - UserDao mapper = sqlSession.getMapper(UserDao.class); - List users = mapper.findAll(); - Assertions.assertNotNull(users, "users must not be null"); - Assertions.assertEquals(4, users.size(), "should return 4 results"); - Assertions.assertEquals(2, users.get(0).getRoles().size(), "should have 2 roles"); - } - } - - @Test - void testFindAll2() { - try (SqlSession sqlSession = sqlSessionFactory.openSession()){ - UserDao mapper = sqlSession.getMapper(UserDao.class); - List users = mapper.findAll2(); - Assertions.assertNotNull(users, "users must not be null"); - Assertions.assertEquals(4, users.size(), "should return 4 results"); - Assertions.assertEquals(2, users.get(0).getRoles().size(), "should have 2 roles"); - } - } - - @Test - void testFindAll3() { - try (SqlSession sqlSession = sqlSessionFactory.openSession()){ - UserDao mapper = sqlSession.getMapper(UserDao.class); - List users = mapper.findAll3(); - Assertions.assertNotNull(users, "users must not be null"); - Assertions.assertEquals(2, users.size(), "should return 2 results"); - Assertions.assertNotNull(users.get(0).getRole(), "role must not be null"); - Assertions.assertEquals("teacher", users.get(0).getRole().getRoleName(), "roleName should be teacher"); - } - } - - - @Test - void testFindHeadmaster() { - try (SqlSession sqlSession = sqlSessionFactory.openSession()){ - UserDao mapper = sqlSession.getMapper(UserDao.class); - User headmaster = mapper.findHeadmaster(); - Assertions.assertNotNull(headmaster, "users must not be null"); - Assertions.assertEquals(3, headmaster.getTeachers().size(), "should return 3 results"); - Assertions.assertEquals("Doug Lea", headmaster.getTeachers().get(0).getUsername(), "userName should be lisi"); - } - } - -} diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/OneManyResultMapTest.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/OneManyResultMapTest.java new file mode 100644 index 00000000000..623f9876d8c --- /dev/null +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/OneManyResultMapTest.java @@ -0,0 +1,93 @@ +/** + * Copyright 2009-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; + +import org.apache.ibatis.BaseDataTest; +import org.apache.ibatis.io.Resources; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.session.SqlSessionFactoryBuilder; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.Reader; +import java.util.List; + +class OneManyResultMapTest { + + private static SqlSessionFactory sqlSessionFactory; + + @BeforeAll + static void setUp() throws Exception { + // create an SqlSessionFactory + try (Reader reader = Resources + .getResourceAsReader("org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml")) { + sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); + } + + // populate in-memory database + BaseDataTest.runScript(sqlSessionFactory.getConfiguration().getEnvironment().getDataSource(), + "org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/CreateDB.sql"); + } + + @Test + void shouldUseResultMapWithMany() { + try (SqlSession sqlSession = sqlSessionFactory.openSession()) { + UserDao mapper = sqlSession.getMapper(UserDao.class); + List users = mapper.findAll(); + assertNotNull(users); + assertEquals(4, users.size()); + assertEquals(2, users.get(0).getRoles().size()); + } + } + + @Test + void shouldUseResultMapInXmlWithMany() { + try (SqlSession sqlSession = sqlSessionFactory.openSession()) { + UserDao mapper = sqlSession.getMapper(UserDao.class); + List users = mapper.findAll2(); + assertNotNull(users); + assertEquals(4, users.size()); + assertEquals(2, users.get(0).getRoles().size()); + } + } + + @Test + void shouldUseResultMapWithOne() { + try (SqlSession sqlSession = sqlSessionFactory.openSession()) { + UserDao mapper = sqlSession.getMapper(UserDao.class); + List users = mapper.findAll3(); + assertNotNull(users); + assertEquals(2, users.size()); + assertNotNull(users.get(0).getRole()); + assertEquals("teacher", users.get(0).getRole().getRoleName()); + } + } + + @Test + void shouldResolveResultMapInTheSameNamespace() { + try (SqlSession sqlSession = sqlSessionFactory.openSession()) { + UserDao mapper = sqlSession.getMapper(UserDao.class); + User headmaster = mapper.findHeadmaster(); + assertNotNull(headmaster); + assertEquals(3, headmaster.getTeachers().size()); + assertEquals("Doug Lea", headmaster.getTeachers().get(0).getUsername()); + } + } + +} diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/Role.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/Role.java index 2aec879eb69..8cfd2eb091f 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/Role.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/Role.java @@ -1,17 +1,32 @@ +/** + * Copyright 2009-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; public class Role { - private Integer id; //int + private Integer id; @Override public String toString() { return "Role{" + - "id=" + id + - ", roleName='" + roleName + '\'' + - '}'; + "id=" + id + + ", roleName='" + roleName + '\'' + + '}'; } - private String roleName;//varchar + private String roleName; public Integer getId() { return id; diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java index 01c26355749..dbed8568347 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.java @@ -1,3 +1,18 @@ +/** + * Copyright 2009-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; import org.apache.ibatis.annotations.Result; @@ -7,21 +22,13 @@ import java.util.List; /** - * @Description: - * @Author: lvyang - * @Created Date: 2019年12月10日 - * @LastModifyDate: - * @LastModifyBy: - * @Version: + * @author lvyang */ public interface RoleDao { @Select("select * from role") - @Results( - id="roleMap1", - value = { - @Result(id = true,column="role_id",property = "id"), - @Result(column="role_name",property = "roleName") - } - ) + @Results(id = "roleMap1", value = { + @Result(id = true, column = "role_id", property = "id"), + @Result(column = "role_name", property = "roleName") + }) public List findAll(); } diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.xml b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.xml index 1ffe77395d2..3b748d6afa2 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.xml +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/RoleDao.xml @@ -1,10 +1,29 @@ + - - - - + + + + diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml index 6f5f46a22c7..277b1872fe8 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/SqlMapConfig.xml @@ -1,21 +1,41 @@ + - + - + - - - - + + + + diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java index f2d4b066cd6..835bca7a612 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/User.java @@ -1,11 +1,25 @@ +/** + * Copyright 2009-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; - import java.util.List; public class User { - private Integer id; //int - private String username; //varchar + private Integer id; + private String username; private List teachers; private Role role; private List roles; @@ -18,14 +32,13 @@ public void setRole(Role role) { this.role = role; } - @Override public String toString() { return "User{" + - "id=" + id + - ", username='" + username + '\'' + - ", roles=" + roles + - '}'; + "id=" + id + + ", username='" + username + '\'' + + ", roles=" + roles + + '}'; } public Integer getId() { @@ -51,6 +64,7 @@ public List getRoles() { public void setRoles(List roles) { this.roles = roles; } + public List getTeachers() { return teachers; } diff --git a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java index af09e96ed4e..af3266771e7 100644 --- a/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java +++ b/src/test/java/org/apache/ibatis/submitted/annotion_many_one_add_resultmapid/UserDao.java @@ -1,3 +1,18 @@ +/** + * Copyright 2009-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.apache.ibatis.submitted.annotion_many_one_add_resultmapid; import org.apache.ibatis.annotations.*; @@ -5,73 +20,64 @@ import java.util.List; /** - * @Description: - * @Author: lvyang - * @Created Date: 2019年12月10日 - * @LastModifyDate: - * @LastModifyBy: - * @Version: + * @author lvyang */ public interface UserDao { - @Select("select\n" + - " u.id,u.username,r.id role_id,r.role_name\n" + - " from user u\n" + - " left join user_role ur on u.id =ur.user_id\n" + - " left join role r on ur.role_id = r.id") - @Results({ - @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_resultmapid.RoleDao.roleMap1")) - }) - public List findAll(); + @Select({ "select", + " u.id, u.username, r.id role_id, r.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" }) + @Results({ + @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_resultmapid.RoleDao.roleMap1")) + }) + public List findAll(); - @Select("select\n" + - " u.id,u.username,r.id role_id,r.role_name\n" + - " from user u\n" + - " left join user_role ur on u.id =ur.user_id\n" + - " left join role r on ur.role_id = r.id") + @Select({ "select", + " u.id, u.username, r.id role_id, r.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" }) @Results({ - @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_resultmapid.RoleDao.roleMap2")) + @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_resultmapid.RoleDao.roleMap2")) }) public List findAll2(); - @Select("select\n" + - " u.id,u.username,r.id role_id,r.role_name\n" + - " from user u\n" + - " left join user_role ur on u.id =ur.user_id\n" + - " left join role r on ur.role_id = r.id where u.id in (2,3)") - @Results( - { - @Result(id = true,column="id",property = "id"), - @Result(column="username",property = "username"), - @Result(property = "role",one = @One(resultMap = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")) + @Select({ "select", + " u.id, u.username, r.id role_id, r.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 where u.id in (2, 3)" }) + @Results({ + @Result(id = true, column = "id", property = "id"), + @Result(column = "username", property = "username"), + @Result(property = "role", one = @One(resultMap = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")) }) public List findAll3(); - @Select("select id teacher_id,username teacher_name from user") - @Results( - id = "userMap", - value = { - @Result(id = true,column="teacher_id",property = "id"), - @Result(column="teacher_name",property = "username"), + @Select("select id teacher_id, username teacher_name from user") + @Results(id = "userMap", value = { + @Result(id = true, column = "teacher_id", property = "id"), + @Result(column = "teacher_name", property = "username") }) public List justUseResult(); - @Select("select\n" + - "u.id,u.username,r.id role_id,r.role_name,ut.id teacher_id,ut.username teacher_name\n" + - "from user u\n" + - "left join user_role ur on u.id =ur.user_id\n" + - "left join role r on ur.role_id = r.id\n" + - "left join user ut on ut.id != u.id\n" + - "where role_id = 3" - ) + @Select({ "select", + "u.id, u.username, r.id role_id, r.role_name, ut.id teacher_id, ut.username teacher_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 ut on ut.id != u.id", + "where role_id = 3" }) @Results({ - @Result(id = true,column="id",property = "id"), - @Result(column="username",property = "username"), - @Result(property = "role",one = @One(resultMap = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")), - @Result(property = "teachers",many = @Many(resultMap = "userMap")), - }) + @Result(id = true, column = "id", property = "id"), + @Result(column = "username", property = "username"), + @Result(property = "role", one = @One(resultMap = "org.apache.ibatis.submitted.annotion_many_one_add_resultmapid.RoleDao.roleMap2")), + @Result(property = "teachers", many = @Many(resultMap = "userMap")) + }) public User findHeadmaster(); }