{"id":1953,"date":"2021-01-25T17:10:43","date_gmt":"2021-01-25T09:10:43","guid":{"rendered":"https:\/\/www.yusian.com\/blog\/?p=1953"},"modified":"2021-01-25T17:11:36","modified_gmt":"2021-01-25T09:11:36","slug":"mybatis%e5%a4%9a%e8%a1%a8%e6%9f%a5%e8%af%a2%e5%a4%9a%e5%af%b9%e4%b8%80%e4%b8%8e%e4%b8%80%e5%af%b9%e5%a4%9a%e7%9a%84%e7%ae%80%e5%8d%95%e5%ae%9e%e7%8e%b0","status":"publish","type":"post","link":"https:\/\/www.yusian.com\/blog\/java\/2021\/01\/25\/1710431953.html","title":{"rendered":"Mybatis\u591a\u8868\u67e5\u8be2\u591a\u5bf9\u4e00\u4e0e\u4e00\u5bf9\u591a\u7684\u7b80\u5355\u5b9e\u73b0"},"content":{"rendered":"<h3>1\u3001\u6570\u636e\u5e93<\/h3>\n<blockquote><p>\n  1\u3001tab_student\n<\/p><\/blockquote>\n<table>\n<thead>\n<tr>\n<th>id<\/th>\n<th>name<\/th>\n<th>tid<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u5f20\u4e09<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u674e\u56db<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>\u738b\u4e94<\/td>\n<td>2<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>\u8d75\u516d<\/td>\n<td>2<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p>\n  2\u3001tab_teacher\n<\/p><\/blockquote>\n<table>\n<thead>\n<tr>\n<th>id<\/th>\n<th>name<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u5b59\u8001\u5e08<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u79e6\u8001\u5e08<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>2.1\u3001\u591a\u5bf9\u4e00\u6570\u636e\u67e5\u8be2<\/h3>\n<h4>2.1.1\u3001\u5b9e\u4f53\u7c7b<\/h4>\n<blockquote><p>\n  Student.java\n<\/p><\/blockquote>\n<pre><code class=\"language-java line-numbers\">package com.yusian.domain;\n\nimport lombok.Data;\n\n@Data\npublic class Student {\n    private Integer id;\n    private String name;\n    private Teacher teacher;\n}\n<\/code><\/pre>\n<blockquote><p>\n  Teacher.java\n<\/p><\/blockquote>\n<pre><code class=\"language-java line-numbers\">package com.yusian.domain;\n\nimport lombok.Data;\n\n@Data\npublic class Teacher {\n    private Integer id;\n    private String name;\n}\n<\/code><\/pre>\n<h4>2.1.2\u3001Mapper<\/h4>\n<blockquote><p>\n  StudentMapper.java\n<\/p><\/blockquote>\n<pre><code class=\"language-java line-numbers\">package com.yusian.dao;\n\nimport com.yusian.domain.Student;\nimport java.util.List;\n\npublic interface StudentMapper {\n    \/**\n     * \u83b7\u53d6\u6240\u6709\u5b66\u751f\u5217\u8868\n     * @return  \u7ed3\u679c\u96c6\u5217\u8868\n     *\/\n    List&lt;Student&gt; getStudentList();\n}\n<\/code><\/pre>\n<blockquote><p>\n  StudentMapper.xml\n<\/p><\/blockquote>\n<ul>\n<li>\u5b50\u67e5\u8be2\u65b9\u5f0f\n<pre data-language=XML><code class=\"language-markup line-numbers\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?&gt;\n&lt;!DOCTYPE mapper\n      PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\"\n      \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\"&gt;\n&lt;mapper namespace=\"com.yusian.dao.StudentMapper\"&gt;\n\n  &lt;resultMap id=\"studentMap\" type=\"com.yusian.domain.Student\"&gt;\n      &lt;id property=\"id\" column=\"id\"\/&gt;\n      &lt;result property=\"name\" column=\"name\" \/&gt;\n      &lt;association property=\"teacher\" column=\"tid\" select=\"getTeacherById\"\/&gt;\n  &lt;\/resultMap&gt;\n  &lt;select id=\"getStudentList\" resultMap=\"studentMap\"&gt;\n      select * from tab_student\n  &lt;\/select&gt;\n\n  &lt;select id=\"getTeacherById\" resultType=\"com.yusian.domain.Teacher\"&gt;\n      select * from tab_teacher where id = #{id}\n  &lt;\/select&gt;\n&lt;\/mapper&gt;\n<\/code><\/pre>\n<\/li>\n<li>\u5173\u8054\u67e5\u8be2\n<pre data-language=XML><code class=\"language-markup line-numbers\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?&gt;\n&lt;!DOCTYPE mapper\n      PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\"\n      \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\"&gt;\n&lt;mapper namespace=\"com.yusian.dao.StudentMapper\"&gt;\n  &lt;resultMap id=\"studentMap\" type=\"com.yusian.domain.Student\"&gt;\n      &lt;id property=\"id\" column=\"id\" \/&gt;\n      &lt;result property=\"name\" column=\"s_name\"\/&gt;\n      &lt;association property=\"teacher\"&gt;\n          &lt;id property=\"id\" column=\"tid\"\/&gt;\n          &lt;result property=\"name\" column=\"t_name\"\/&gt;\n      &lt;\/association&gt;\n  &lt;\/resultMap&gt;\n  &lt;select id=\"getStudentList\" resultMap=\"studentMap\"&gt;\n      select s.id as id, s.name as s_name, s.tid, t.name as t_name from tab_student s, tab_teacher t where s.tid = t.id\n  &lt;\/select&gt;\n&lt;\/mapper&gt;\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h4>2.1.3\u3001\u6d4b\u8bd5\u4ee3\u7801<\/h4>\n<pre><code class=\"language-java line-numbers\">package com.yusian.test;\n\nimport com.yusian.dao.StudentMapper;\nimport com.yusian.domain.Student;\nimport com.yusian.utils.MybatisUtils;\nimport org.apache.ibatis.session.SqlSession;\nimport org.junit.Test;\n\nimport java.util.List;\n\npublic class StudentMapperTest {\n\n    @Test\n    public void getStudentListTest() {\n        try(SqlSession sqlSession = MybatisUtils.getSqlSession()) {\n            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);\n            List&lt;Student&gt; students = mapper.getStudentList();\n            System.out.println(students);\n        }\n    }\n}\n<\/code><\/pre>\n<h4>2.1.4\u3001\u6267\u884c\u7ed3\u679c<\/h4>\n<ul>\n<li>\u5b50\u67e5\u8be2\n<pre><code class=\"language-log line-numbers\">Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nOpening JDBC Connection\nCreated connection 1991313236.\nSetting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\n==&gt;  Preparing: select * from tab_student\n==&gt; Parameters: \n&lt;==    Columns: id, name, tid\n&lt;==        Row: 1, \u5f20\u4e09, 1\n====&gt;  Preparing: select * from tab_teacher where id = ?\n====&gt; Parameters: 1(Integer)\n&lt;====    Columns: id, name\n&lt;====        Row: 1, \u5b54\u8001\u5e08\n&lt;====      Total: 1\n&lt;==        Row: 2, \u674e\u56db, 1\n&lt;==        Row: 3, \u738b\u4e94, 2\n====&gt;  Preparing: select * from tab_teacher where id = ?\n====&gt; Parameters: 2(Integer)\n&lt;====    Columns: id, name\n&lt;====        Row: 2, \u79e6\u8001\u5e08\n&lt;====      Total: 1\n&lt;==        Row: 4, \u8d75\u516d, 2\n&lt;==      Total: 4\n[Student(id=1, name=\u5f20\u4e09, teacher=Teacher(id=1, name=\u5b54\u8001\u5e08)), Student(id=2, name=\u674e\u56db, teacher=Teacher(id=1, name=\u5b54\u8001\u5e08)), Student(id=3, name=\u738b\u4e94, teacher=Teacher(id=2, name=\u79e6\u8001\u5e08)), Student(id=4, name=\u8d75\u516d, teacher=Teacher(id=2, name=\u79e6\u8001\u5e08))]\nResetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\nClosing JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\nReturned connection 1991313236 to pool.\n\nProcess finished with exit code 0\n<\/code><\/pre>\n<\/li>\n<li>\u5173\u8054\u67e5\u8be2\n<pre><code class=\"language-log line-numbers\">Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nOpening JDBC Connection\nCreated connection 1991313236.\nSetting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\n==&gt;  Preparing: select s.id as id, s.name as s_name, s.tid, t.name as t_name from tab_student s, tab_teacher t where s.tid = t.id\n==&gt; Parameters: \n&lt;==    Columns: id, s_name, tid, t_name\n&lt;==        Row: 1, \u5f20\u4e09, 1, \u5b54\u8001\u5e08\n&lt;==        Row: 2, \u674e\u56db, 1, \u5b54\u8001\u5e08\n&lt;==        Row: 3, \u738b\u4e94, 2, \u79e6\u8001\u5e08\n&lt;==        Row: 4, \u8d75\u516d, 2, \u79e6\u8001\u5e08\n&lt;==      Total: 4\n[Student(id=1, name=\u5f20\u4e09, teacher=Teacher(id=1, name=\u5b54\u8001\u5e08)), Student(id=2, name=\u674e\u56db, teacher=Teacher(id=1, name=\u5b54\u8001\u5e08)), Student(id=3, name=\u738b\u4e94, teacher=Teacher(id=2, name=\u79e6\u8001\u5e08)), Student(id=4, name=\u8d75\u516d, teacher=Teacher(id=2, name=\u79e6\u8001\u5e08))]\nResetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\nClosing JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\nReturned connection 1991313236 to pool.\n\nProcess finished with exit code 0\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3>2.2\u3001\u4e00\u5bf9\u591a\u67e5\u8be2<\/h3>\n<h4>2.2.1\u3001\u5b9e\u4f53\u7c7b<\/h4>\n<blockquote><p>\n  Student.java\n<\/p><\/blockquote>\n<pre><code class=\"language-java line-numbers\">package com.yusian.domain;\n\nimport lombok.Data;\n\n@Data\npublic class Student {\n    private Integer id;\n    private String name;\n}\n<\/code><\/pre>\n<blockquote><p>\n  Teacher.java\n<\/p><\/blockquote>\n<pre><code class=\"language-java line-numbers\">package com.yusian.domain;\n\nimport lombok.Data;\n\nimport java.util.List;\n\n@Data\npublic class Teacher {\n    private Integer id;\n    private String name;\n    List&lt;Student&gt; students;\n}\n<\/code><\/pre>\n<h4>2.2.2\u3001Mapper<\/h4>\n<blockquote><p>\n  TeacherMapper.java\n<\/p><\/blockquote>\n<pre><code class=\"language-java line-numbers\">package com.yusian.dao;\n\nimport com.yusian.domain.Teacher;\n\nimport java.util.List;\n\npublic interface TeacherMapper {\n    \/**\n     * \u83b7\u53d6\u6240\u6709\u6559\u5e08\u5217\u8868\n     * @return\n     *\/\n    List&lt;Teacher&gt; getTeacherList();\n}\n\n<\/code><\/pre>\n<blockquote><p>\n  TeacherMapper.xml\n<\/p><\/blockquote>\n<ul>\n<li>\u5b50\u67e5\u8be2\n<pre data-language=XML><code class=\"language-markup line-numbers\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?&gt;\n&lt;!DOCTYPE mapper\n      PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\"\n      \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\"&gt;\n&lt;mapper namespace=\"com.yusian.dao.TeacherMapper\"&gt;\n&lt;!--    \u5b50\u67e5\u8be2--&gt;\n  &lt;resultMap id=\"teacherMap\" type=\"com.yusian.domain.Teacher\"&gt;\n      &lt;id property=\"id\" column=\"id\"\/&gt;\n      &lt;result property=\"name\" column=\"name\"\/&gt;\n      &lt;collection property=\"students\" column=\"id\" ofType=\"com.yusian.domain.Student\" select=\"getStudentList\"&gt;\n          &lt;id property=\"id\" column=\"id\"\/&gt;\n          &lt;result property=\"name\" column=\"name\"\/&gt;\n      &lt;\/collection&gt;\n  &lt;\/resultMap&gt;\n\n  &lt;select id=\"getTeacherList\" resultMap=\"teacherMap\"&gt;\n      select * from tab_teacher\n  &lt;\/select&gt;\n\n  &lt;select id=\"getStudentList\" resultType=\"com.yusian.domain.Student\"&gt;\n      select * from tab_student where tid = #{tid}\n  &lt;\/select&gt;\n&lt;\/mapper&gt;\n<\/code><\/pre>\n<\/li>\n<li>\u5173\u8054\u67e5\u8be2\n<pre data-language=XML><code class=\"language-markup line-numbers\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?&gt;\n&lt;!DOCTYPE mapper\n      PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\"\n      \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\"&gt;\n&lt;mapper namespace=\"com.yusian.dao.TeacherMapper\"&gt;\n&lt;!--    \u5173\u8054\u67e5\u8be2--&gt;\n  &lt;resultMap id=\"teacherMap\" type=\"com.yusian.domain.Teacher\"&gt;\n      &lt;id property=\"id\" column=\"t_id\"\/&gt;\n      &lt;result property=\"name\" column=\"t_name\"\/&gt;\n      &lt;collection property=\"students\" ofType=\"com.yusian.domain.Student\"&gt;\n          &lt;id property=\"id\" column=\"s_id\"\/&gt;\n          &lt;result property=\"name\" column=\"s_name\"\/&gt;\n      &lt;\/collection&gt;\n  &lt;\/resultMap&gt;\n  &lt;select id=\"getTeacherList\" resultMap=\"teacherMap\"&gt;\n      select s.id as s_id, s.name as s_name, s.tid as s_tid, t.id as t_id, t.name as t_name\n      from tab_student s, tab_teacher t\n      where s.tid = t.id\n  &lt;\/select&gt;\n&lt;\/mapper&gt;\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h4>2.2.3\u3001\u6d4b\u8bd5\u4ee3\u7801<\/h4>\n<pre><code class=\"language-java line-numbers\">package com.yusian.test;\n\nimport com.yusian.dao.TeacherMapper;\nimport com.yusian.domain.Teacher;\nimport com.yusian.utils.MybatisUtils;\nimport org.apache.ibatis.session.SqlSession;\nimport org.junit.Test;\n\nimport java.util.List;\n\npublic class TeacherMapperTest {\n    @Test\n    public void getTeacherListTest() {\n        try (SqlSession sqlSession = MybatisUtils.getSqlSession()) {\n            TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);\n            List&lt;Teacher&gt; teachers = mapper.getTeacherList();\n            System.out.println(teachers);\n        }\n    }\n}\n<\/code><\/pre>\n<h4>2.2.4\u3001\u6267\u884c\u7ed3\u679c<\/h4>\n<ul>\n<li>\u5b50\u67e5\u8be2\n<pre><code class=\"language-log line-numbers\">Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nOpening JDBC Connection\nCreated connection 1991313236.\nSetting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\n==&gt;  Preparing: select * from tab_teacher\n==&gt; Parameters: \n&lt;==    Columns: id, name\n&lt;==        Row: 1, \u5b54\u8001\u5e08\n====&gt;  Preparing: select * from tab_student where tid = ?\n====&gt; Parameters: 1(Integer)\n&lt;====    Columns: id, name, tid\n&lt;====        Row: 1, \u5f20\u4e09, 1\n&lt;====        Row: 2, \u674e\u56db, 1\n&lt;====      Total: 2\n&lt;==        Row: 2, \u79e6\u8001\u5e08\n====&gt;  Preparing: select * from tab_student where tid = ?\n====&gt; Parameters: 2(Integer)\n&lt;====    Columns: id, name, tid\n&lt;====        Row: 3, \u738b\u4e94, 2\n&lt;====        Row: 4, \u8d75\u516d, 2\n&lt;====      Total: 2\n&lt;==      Total: 2\n[Teacher(id=1, name=\u5b54\u8001\u5e08, students=[Student(id=1, name=\u5f20\u4e09), Student(id=2, name=\u674e\u56db)]), Teacher(id=2, name=\u79e6\u8001\u5e08, students=[Student(id=3, name=\u738b\u4e94), Student(id=4, name=\u8d75\u516d)])]\nResetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\nClosing JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\nReturned connection 1991313236 to pool.\n\nProcess finished with exit code 0\n<\/code><\/pre>\n<\/li>\n<li>\u5173\u8054\u67e5\u8be2\n<pre><code class=\"language-log line-numbers\">Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nPooledDataSource forcefully closed\/removed all connections.\nOpening JDBC Connection\nCreated connection 1991313236.\nSetting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\n==&gt;  Preparing: select s.id as s_id, s.name as s_name, s.tid as s_tid, t.id as t_id, t.name as t_name from tab_student s, tab_teacher t where s.tid = t.id\n==&gt; Parameters: \n&lt;==    Columns: s_id, s_name, s_tid, t_id, t_name\n&lt;==        Row: 1, \u5f20\u4e09, 1, 1, \u5b54\u8001\u5e08\n&lt;==        Row: 2, \u674e\u56db, 1, 1, \u5b54\u8001\u5e08\n&lt;==        Row: 3, \u738b\u4e94, 2, 2, \u79e6\u8001\u5e08\n&lt;==        Row: 4, \u8d75\u516d, 2, 2, \u79e6\u8001\u5e08\n&lt;==      Total: 4\n[Teacher(id=1, name=\u5b54\u8001\u5e08, students=[Student(id=1, name=\u5f20\u4e09), Student(id=2, name=\u674e\u56db)]), Teacher(id=2, name=\u79e6\u8001\u5e08, students=[Student(id=3, name=\u738b\u4e94), Student(id=4, name=\u8d75\u516d)])]\nResetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\nClosing JDBC Connection [com.mysql.jdbc.JDBC4Connection@76b10754]\nReturned connection 1991313236 to pool.\n\nProcess finished with exit code 0\n<\/code><\/pre>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>1\u3001\u6570\u636e\u5e93 1\u3001tab_student id name tid 1 \u5f20\u4e09 1 2 \u674e\u56db 1 3 \u738b\u4e94 2 4 \u8d75\u516d 2 2\u3001tab_teacher id name 1 \u5b59\u8001\u5e08 2 \u79e6\u8001\u5e08 2.1\u3001\u591a\u5bf9\u4e00\u6570\u636e\u67e5\u8be2 2.1.1\u3001\u5b9e\u4f53\u7c7b Student.java package com.yusian.domain; import lombok.Data; @Data public class Student { private Integer id; private String name; private Teacher teacher; } Teacher.java package com.yusian.domain; import lombok.Data; @Data public class Teacher [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[344],"class_list":["post-1953","post","type-post","status-publish","format-standard","hentry","category-java","tag-mybatis"],"_links":{"self":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts\/1953","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/comments?post=1953"}],"version-history":[{"count":0,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts\/1953\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/media?parent=1953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/categories?post=1953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/tags?post=1953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}