mybatis的核心配置文件:
    1.加载配置的顺序:
        (1)properties(属性)
        
            属性的配置:
            先加载内部属性,再加载外部属性,如果有同名属性会覆盖。
            (一般用于配置数据库的连接信息)
            
        (2)settings(全局配置参数)
        
        
       (3) typeAliases(类型别名)
            别名的配置:
            <typeAliases>
                <!-- <typeAlias type="cn.hero.mybatis.po.User" alias="user"/> -->
                <!-- 扫描包的形式创建别名,别名就是类名,不区分大小写 -->
                <package name="com.hero.domain"/>
            </typeAliases>
            
       (4) typeHandlers(类型处理器)


        (5)objectFactory(对象工厂)


      (6 )plugins(插件)


       (7) environments(环境集合属性对象)


        (8)environment(环境子属性对象)


        (9)transactionManager(事务管理)


        (10)dataSource(数据源)


        (11)mappers(映射器)


        <!-- 加载mapper文件 -->
        <mappers>
            <!-- resource基于classpath查找 -->
            <mapper resource="sqlmap/user.xml"/>
            <!-- <mapper resource="mapper/mapper.xml"/> -->
            
            <!-- 根据接口名称加载mapper文件
            要求:1、mapper映射文件和接口在同一个目录下
            
                2、mapper映射文件的名称和接口名称一致。
                
                3、class就是接口的权限定名
             -->
            
            <!-- <mapper class="cn.itheima.mybatis.mapper.UserMapper"/> -->
            <!-- 使用扫描包的形式加载mapper文件 -->
            <package name="com.hero"/>
        </mappers>
        
    2.运用mapper代理来封装对数据库的操作:
            
             mapper代理的开发规则:
                1、namespace必须是接口的全限定名
                2、Statementid必须和接口的方法名称一致
                3、接口方法的参数类型要和parameterType要一致
                4、接口方法的返回值类型要和resultType一致
                
                <mapper namespace="cn.itheima.mybatis.mapper.UserMapper">
                    <!-- 别名不区分大小写 -->
                    <select id="getUserById" parameterType="int" resultType="USer">
                        SELECT * FROM `user` WHERE id=#{id};
                    </select>
                    
                    <!-- 如果查询结果返回list, resultType设置为list中一个元素的数据类型
                        ${}字符串拼接指令
                    -->
                    <select id="getUserByName" parameterType="string" resultType="cn.itheima.mybatis.po.User">
                        SELECT * FROM `user` WHERE username LIKE '%${value}%'
                    </select>
                    
                    <!-- 参数时候pojo时,#{}中的名称就是pojo的属性 -->
                    <insert id="insertUser" parameterType="cn.itheima.mybatis.po.User">
                    
                        <!-- keyProperty:对于pojo的主键属性
                            resultType:对应主键的数据类型
                            order:是在insert语句执行之前或者之后。
                            如果使用uuid做主键,应该先生成主键然后插入数据,此时应该使用Before
                        -->
                        <selectKey keyProperty="id" resultType="int" order="AFTER">
                            SELECT LAST_INSERT_ID()
                        </selectKey>
                        INSERT into user (username,birthday,sex,address)
                        values (#{username}, #{birthday}, #{sex}, #{address})
                    </insert>
                </mapper>