Mybatis Ibatis 嵌套查询XML配置怎么理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis Ibatis 嵌套查询XML配置怎么理解相关的知识,希望对你有一定的参考价值。

<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这句话会用到吗?

1.右键单击桌面上的“我的电脑”,找到“设备管理器”并单击打开。

2.在设备管理器菜单中找到“网络适配器”,并点击前面的三角,这时出现了的就是网卡驱动。右键单击网卡驱动,选择“更新驱动程序软件”。

3.出现了两个选项,选择手动查找驱动程序并且安装,下一步选择刚才下载的驱动程序安装。

4.安装完成后,重启电脑。如果能够联网的情况下,可以让电脑自动检测并且安装,也可以通过鲁大师、驱动精灵、驱动人生等自动检测安装。
参考技术A 这个区别不是很大,最主要的区别就是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最重要的改进。
参考技术B

    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语句

追问

不是面对面交流就是说不清楚。
SELECT * FROM POST WHERE BLOG_ID = #id照道理会返回很多条记录。

这里查询是按照POST表中的BLOG_ID(外键啊),当然会返回多条记录。
还有我的意思是column是写t_id,还是s_t_id?SELECT * FROM Student WHERE s_t_id= #id这句话会用到column吗?

追答

根据你数据库设计来吧 说多无益

本回答被提问者采纳

mybatis框架简介


ibatis 源于intemet 和 abatis 的组合

* Mybatis 是优秀的持久层框架,支持普通SQL 查询,存储过程和高级映射优秀持久层框架
* MyBatis 封装了几乎所有的jdbc 代码和参数的手工设置以及结果集的检索。
* MyBatis 使用简单的XML 或者注解作配置和定义映射关系,将java 的pojos(普通的java类) 映射成数据库中的记录

有两种配置文件:
*SqlMapCofig.xml
主配置文件,用来指定数据库的连接参数和框架参数
*SqlMap.xml
映射定义文件,定义SQL语句和java类的映射信息。


在使用mybatis 框架时,主要涉及以下几个API
SqlsessionFactoryBuilder sql工场建造器
该对象负责根据Mybatis 配置文件 sqlMapConfig.xml
创建SqlSessionFactory 对象
SqlSessionFactory
每一个MyBatis的应用程序都以一个SqlSessionFactory 对象为核心,
负责创建SqlSession 对象
SqlSession
SqlSession 包含了所有执行Sql 操作的方法,用于执行已映射的SQL 语句

映射使用技巧
--Mapper 映射
--ResultMap 映射结果

在定义<select> 操作时,如果查询结果的字段名和java类的属性不一致时,需要使用<resultMap> 元素指定映射关系

Spring 与MyBatis整合 :
需要导入--mybatis-spring-1.3.1.jar
它提供了整合相关的几个关键api:
*SqlSessionFactoryBean
--- 为整合应用提供SqlSession 对应资源
*MapperFactoryBean
---根据指定Mapper 接口生成Bean实例
*MapperScannerConfigurer
---根据指定的包backPackage批量扫描Mapper 接口并且生成实例
*MapperScannerConfigurer
如果指定的某个包并不完全是我们定义的Mapper接口,可以使用分包和另外的两个属性缩小和注册范围
* annotationClass 用于指定一个注解标记,当指定了 annotationClass 时,MapperScannerConfigruer
将只注册使用了 annotationClass 注解标记的接口。
* markerInterface
用于指定一个接口,当指定 markerInterface 时,MapperScannerConfigure 将注册继承自MarkerInterface的接口


SqlSessionTemplate 封装SqlSession
我们可以使用mybatis-spring.jar 里的sqlSessionTemplate组件,
该组件可以注入到Dao 中,在Dao 中利用SqlSessionTemplate 编程。








































以上是关于Mybatis Ibatis 嵌套查询XML配置怎么理解的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题解决办法汇总(示例代

Mybatis报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题解决办法汇总(示例代

Mybatis—mapper.xml配置文件

mybatis框架简介

Mybatis开篇以及配置教程

MyBatis 使用简单的 XML或注解用于配置和原始映射