Mybatis Ibatis 嵌套查询XML配置怎么理解
<resultMapid=”blogResult”type=”Blog”><collectionproperty="posts"javaType=”ArrayList”c...
<resultMap id=”blogResult” type=”Blog”>
<collection property="posts" javaType=”ArrayList” column="blog_id"
ofType="Post" select=”selectPostsForBlog”/>
</resultMap>
<select id=”selectBlog” parameterType=”int” resultMap=”blogResult”>
SELECT * FROM BLOG WHERE ID = #{id}
</select>
<select id=”selectPostsForBlog” parameterType=”int” resultType="Post">
SELECT * FROM POST WHERE BLOG_ID = #{id}
</select>
我知道肯定是有一张BLOG 博客表(类似有字段id),一张POST文章表(类似有字段id,bid),而且Java类中Blog类中肯定有个post的list的,但我有几个疑问.
selectPostsForBlog中的#{id}的值就是selectBlog的中 #{id}吗?
selectPostsForBlog中resultType="Post"返回的不是一个list为什么这里只写Post?
blogResult中的column="blog_id"为什么这么写,为什么通过BLOG表中的Id这样一写,到底怎么理解?
第二个问题:SELECT * FROM POST WHERE BLOG_ID = #{id}照道理会返回很多条记录(很多post的blog_id都是#{id}),selectPostsForBlog中resultType="Post"中只是Post?
第三个问题,换个说法现在又教师表T(t_id,t_name)和学生表S(s_id,s_name,s_t_id);教师类里有个List<Student> students,
<collection property="students" javaType=”ArrayList” column=""
ofType="Student" select=”selectStudentsForTeacher”/>
</resultMap>
那么column该怎么写,是写t_id,还是s_t_id?写了又什么用呢,
SELECT * FROM Student WHERE s_t_id= #{id}这句话会用到吗? 展开
<collection property="posts" javaType=”ArrayList” column="blog_id"
ofType="Post" select=”selectPostsForBlog”/>
</resultMap>
<select id=”selectBlog” parameterType=”int” resultMap=”blogResult”>
SELECT * FROM BLOG WHERE ID = #{id}
</select>
<select id=”selectPostsForBlog” parameterType=”int” resultType="Post">
SELECT * FROM POST WHERE BLOG_ID = #{id}
</select>
我知道肯定是有一张BLOG 博客表(类似有字段id),一张POST文章表(类似有字段id,bid),而且Java类中Blog类中肯定有个post的list的,但我有几个疑问.
selectPostsForBlog中的#{id}的值就是selectBlog的中 #{id}吗?
selectPostsForBlog中resultType="Post"返回的不是一个list为什么这里只写Post?
blogResult中的column="blog_id"为什么这么写,为什么通过BLOG表中的Id这样一写,到底怎么理解?
第二个问题:SELECT * FROM POST WHERE BLOG_ID = #{id}照道理会返回很多条记录(很多post的blog_id都是#{id}),selectPostsForBlog中resultType="Post"中只是Post?
第三个问题,换个说法现在又教师表T(t_id,t_name)和学生表S(s_id,s_name,s_t_id);教师类里有个List<Student> students,
<collection property="students" javaType=”ArrayList” column=""
ofType="Student" select=”selectStudentsForTeacher”/>
</resultMap>
那么column该怎么写,是写t_id,还是s_t_id?写了又什么用呢,
SELECT * FROM Student WHERE s_t_id= #{id}这句话会用到吗? 展开
3个回答
展开全部
这个区别不是很大,最主要的区别就是mybatis简化了编码的过程,不需要去写dao的实现类,直接写一个dao的接口,再写一个xml配置文件,整个mybatis就配置好了,也就是数据库就连接好了,然后在service里面直接调用dao就可以了,但是ibatis则不可以,必须要写dao的实现类,再写个return getSqlMapClientTemplate().queryForList()神马的,mybatis是ibatis的升级版本。还有些区
别就是xml里面的sql语句的写法有些小变化,但是不大。
Mybatis 实现了接口绑定,使用更加方便。
在ibatis2.x中需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动生成接口的具体实现,使用起来变得更加省事和方便。这可以说是Mybatis最重要的改进。
别就是xml里面的sql语句的写法有些小变化,但是不大。
Mybatis 实现了接口绑定,使用更加方便。
在ibatis2.x中需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动生成接口的具体实现,使用起来变得更加省事和方便。这可以说是Mybatis最重要的改进。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
selectPostsForBlog中的#{id}的值就是selectBlog的中 #{id}吗?
这个id是你java调用查询时候传递过来的参数
只是用了相同的标识,两者没有联系,你可以修改java代码改成ids,然后这里修改成ids也行
2.selectPostsForBlog中resultType="Post"返回的不是一个list为什么这里只写Post?
这意思是直接返回的是一个Post对象,不是返回list
3.blogResult中的column="blog_id"为什么这么写,为什么通过BLOG表中的Id这样一写。
这个是根据你数据库字段来的,你这两个表的字段应该定义的不一样。
这都是很基础的问题.......
更多追问追答
追问
这里字打不下,放在补充问题里了,帮我看看。
追答
第二个问题:SELECT * FROM POST WHERE BLOG_ID = #{id}照道理会返回很多条记录(很多post的blog_id都是#{id}),selectPostsForBlog中resultType="Post"中只是Post?
你学过数据库么???? 都按照主键id查询了,怎么可能会有多条记录的呢?
第三个问题
column根据你自己需要配,一般都是主键
写了有什么用? 呵呵,你开发干啥用那写了就有啥用。
select=”selectStudentsForTeacher”/> 会用到这个select语句
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询