经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
Mybatis结果集映射一对多简单入门教程
来源:jb51  时间:2021/6/21 16:10:05  对本文有异议

Mybatis 一对多 简单入门 易懂

搭建数据库环境

student 表

  1. DROP TABLE IF EXISTS `student_2`;
  2. CREATE TABLE `student_2` (
  3. `id` int(10) NOT NULL,
  4. `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  5. `tid` int(10) NULL DEFAULT NULL,
  6. PRIMARY KEY (`id`) USING BTREE,
  7. INDEX `fktid`(`tid`) USING BTREE,
  8. CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
  9. ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  10.  
  11. INSERT INTO `student_2` VALUES (1, '小明', 1);
  12. INSERT INTO `student_2` VALUES (2, '邱ss', 2);
  13. INSERT INTO `student_2` VALUES (3, '邱大哥', 3);
  14. INSERT INTO `student_2` VALUES (4, '杨大哥', 1);
  15. INSERT INTO `student_2` VALUES (5, '杨ss', 2);

teacher

  1. DROP TABLE IF EXISTS `teacher`;
  2. CREATE TABLE `teacher` (
  3. `id` int(10) NOT NULL AUTO_INCREMENT,
  4. `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  5. PRIMARY KEY (`id`) USING BTREE
  6. ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
  7.  
  8. -- ----------------------------
  9. -- Records of teacher
  10. -- ----------------------------
  11. INSERT INTO `teacher` VALUES (1, '小王老师');
  12. INSERT INTO `teacher` VALUES (2, '小李老师');
  13. INSERT INTO `teacher` VALUES (3, '小黑老师');

idea 搭建maven 项目 (mybatis-demo)

项目结构

在这里插入图片描述

导入依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <version>5.1.48</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.projectlombok</groupId>
  9. <artifactId>lombok</artifactId>
  10. <version>1.18.20</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.mybatis</groupId>
  14. <artifactId>mybatis</artifactId>
  15. <version>3.5.6</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>junit</groupId>
  19. <artifactId>junit</artifactId>
  20. <version>4.11</version>
  21. <scope>test</scope>
  22. </dependency>
  23. </dependencies>

mysql 配置文件

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/ssm-study?useSSL=false
  3. jdbc.username=root
  4. jdbc.password=123456

创建pojo 类

学生

  1. /**
  2. * @Author: crush
  3. * @Date: 2021-06-17 18:23
  4. * version 1.0
  5. */
  6. public class Student {
  7. /**
  8. * 学生id
  9. */
  10. private Integer id;
  11. /**
  12. * xueshneg xingming
  13. */
  14. private String name;
  15. /**
  16. * 老师id
  17. */
  18. private Integer tid;
  19. }

老师

  1. /**
  2. * @Author: crush
  3. * @Date: 2021-06-17 18:23
  4. * version 1.0
  5. */
  6. public class Teacher {
  7. /**
  8. * 老师id
  9. */
  10. private Integer id;
  11. /**
  12. * 老师的姓名
  13. */
  14. private String name;
  15.  
  16. /**
  17. * 每个老师是不是有很多学生
  18. */
  19. private List<Student> students;
  20. }

写一个mybatis 的工具类

  1. /**
  2. * @author crush
  3. */
  4. public class MybatisUtil {
  5.  
  6. private static SqlSessionFactory sqlSessionFactory;
  7.  
  8. static {
  9. try {
  10. String resource="mybatis-config.xml";
  11. InputStream inputStream= Resources.getResourceAsStream(resource);
  12. sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
  13. } catch (IOException e) {
  14. e.printStackTrace();
  15. }
  16. }
  17.  
  18. public static SqlSession getSession(){
  19. return sqlSessionFactory.openSession(true);
  20. }
  21. }

写一个TeacherMapper

  1. import com.crush.pojo.Teacher;
  2. import org.apache.ibatis.annotations.Param;
  3.  
  4. import java.util.List;
  5.  
  6. public interface TeacherMapper {
  7.  
  8. // 获取老师
  9. List<Teacher> getTeacher();
  10.  
  11. //获取指定老师下的所有学生及老师的信息
  12. Teacher getTeacher2(@Param("tid") Integer id);
  13.  
  14.  
  15. //获取指定老师下的所有学生及老师的信息
  16. Teacher getTeacher3(@Param("tid") Integer id);
  17.  
  18. }

写一个TeacherMapper.xml文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.crush.dao.TeacherMapper">
  6.  
  7.  
  8. <select id="getTeacher" resultType="Teacher">
  9. select * from teacher
  10. </select>
  11.  
  12. <select id="getTeacher2" resultMap="TeacherStudent">
  13. select s.id sid,s.name sname,t.name tname,
  14. t.id tid from student_2 s,teacher t where s.tid=t.id and t.id=#{tid}
  15. </select>
  16.  
  17. <resultMap id="TeacherStudent" type="Teacher">
  18. <result property="id" column="tid"/>
  19. <result property="name" column="tname"/>
  20. <!--
  21. 复杂的属性,我们需要单独处理 对象 association 集合collection
  22. javaType ="" 是指属性的类型
  23. 集合中的泛型的信息 我们使用ofType 获取
  24. -->
  25. <collection property="students" ofType="Student">
  26. <result property="id" column="sid"/>
  27. <result property="name" column="sname"/>
  28. <result property="tid" column="tid"/>
  29. </collection>
  30. </resultMap>
  31.  
  32. <!--========================= 结果集映射=============================-->
  33. <select id="getTeacher3" resultMap="TeacherStudent3">
  34. select * from teacher where id=#{tid}
  35. </select>
  36. <resultMap id="TeacherStudent3" type="Teacher">
  37. <collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id" />
  38. </resultMap>
  39.  
  40. <select id="getStudentByTeacherId" resultType="Student">
  41. select * from student_2 where tid=#{tid}
  42. </select>
  43.  
  44. </mapper>

mybatis-config.xml 文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <!--属性-->
  6. <properties resource="dbconfig.properties"/>
  7.  
  8. <!--设置-->
  9. <settings>
  10. <!-- STDOUT_LOGGING 打印到控制台 -->
  11. <setting name="logImpl" value="STDOUT_LOGGING"/>
  12. <!-- 开启驼峰 -->
  13. <setting name="mapUnderscoreToCamelCase" value="true"/>
  14. </settings>
  15.  
  16. <!--别名-->
  17. <typeAliases>
  18. <!--这是 自己 取别名-->
  19. <typeAlias alias="Student" type="com.crush.pojo.Student"/>
  20. <typeAlias alias="Teacher" type="com.crush.pojo.Teacher"/>
  21. </typeAliases>
  22.  
  23. <environments default="development">
  24. <environment id="development">
  25. <transactionManager type="JDBC"></transactionManager>
  26. <dataSource type="POOLED">
  27. <property name="driver" value="${jdbc.driver}"/>
  28. <property name="url" value="${jdbc.url}"/>
  29. <property name="username" value="${jdbc.username}"/>
  30. <property name="password" value="${jdbc.password}"/>
  31. </dataSource>
  32. </environment>
  33. </environments>
  34.  
  35. <mappers>
  36. <mapper resource="mapper/StudentMapper.xml"/>
  37. <mapper resource="mapper/TeacherMapper.xml"/>
  38. </mappers>
  39. </configuration>

测试:

  1. /**
  2. * @Author: crush
  3. * @Date: 2021-06-17 18:22
  4. * version 1.0
  5. */
  6. public class MyTest {
  7.  
  8. @Test
  9. public void getTeacher(){
  10. SqlSession session = MybatisUtil.getSession();
  11.  
  12. TeacherMapper mapper = session.getMapper(TeacherMapper.class);
  13.  
  14. List<Teacher> teacher = mapper.getTeacher();
  15.  
  16. System.out.println(teacher);
  17.  
  18. session.close();
  19. }
  20.  
  21. @Test
  22. public void getTeacher2(){
  23. SqlSession session = MybatisUtil.getSession();
  24. TeacherMapper mapper = session.getMapper(TeacherMapper.class);
  25.  
  26. Teacher teacher2 = mapper.getTeacher2(1);
  27. System.out.println(teacher2);
  28. session.close();
  29. }
  30.  
  31. @Test
  32. public void getTeacher3(){
  33. SqlSession session = MybatisUtil.getSession();
  34. TeacherMapper mapper = session.getMapper(TeacherMapper.class);
  35. Teacher teacher2 = mapper.getTeacher3(1);
  36. System.out.println(teacher2);
  37. session.close();
  38. }
  39. }

以上就是Mybatis结果集映射一对多 的详细内容,更多关于Mybatis结果集映射的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号