ibatis,web开发查询求助!!!!!!!

qianxinxuejishu 2013-03-22 09:43:50
表1:student
字段:id name age

表2:book
字段:id student_id bookname

表3:grade
字段:id student_id math_grade phy_grade

studentbean{

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)
...全文
174 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianxinxuejishu 2013-03-23
  • 打赏
  • 举报
回复
引用 19 楼 AndyXuq 的回复:
引用 12 楼 qianxinxuejishu 的回复: 引用 10 楼 AndyXuq 的回复:这样定义你的ResuleMap XML/HTML code ? 12345678910111213141516 <typeAlias="studentBean" type="XXXXXX.studentbean"> <resultMap class="studentB……
哈哈,看过一个资料,上面写的这样的方式会产生N+1次查询,但怎么解决作者来了句暂时没有想到
AndyXuq 2013-03-23
  • 打赏
  • 举报
回复
引用 12 楼 qianxinxuejishu 的回复:
引用 10 楼 AndyXuq 的回复:这样定义你的ResuleMap XML/HTML code ? 12345678910111213141516 <typeAlias="studentBean" type="XXXXXX.studentbean"> <resultMap class="studentBean" id="studentB……
-对于这个问题, 你只要把程序的DEBUG日志打出来, 看哈程序执行过程中的SQL不就一清二楚了吗? 要有探索精神哦,楼主...
tianma630 2013-03-22
  • 打赏
  • 举报
回复
lz这是hibernate的思路吧 如果非要用ibatis 可以用三个查询 吧学生信息、学生grade信息、学生book信息查出来 手动放到一个studentbean里
qianxinxuejishu 2013-03-22
  • 打赏
  • 举报
回复
引用 6 楼 splendid_java 的回复:
O,基本一样,不过查库没必要一下查那么多,消耗不会很大
恩,非常感谢,现在如果分页查询一部分数据,对内存影响不大,但存在一种情况就是要查出所有数据来,现在想有高人指点
ZHOU西口 2013-03-22
  • 打赏
  • 举报
回复
O,基本一样,不过查库没必要一下查那么多,消耗不会很大
qianxinxuejishu 2013-03-22
  • 打赏
  • 举报
回复
引用 4 楼 splendid_java 的回复:
思路这样,但查出来的结果应该是一个Map构成的List,所以你估计要循环构造studentbean,不知可行不?
我现在的做法是表1左连接表2,3查询,返回的结果list里的每个元用一个新bean接收,这个bean里booknames和grades是作为单独的string属性,然后再处理这个结果集,构造成元素是studentbean的list,这样处理有一个问题是如果数据量太大,那for循环可能会占用比较高的内存,现在的做法不知道是不是跟你的思路一致,不知道理解是不是正确?
ZHOU西口 2013-03-22
  • 打赏
  • 举报
回复
思路这样,但查出来的结果应该是一个Map构成的List,所以你估计要循环构造studentbean,不知可行不?
qianxinxuejishu 2013-03-22
  • 打赏
  • 举报
回复
引用 2 楼 splendid_java 的回复:
给个思路,可以采用3表联查。。。
表1左连接表2,表3,一次查询出结果,然后处理结果封装成list<studentbean>吗?
ZHOU西口 2013-03-22
  • 打赏
  • 举报
回复
给个思路,可以采用3表联查。。。
qianxinxuejishu 2013-03-22
  • 打赏
  • 举报
回复
没人指点
qianxinxuejishu 2013-03-22
  • 打赏
  • 举报
回复
引用 17 楼 sunjianbo1126 的回复:
<result property="grades" column="id" select="getGradesInfo"> 我就是这么实现的
这种方式,如果有student表有N条记录,那是不是实际要执行N次查询查book表,执行N次查询查grade表?
sunjianbo1126 2013-03-22
  • 打赏
  • 举报
回复
<result property="grades" column="id" select="getGradesInfo"> 我就是这么实现的
qianxinxuejishu 2013-03-22
  • 打赏
  • 举报
回复
引用 15 楼 SDN_SUPERUSER 的回复:
引用 10 楼 AndyXuq 的回复: 这样定义你的ResuleMap XML/HTML code?123456789101112131415<typeAlias="studentBean" type="XXXXXX.studentbean"><resultMap class="studentBean" id="studentBeanMap"> <result property="id……
这种方式,如果有student表有N条记录,那是不是实际要执行N次查询查book表,执行N次查询查grade表?
jackson_fighting 2013-03-22
  • 打赏
  • 举报
回复
引用 10 楼 AndyXuq 的回复:
这样定义你的ResuleMap XML/HTML code?123456789101112131415<typeAlias="studentBean" type="XXXXXX.studentbean"><resultMap class="studentBean" id="studentBeanMap"> <result property="id" column=……
但是需要引入cglib-nodep-2.2.2.jar 这个包
jackson_fighting 2013-03-22
  • 打赏
  • 举报
回复
引用 10 楼 AndyXuq 的回复:
这样定义你的ResuleMap XML/HTML code?123456789101112131415<typeAlias="studentBean" type="XXXXXX.studentbean"><resultMap class="studentBean" id="studentBeanMap"> <result property="id" column=……
这个可以!
qianxinxuejishu 2013-03-22
  • 打赏
  • 举报
回复
引用 11 楼 tianma630 的回复:
引用 9 楼 qianxinxuejishu 的回复: 引用 8 楼 tianma630 的回复:lz这是hibernate的思路吧 如果非要用ibatis 可以用三个查询 吧学生信息、学生grade信息、学生book信息查出来 手动放到一个studentbean里是用3个查询,分别查出student,book,grade,然后循环把book,grade放到对应的student里……
是对每一个student单独查询book和grade?不是3次查询,分别查询返回所有的student的list,book的list,grade的list,然后在程序中循环把booklist和gradelist里的元素放到studentlist里对应的元素下面吗?
qianxinxuejishu 2013-03-22
  • 打赏
  • 举报
回复
引用 10 楼 AndyXuq 的回复:
这样定义你的ResuleMap XML/HTML code ? 12345678910111213141516 <typeAlias="studentBean" type="XXXXXX.studentbean"> <resultMap class="studentBean" id="studentBeanMap"> <result property="id……
这种方式,如果有student表有N条记录,那是不是实际是执行N次查询查book表,再执行N次查询查grade表?
tianma630 2013-03-22
  • 打赏
  • 举报
回复
引用 9 楼 qianxinxuejishu 的回复:
引用 8 楼 tianma630 的回复:lz这是hibernate的思路吧 如果非要用ibatis 可以用三个查询 吧学生信息、学生grade信息、学生book信息查出来 手动放到一个studentbean里是用3个查询,分别查出student,book,grade,然后循环把book,grade放到对应的student里吗?如果这样的话,首先返回的是3……
定义三个实体student book grade 对应配三个resultMap 比如查出某个学生的信息, student list<book> list<grede> 然后直接放进studentBean
AndyXuq 2013-03-22
  • 打赏
  • 举报
回复
这样定义你的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>
好啦。。这样就可以了,,楼主看看吧...
qianxinxuejishu 2013-03-22
  • 打赏
  • 举报
回复
引用 8 楼 tianma630 的回复:
lz这是hibernate的思路吧 如果非要用ibatis 可以用三个查询 吧学生信息、学生grade信息、学生book信息查出来 手动放到一个studentbean里
是用3个查询,分别查出student,book,grade,然后循环把book,grade放到对应的student里吗?如果这样的话,首先返回的是3个list,那放book或者grade,是不是都得用嵌套的循环,先遍历book的list,然后内层遍历student的list,判断booklist的每个元素应该放到studentlist的那个元素里。如果是我理解的这样的话,那可能循环的最大次数应该比查一次,处理一个list的循环次数大,不知道理解的对不对

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧