表1:student
字段:id name age表2:book
字段:id student_id bookname表3:grade
字段:id student_id math_grade phy_gradestudentbean{ private String id,
 private String name,
 private List<String> booknames,
 private List<gradebean> grades}bookbean{
 private int math_grade,
 private int phy_grade
}其中,表2,表3通过各自student_id,关联表1,表1中一条记录,可能在表2和3有0到多条记录,如何实现将数据库中的这3个表的数据查询封装到一个 元素类型为studentbean的list中?采用什么样的实现方式性能可能更高一些?(采用ibatis) 

解决方案 »

  1.   

    表1左连接表2,表3,一次查询出结果,然后处理结果封装成list<studentbean>吗?
      

  2.   

    思路这样,但查出来的结果应该是一个Map构成的List,所以你估计要循环构造studentbean,不知可行不?
      

  3.   

    我现在的做法是表1左连接表2,3查询,返回的结果list里的每个元用一个新bean接收,这个bean里booknames和grades是作为单独的string属性,然后再处理这个结果集,构造成元素是studentbean的list,这样处理有一个问题是如果数据量太大,那for循环可能会占用比较高的内存,现在的做法不知道是不是跟你的思路一致,不知道理解是不是正确?
      

  4.   

    lz这是hibernate的思路吧如果非要用ibatis   可以用三个查询  吧学生信息、学生grade信息、学生book信息查出来   手动放到一个studentbean里
      

  5.   

    是用3个查询,分别查出student,book,grade,然后循环把book,grade放到对应的student里吗?如果这样的话,首先返回的是3个list,那放book或者grade,是不是都得用嵌套的循环,先遍历book的list,然后内层遍历student的list,判断booklist的每个元素应该放到studentlist的那个元素里。如果是我理解的这样的话,那可能循环的最大次数应该比查一次,处理一个list的循环次数大,不知道理解的对不对
      

  6.   

    这样定义你的ResuleMap<typeAlias="studentBean" type="XXXXXX.studentbean">
    <resultMap class="studentBean" id="studentBeanMap">
        <result property="id" column="id" nullValue="0" />
        <result property="name" column="name" nullValue="" />
        <result property="booknames" column="id" select="getBookNameInfo" />
        <result property="grades" column="id" select="getGradesInfo" />
    </resultMap>
    <!--你的主查询 -->
    <select id="getStudentInfo" parameterClass="" resultMap="studentBeanMap">
        select id, name ,age form student
    </select>
    <!-- 查询book info -->
    <select id="getBookNameInfo" parameterClass="long" resultMap="bookBeanMap">
        select * from bookinfo where studentid=#id#
    </select>
    好啦。。这样就可以了,,楼主看看吧...
      

  7.   

    定义三个实体student book grade  对应配三个resultMap  
    比如查出某个学生的信息,  student  list<book>  list<grede>   然后直接放进studentBean
      

  8.   

    这种方式,如果有student表有N条记录,那是不是实际是执行N次查询查book表,再执行N次查询查grade表?
      

  9.   

    是对每一个student单独查询book和grade?不是3次查询,分别查询返回所有的student的list,book的list,grade的list,然后在程序中循环把booklist和gradelist里的元素放到studentlist里对应的元素下面吗?
      

  10.   


    但是需要引入cglib-nodep-2.2.2.jar 这个包
      

  11.   

    这种方式,如果有student表有N条记录,那是不是实际要执行N次查询查book表,执行N次查询查grade表?
      

  12.   

     <result property="grades" column="id" select="getGradesInfo">
    我就是这么实现的
      

  13.   

    这种方式,如果有student表有N条记录,那是不是实际要执行N次查询查book表,执行N次查询查grade表?
      

  14.   


    -对于这个问题, 你只要把程序的DEBUG日志打出来, 看哈程序执行过程中的SQL不就一清二楚了吗? 要有探索精神哦,楼主...