mapper.xml配置文件解读
①. namespace:与对应mapper接口关联,使其方法与xml定义的标签id相对应。
②. resultType:设置sql语句返回的类型,可以是基本类型,也可以是实体类类型,实体类一般全包名作为参数设置,也可以在mybatis配置文件中设置实体类的别名来设置其resultType。其优点在于简单方便,缺点在于需要创建实体类才能这么用,在于一些多表关联,复杂的结果映射关系中不适用。
③. resultMap:设置sql语句返回的结果集,为自定义映射,在嵌套查询、嵌套结果中使用,可以很方便的对结果集进行配置映射关系,在嵌套查询中甚至不需要写连接语句即可完成关联1对1或1对多查询,底层是做了两次查询,所以嵌套查询存在一个N+1的问题,有时候不需要关联查询但每次都会把关联结果查出来,这就是N+1问题,可以通过在Mybatis配置文件中的<settings/>标签中开启懒加载,底层原理是用了一个动态代理去代理结果集,当用到或是取出结果集中关联的对象时,才进行第二次查询,否则只进行一次查询。
④. Mybatis提供了CRUD四种查询标签例如<select/>等来帮助编写SQL语句,几个标签中常用属性如id需要与mapper接口方法名称一致,用来对应namespace中的mapper接口。如resultType、resultMap上面介绍过了。在<insert/>标签中有useGeneratedKeys属性会自动使用JDBC的getGeneratedKeys方法来取出数据库自增的主键(需要有自增字段),在MySql与SQL Server中可以使用,但在oracle需要创建序列,然后使用<selectKey/>来自增主键,例:
<insert id="insert" parameterType="com.demo.Pojo" useGeneratedKeys="true" keyProperty="id" >
insert into DEMO (ID, NAME)
values (${id}, #{name})
<selectKey keyProperty="id" order="BEFORE" resultType="int">
SELECT SEQ_DEMO_ID.NEXTVAL FROM dual
</selectKey>
</insert>
⑤. 动态SQL:Mybatis提供动态SQL标签,类似与JSP中的J