Mybatis配置文件解析

一、SqlMapConfig.xml 核心配置文件

层级关系

Mybatis配置文件解析

 

 

 1. environments标签 (数据库环境的配置,支持多环境配置)

Mybatis配置文件解析

 

 

  1. mapper标签(该标签的作用是加载映射的,加载方式有如下几种:)

    ?使用相对于类路径的资源引用,例如:

    <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>

    ?使用完全限定资源定位符(URL),例如:

    <mapper url="file:///var/mappers/AuthorMapper.xml"/>

    ?使用映射器接口实现类的完全限定类名,例如:

    <mapper class="org.mybatis.builder.AuthorMapper"/>

    ?将包内的映射器接口实现全部注册为映射器,例如:

    <package name="org.mybatis.builder"/>
  1. Properties标签

    实际开发中,习惯将数据源的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的 properties文件Mybatis配置文件解析typeAliases标签

  2. typeAliases,为com.lagou.domain.User定义别名为user

     Mybatis配置文件解析

     

     

二、Mapper.xml

1. foreach标签

标签用于遍历集合,它的属性:

collection:代表要遍历的集合元素,注意编写时不要写#{}

open:代表语句的开始部分

close:代表结束部分

item:代表遍历集合的每个元素,生成的变量名

sperator:代表分隔符

<select id="findByIds" parameterType="list" resultType="user">
select * from User
<where>
<foreach collection="array" open="id in(" close=")" item="id"
separator=",">
#{id}
</foreach>
</where>
</select>

2. 复杂映射

一对一 association

<resultMap id="orderMap" type="com.lagou.domain.Order">  
    <result property="id" column="id"></result>  
    <result property="ordertime" column="ordertime"></result>  
    <result property="total" column="total"></result>  
    <association property="user" javaType="com.lagou.domain.User">   
        <result column="uid" property="id"></result>    
        <result column="username" property="username"></result>   
         <result column="password" property="password"></result>    
        <result column="birthday" property="birthday"></result>  
    </association>
</resultMap>

一对多collection

<resultMap id="userMap" type="com.lagou.domain.User">    
    <result column="id" property="id"></result>   
    <result column="username" property="username"></result>   
     <result column="password" property="password"></result>   
     <result column="birthday" property="birthday"></result>    
    <collection property="orderList" ofType="com.lagou.domain.Order">      
        <result column="oid" property="id"></result>      
        <result column="ordertime" property="ordertime"></result>     
        <result column="total" property="total"></result>    
    </collection>  
</resultMap>  
    <select id="findAll" resultMap="userMap">   
        select *,o.id oid from user u left join orders o on u.id=o.uid  
    </select>
</mapper>

在association和collection标签中都有一个fetchType属性fetchType="lazy" 懒加载策略fetchType="eager" 立即加载策略延迟加载原理实现它的原理是,使用 CGLIB 或 Javassist( 默认 ) 创建目标对象的代理对象。当调用代理对象的延迟加载属性的 getting 方法时,进入拦截器方法。比如调用 a.getB().getName() 方法,进入拦截器的invoke(...) 方法,发现 a.getB() 需要延迟加载时,那么就会单独发送事先保存好的查询关联 B 对象的 SQL ,把 B 查询上来,然后调用 a.setB(b) 方法,于是 a 对象 b 属性就有值了,接着完成a.getB().getName() 方法的调用。这就是延迟加载的基本原理

Mybatis配置文件解析

上一篇:滚动条样式设置


下一篇:字幕文件srt处理之pysrt