目录
16、Xml映射文件中,除了常见的 select|insert|updae|delete标签之外,还有哪些标签?
17、Mybatis的 Xml映射文件中,不同的 Xml映射文件,id是否可以重复?
18、为什么说 Mybatis是半自动 ORM映射工具?它与全自动的区别在哪里?
MyBatis面试题
16、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
答:、、、、,加上动态 sql的 9个标签,其中为 sql片段标签,通过标签引入 sql片段,为不支持自增的主键生成策略标签。
17、Mybatis的 Xml映射文件中,不同的 Xml映射文件,id是否可以重复?
不同的 Xml映射文件,如果配置了 namespace,那么 id可以重复;如果没有配置 namespace,那么 id不能重复;
原因就是 namespace+id是作为 Map的 key使用的,如果没有 namespace,就剩下 id,那么,id重复会导致数据互相覆盖。有了 namespace,自然 id就可以重复,namespace不同,namespace+id自然也就不同。
18、为什么说 Mybatis是半自动 ORM映射工具?它与全自动的区别在哪里?
Hibernate属于全自动 ORM映射工具,使用 Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybatis在查询关联对象或关联集合对象时,需要手动编写 sql来完成,所以,称之为半自动 ORM映射工具。
19、一对一、一对多的关联查询?
namespace="com.lcb.mapping.userMapper"> id="getClass"parameterType="int" resultMap="ClassesResultMap"> select * from class c,teacher t where c.teacher_id=t.t_id andc.c_id=#{id} type="com.lcb.user.Classes"id="ClassesResultMap"> property="id"column="c_id"/> property="name"column="c_name"/> property="teacher" javaType="com.lcb.user.Teacher"> property="id"column="t_id"/> property="name"column="t_name"/> id="getClass2"parameterType="int" resultMap="ClassesResultMap2"> select * from class c,teacher t,student s where c.teacher_id=t.t_idand c.c_id=s.class_id and c.c_id=#{id} type="com.lcb.user.Classes"id="ClassesResultMap2"> property="id"column="c_id"/> property="name"column="c_name"/> property="teacher" javaType="com.lcb.user.Teacher"> property="id"column="t_id"/> <resultproperty="name"column="t_name"/></association> <collectionproperty="student" ofType="com.lcb.user.Student"> <idproperty="id"column="s_id"/> <resultproperty="name"column="s_name"/></collection> </resultMap></mapper>