乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Mybatis關(guān)聯(lián)查詢之一對(duì)多和多對(duì)一XML配置詳解

       甘甘灰 2018-08-03

      平時(shí)在開(kāi)發(fā)過(guò)程中dao、bean和XML文件都是自動(dòng)生成的,很少寫(xiě)XML的配置關(guān)系,今天記錄一下mybatis的關(guān)聯(lián)查詢中的多對(duì)一和一對(duì)多的情況。

      • 首先是有兩張表(學(xué)生表Student和老師Teacher表),為了更易懂,這里只設(shè)置了最簡(jiǎn)單的幾個(gè)必要字段。表結(jié)構(gòu)如下圖

      Student表:


      Teacher表:

      • 創(chuàng)建實(shí)體bean
      Teacher.java:
      1. import java.util.List;
      2. /**
      3. * TODO
      4. * @version 創(chuàng)建時(shí)間:2017年12月21日 上午9:02:45
      5. */
      6. public class Teacher {
      7. private Integer id;
      8. private String name;
      9. private String className;
      10. private List<Student> students;
      11. public List<Student> getStudents() {
      12. return students;
      13. }
      14. public void setStudents(List<Student> students) {
      15. this.students = students;
      16. }
      17. public Integer getId() {
      18. return id;
      19. }
      20. public void setId(Integer id) {
      21. this.id = id;
      22. }
      23. public String getName() {
      24. return name;
      25. }
      26. public void setName(String name) {
      27. this.name = name;
      28. }
      29. public String getClassName() {
      30. return className;
      31. }
      32. public void setClassName(String className) {
      33. this.className = className;
      34. }
      35. }

      Sfudent.java

      1. /**
      2. * TODO
      3. *
      4. * @author 作者 E-mail:2332999366@qq.com
      5. * @version 創(chuàng)建時(shí)間:2017年12月21日 上午9:01:17
      6. */
      7. public class Student {
      8. private Integer id;
      9. private String name;
      10. private Integer teacherId;
      11. private String className;
      12. private Teacher teacher;
      13. public Teacher getTeacher() {
      14. return teacher;
      15. }
      16. public void setTeacher(Teacher teacher) {
      17. this.teacher = teacher;
      18. }
      19. public Integer getId() {
      20. return id;
      21. }
      22. public void setId(Integer id) {
      23. this.id = id;
      24. }
      25. public String getName() {
      26. return name;
      27. }
      28. public void setName(String name) {
      29. this.name = name;
      30. }
      31. public Integer getTeacherId() {
      32. return teacherId;
      33. }
      34. public void setTeacherId(Integer teacherId) {
      35. this.teacherId = teacherId;
      36. }
      37. public String getClassName() {
      38. return className;
      39. }
      40. public void setClassName(String className) {
      41. this.className = className;
      42. }
      43. @Override
      44. public String toString() {
      45. return "{id:"+this.id+",name:"+this.name+",className:"+this.className+",teacherId:"+this.teacherId+"}";
      46. }
      47. }
      • 下面重點(diǎn)來(lái)了:配置Mapper.xml文件:
      1. <?xml version="1.0" encoding="UTF-8" ?>
      2. <!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "http:///dtd/mybatis-3-mapper.dtd">
      3. <mapper namespace="com.tz.mybatis.dao.studentDao">
      4. <!-- /////////////////////////////////一對(duì)多的第一種寫(xiě)法,一般考慮到性能問(wèn)題,不會(huì)這么實(shí)現(xiàn)//////////////////////// -->
      5. <resultMap type="Teacher" id="teacherMap">
      6. <id column="id" property="id"/>
      7. <result column="name" property="name"/>
      8. <collection property="students" ofType="Student" column="id">
      9. <id column="sid" property="id"/><!-- 這里的column對(duì)應(yīng)的是下面查詢的別名,而不是表字段名 -->
      10. <result column="sname" property="name"/><!-- property對(duì)應(yīng)JavaBean中的屬性名 -->
      11. <result column="className" property="className"/>
      12. </collection>
      13. </resultMap>
      14. <!-- 查詢所有的老師級(jí)各自的所有學(xué)生 -->
      15. <select id="getTeachers" parameterType="Teacher" resultMap="teacherMap">
      16. SELECT
      17. t.id,
      18. t.NAME,
      19. t.class_Name,
      20. s.id AS sid,
      21. s. NAME AS sname,
      22. s.class_name as className
      23. FROM
      24. teacher t
      25. LEFT JOIN student s ON t.id = s.teacher_id
      26. </select>
      27. </mapper>

      • 測(cè)試類:

      1. package com.tz.test;
      2. import java.io.IOException;
      3. import java.io.InputStream;
      4. import java.util.List;
      5. import org.apache.ibatis.io.Resources;
      6. import org.apache.ibatis.session.SqlSession;
      7. import org.apache.ibatis.session.SqlSessionFactory;
      8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      9. import org.junit.Before;
      10. import org.junit.Test;
      11. import com.tz.mybatis.bean.Student;
      12. import com.tz.mybatis.bean.Teacher;
      13. public class TeacherTest {
      14. private SqlSessionFactory sqlSessionFactory;
      15. @Before
      16. public void init() throws IOException {
      17. String resource = "mybatis-config.xml";
      18. InputStream inputStream = Resources.getResourceAsStream(resource);
      19. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      20. }
      21. @Test
      22. public void getTeachers() {
      23. SqlSession session = sqlSessionFactory.openSession();
      24. List<Teacher> list = session.selectList("com.tz.mybatis.dao.studentDao.getTeachers");
      25. System.out.println(list);
      26. }
      27. }

      下面給出第二種寫(xiě)法:

      1. <!-- //////////////////////////////////////////////一對(duì)多的第二種寫(xiě)法///////////////////////////////////////////////////// -->
      2. <resultMap type="Teacher" id="teacherMaps">
      3. <id column="id" property="id"/>
      4. <result column="name" property="name"/>
      5. <result column="class_name" property="className"/>
      6. <collection property="students" ofType="Student" select="getStudents" column="id">
      7. </collection>
      8. </resultMap>
      9. <!-- 查詢所有的老師級(jí)各自的所有學(xué)生 -->
      10. <select id="getAllTeacher" parameterType="Teacher" resultMap="teacherMaps">
      11. SELECT
      12. t.id,
      13. t.NAME,
      14. t.class_name
      15. FROM
      16. teacher t
      17. </select>
      18. <select id="getStudents" parameterType="int" resultType="Student">
      19. select
      20. s.id,
      21. s. NAME,
      22. s.class_name as className
      23. from student s
      24. where teacher_id = #{id}
      25. </select>

      測(cè)試類:

      1. @Test
      2. public void getTeachers2() {
      3. SqlSession session = sqlSessionFactory.openSession();
      4. List<Teacher> list = session.selectList("com.tz.mybatis.dao.studentDao.getAllTeacher");
      5. System.out.println(list);
      6. }

      查詢學(xué)生信息(多對(duì)一):

      首先還是配置文件:

      1. <resultMap type="Student" id="studentMap">
      2. <id column="id" property="id"/>
      3. <result column="name" property="name"/>
      4. <result column="class_name" property="className"/>
      5. <result column="teacher_id" property="teacherId"/>
      6. <association property="teacher" select="getTeacher" column="teacher_id" javaType="Teacher">
      7. <!-- 這里要注意的是column對(duì)應(yīng)的是student中的外鍵,而且需是表字段名 -->
      8. </association>
      9. </resultMap>
      10. <select id="getStudent" resultMap="studentMap">
      11. SELECT
      12. s.id,
      13. s.name,
      14. s.class_name,
      15. s.teacher_id
      16. FROM
      17. student s
      18. </select>
      19. <select id="getTeacher" resultType="Teacher" parameterType="int">
      20. SELECT
      21. t.id,
      22. t.name,
      23. t.class_name as className
      24. FROM teacher t
      25. where id = #{teacher_id}
      26. </select>

      測(cè)試類:

      1. @Test
      2. public void getStudents() {
      3. SqlSession session = sqlSessionFactory.openSession();
      4. List<Student> list = session.selectList("com.tz.mybatis.dao.studentDao.getStudent");
      5. System.out.println(list);
      6. }

      最后:當(dāng)然如果不想配置這么麻煩的信息,可以直接寫(xiě)一個(gè)關(guān)聯(lián)查詢的SQL語(yǔ)句,返回結(jié)果直接由Map接受即可。不過(guò)這樣就不太符合面向?qū)ο蟮睦砟盍恕?br>

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多