zoukankan      html  css  js  c++  java
  • 13Mybatis_SqlMapConfig.xml专题讲解

    Mybatis的SqlMapConfig.xml中以下的标签:

    properties(属性)

    settings(全局配置参数)

    typeAliases(类型别名)

    typeHandlers(类型处理器)

    objectFactory(对象工厂)

    plugins(插件)

    environments(环境集合属性对象)

    environment(环境子属性对象)

    transactionManager(事务管理)

    dataSource(数据源)

    mappers(映射器)

    第一部分:讲解properties属性:

    将数据库连接参数单独配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值。

    在SqlMapConfig.xml中就不需要对数据库连接参数硬编码。

     将数据库连接参数只配置在db.properties中,原因:方便对参数进行统一管理,其它xml可以引用该db.properties。

    做法如下:

             先给出案例图:

    这个修改如下:1.增加了一个db.propertiese文件里面的内容如下:
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybaits
    jdbc.username=root
    jdbc.password=root

    2.修改SqlMapConfig.xml文件:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!-- 和spring整合后 environments配置将废除-->
        <properties resource="db.properties"></properties>
        <environments default="development">
            <environment id="development">
            <!-- 使用jdbc事务管理-->
                <transactionManager type="JDBC" />
            <!-- 数据库连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}" />
                    <property name="url" value="${jdbc.url}" />
                    <property name="username" value="${jdbc.username}" />
                    <property name="password" value="${jdbc.password}" />
                </dataSource>
            </environment>
        </environments>
        
        <!-- 把映射文件(sqlmap/user.xml)加载进sqlMapConfig.xml-->
            <mappers>
               <!--  把mapper.xml加载进sqlMapConfig.xml-->
                <mapper resource="mapper/userMapper.xml"/>
             </mappers>
        
        
        
    </configuration>

    properties特性:

    注意: MyBatis 将按照下面的顺序来加载属性:

    在 properties 元素体内定义的属性首先被读取。

     然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。

    最后读取parameterType传递的属性,它会覆盖已读取的同名属性。

    建议:

    不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。

    在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX

    运行之后一切正常。

    ----------------------------------------------------------------------------------------------------------------------------------------------------------

    第二部分:Settings全局参数配置:

    mybatis框架在运行时可以调整一些运行参数。

    比如:开启二级缓存、开启延迟加载。。

     全局参数将会影响mybatis的运行行为。不要随便乱设置参数。

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------

    第三部分:typeAilases(别名)重点,很常用的

    需求:

    在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。

     如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。

    我们可以这么做:

    1.在sqlMapper.xml中修改如下代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        
          
        
        <!-- properties的配置必须写在typeAliases的上面 -->
        <properties resource="db.properties"></properties>
    
    <!-- 配置别名 -->
    <typeAliases>
        <!-- 针对别名定义
        type:类型的路径
        alias:别名
         -->
        <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/>
     </typeAliases>
     
           
     <!-- 和spring整合后 environments配置将废除-->
        <environments default="development">
            <environment id="development">
            <!-- 使用jdbc事务管理-->
                <transactionManager type="JDBC" />
            <!-- 数据库连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}" />
                    <property name="url" value="${jdbc.url}" />
                    <property name="username" value="${jdbc.username}" />
                    <property name="password" value="${jdbc.password}" />
                </dataSource>
            </environment>
        </environments>
    
        <!-- 把映射文件(sqlmap/user.xml)加载进sqlMapConfig.xml-->
            <mappers>
                
               <!--  把mapper.xml加载进sqlMapConfig.xml-->
                <mapper resource="mapper/userMapper.xml"/>
             </mappers>
        
        
        
    </configuration>

    2.userMapper.xml修改代码如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!-- nanmespace:命名空间。 作用就是对sql进行分类话管理,理解Sal分离
    
    注意:使用mapper代理方式,namespace有特殊重要的作用
    -->
    
    <mapper namespace="cn.itcast.mybatis.Dao.UserMapper">
       
       
    
        
        
        
        
        <!-- 根据id获取用户信息 -->
        <!-- 在映射文件中配置很多sql语句 -->
        <!-- 
        id:标识映射文件中的sql;
        将sql语句封装到mappedStatement对象中,所以将id称为statement的id;parmenterType:指定输入的参数的类型,这里指定的int型
        #{}表示一个占位符号;
        #{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入参数就是简单类型,#{}中的参数名可以任意,可以value或其它名称
        resultType:指定的sql输出结果的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象;
        
         -->
         <!-- 这里因为用了typeAliases所以 resultType直接写user-->
        <select id="findUserById" parameterType="int" resultType="user">
            select * from user where id = #{id}
        </select>
        <!--where username like '%${value}%' 这句话中必须写value不然就报错。因为规则上明确说过
        ${}接收输入参数,类型可以是简单类型,pojo、hashmap。
           如果接收简单类型,${}中只能写成value。
        
          -->
      <select id="findUserByName" parameterType="String" resultType="user">
            select * from user where username like '%${value}%'
        </select>
    
       
    </mapper>

    测试:代码运行正常。

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

    第四部分:mappers(映射配置)这个非常重要

    mapper的映射配置分为三种:

    1.通过rsource加载单个映射配置文件((修改SqlMapConfig.xml文件))

    2.通过mapper接口加载单个mapper(修改SqlMapConfig.xml文件以及包的结构)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        
          
        
        <!-- properties的配置必须写在typeAliases的上面 -->
        <properties resource="db.properties"></properties>
    
    
     
           
     <!-- 和spring整合后 environments配置将废除-->
        <environments default="development">
            <environment id="development">
            <!-- 使用jdbc事务管理-->
                <transactionManager type="JDBC" />
            <!-- 数据库连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}" />
                    <property name="url" value="${jdbc.url}" />
                    <property name="username" value="${jdbc.username}" />
                    <property name="password" value="${jdbc.password}" />
                </dataSource>
            </environment>
        </environments>
    
       
            <mappers>
                
              
                <!-- 用mapper接口来加载单个mapper -->
                  <!-- 
               遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致
               且在一个目录中。
               当着这个规范的前提是:使用mapper代理方法。
               
                -->

    <mapper class="cn.itcast.mybatis.mapper.userMapper" /> </mappers> </configuration>

    把包的结构改一下:需要将mapper接口类名和mapper.xml映射文件名称保持一致且在一个目录中。

    运行一切正常。

    3.批量加载mapper(推荐使用,企业中用的)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        
          
        
        <!-- properties的配置必须写在typeAliases的上面 -->
        <properties resource="db.properties"></properties>
    
     
           
     <!-- 和spring整合后 environments配置将废除-->
        <environments default="development">
            <environment id="development">
            <!-- 使用jdbc事务管理-->
                <transactionManager type="JDBC" />
            <!-- 数据库连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}" />
                    <property name="url" value="${jdbc.url}" />
                    <property name="username" value="${jdbc.username}" />
                    <property name="password" value="${jdbc.password}" />
                </dataSource>
            </environment>
        </environments>
    
        
            <mappers>
                
        
               <!-- 
               
               采用批量加载mapper的方式来加载也必须遵循下面的规范
               
               遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致
               且在一个目录中。
               当着这个规范的前提是:使用mapper代理方法。
               
                -->
               
                <package name="cn.itcast.mybatis.mapper"/>
                
             </mappers>
        
        
        
    </configuration>

    结果:运行一切正常

  • 相关阅读:
    解决 Mac launchpad 启动台 Gitter 图标无法删除的问题
    React 与 React-Native 使用同一个 meteor 后台
    解决 React-Native mac 运行报错 error Failed to build iOS project. We ran "xcodebuild" command but it exited with error code 65. To debug build logs further, consider building your app with Xcode.app, by ope
    一行命令更新所有 npm 依赖包
    swift学习笔记
    IOS语言总结
    focusSNS学习笔记
    别小看锤子,老罗真的很认真
    windowsphone开发页面跳转到另一个dll中的页面
    【令人振奋】【转】微软潘正磊谈DevOps、Visual Studio 2013新功能、.NET未来
  • 原文地址:https://www.cnblogs.com/shenxiaoquan/p/5777931.html
Copyright © 2011-2022 走看看