myBatis.xml和mapper.xml文件的基本配置

原文链接:https://www.cnblogs.com/kpsmile/p/11314093.html

 

<?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>

    <!--可以直接在resource中直接引入外部的properties文件-->
    <properties resource="org/wm/test/config.properties">
        <!--也可以在properties标签内部配置property-->
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </properties>

    <!--这些是极其重要的调整, 它们会修改 MyBatis 在运行时的行为方式。-->
    <settings>
        <!--这个配置使全局的映射器启用或禁用缓存。-->
        <setting name="cacheEnabled" value="true"/>
        <!--全局启用或禁用延迟加载。当禁用时, 所有关联对象都会即时加载。-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--允许或不允许多种结果集从一个单独 的语句中返回(需要适合的驱动) -->
        <setting name="multipleResultSetsEnabled" value="true"/>
        <!--使用列标签代替列名。 不同的驱动在这 方便表现不同。 参考驱动文档或充分测 试两种方法来决定所使用的驱动。-->
        <setting name="useColumnLabel" value="true"/>
        <!--允许JDBC支持生成的键。需要适合的驱动。
        如果设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼 容但仍然有效(比如 Derby) -->
        <setting name="useGeneratedKeys" value="false"/>
        <!--指定 MyBatis 如何自动映射列到字段/ 属性。
        PARTIAL 只会自动映射简单, 没有嵌套的结果。FULL 会自动映射任 意复杂的结果(嵌套的或其他情况) 。
        NONE, PARTIAL, FULL -->
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <!--配置默认的执行器。
        SIMPLE 执行器没 有什么特别之处。
        REUSE 执行器重用 预处理语句。
        BATCH 执行器重用语句 和批量更新。
        SIMPLE REUSE BATCH -->
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <!--设置超时时间, 它决定驱动等待一个数 据库响应的时间
        Any positive integer  默认为null-->
        <setting name="defaultStatementTimeout" value="25"/>
        <!--允许在嵌套语句上使用RowBounds。-->
        <setting name="safeRowBoundsEnabled" value="false"/>
        <!--使用驼峰命名法对字段名进行命名-->
        <setting name="mapUnderscoreToCamelCase" value="false"/>
        <!--MyBatis使用本地缓存来防止循环引用并加速重复的嵌套查询。 默认情况下(SESSION)会话期间执行的所有查询都将被缓存。
        如果localCacheScope = STATEMENT本地会话将仅用于语句执行,则不会在对同一SqlSession的两个不同调用之间共享数据。-->
        <setting name="localCacheScope" value="SESSION"/>
        <!--如果未为参数提供特定的JDBC类型,则指定空值的JDBC类型。
        某些驱动程序需要指定列JDBC类型,但其他驱动程序使用泛型值,如NULL,VARCHAR或OTHER。-->
        <setting name="jdbcTypeForNull" value="OTHER"/>
        <!--指定哪个Object的方法触发延迟加载-->
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
        <!--控制打印日志可选slf4j默认为log4j-->
        <setting name="logImpl" value="LOG4J" />
    </settings>
    
    <typeAliases>
        <!--type中直接写包名,该语句会直接帮你将整个包内的所有类取了别名,别名为 类名第一个字母变为小写-->
        <package name="org.wm.pojo"></typeAlias>
        <!--该语句会帮你把制定的类取别名,别名为alias中的值-->
        <typeAlias type="org.wm.pojo.Flower" alias="flower"></typeAlias>

        <!--另外,对于普通的 Java 类型,有许多内建的类型别名。
        它们都是大小写不敏感的,由于重载的名字,要注意原生类型的特殊处理。
        如:
            string          String
            byte            Byte
            long            Long
            short           Short
            int             Integer
            integer         Integer
            double          Double
            float           Float
            boolean         Boolean
            date            Date
            decimal         BigDecimal
            bigdecimal      BigDecimal
            object          Object
            map             Map
            hashmap         HashMap
            list            List
            arraylist       ArrayList
            collection      Collection
            iterator        Iterator
        -->
    </typeAliases>

    <!--<typeHandlers>
        <!–无论是 MyBatis 在预处理语句中设置一个参数,
    还是从结果集中取出一个值时, 类型处理器被用来将获取的值以合适的方式转换成 Java 类型。
    你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。
    详细可看文档–>
        <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
    </typeHandlers>-->


    <!--和spring整合后environments将被废除
        MyBatis 可以配置多种环境。这会帮助你将 SQL 映射应用于多种数据库之中。
        例如, 你也许为开发要设置不同的配置, 测试和生产环境。
        或者你可能有多种生产级数据库却共享相同的模式,所以你会想对不同数据库使用相同的 SQL 映射。
        这种用例是很多的。-->
    <environments default="development">
        <!--一个很重要的问题要记得:你可以配置多种环境,但你只能为每个 SqlSessionFactory 实例选择一个。
        所以,如果你想连接两个数据库,你需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。
        而如果是三个数据库,你就需要三个实例,以此类推。
        -->
        <environment id="development">
            <!--在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC|MANAGED]”):
            JDBC – 这个配置直接简单使用了 JDBC 的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
            MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。
            而它会让容器来管理事务的整个生命周期(比如 Spring 或 JEE 应用服务器的上下文) 默认情况下它会关闭连接。
            然而一些容器并不希望这样, 因此如果你需要从连接中停止它,将 closeConnection 属性设置为 false。-->
            <transactionManager type="JDBC"/>
            <!--使用基本的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
            许多 MyBatis 的应用程序将会按示例中的例子来配置数据源。
            然而它并不是必须的。要知道为了方便使用延迟加载,数据源才是必须的。
            有三种内建的数据源类型(也就是 type=”???”):

            UNPOOLED – 这个数据源的实现是每次被请求时简单打开和关闭连接。
            它有一点慢, 这是对简单应用程序的一个很好的选择, 因为它不需要及时的可用连接。
            不同的数据库对这个的表现也是不一样的, 所以对某些数据库来说配置数据源并不重要, 这个配置也是闲置的。
            UNPOOLED 类型的数据源仅仅用来配置以下 5 种属性:
                driver – 这是 JDBC 驱动的 Java 类的完全限定名(如果你的驱动包含,它也不是 数据源类)。
                url – 这是数据库的 JDBC URL 地址。
                username – 登录数据库的用户名。
                password – 登录数据库的密码。
                defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
                作为可选项,你可以传递数据库驱动的属性。要这样做,属性的前缀是以“driver.”开头的,例如:
                    driver.encoding=UTF8
                这 样 就 会 传 递 以 值 “ UTF8 ” 来 传 递 属 性 “ encoding ”, 它 是 通 过 DriverManager.getConnection(url,driverProperties)方法传递给数据库驱动。


            POOLED – 这是 JDBC 连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。
            这是一种当前 Web 应用程序用来快速响应请求很流行的方法。

                除了上述(UNPOOLED)的属性之外,还有很多属性可以用来配置 POOLED 数据源:
                    poolMaximumActiveConnections – 在任意时间存在的活动(也就是正在使用)连接的数量。默认值:10
                    poolMaximumIdleConnections – 任意时间存在的空闲连接数。
                    poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检查的时间。默认值:20000 毫秒(也就是 20 秒)
                    poolTimeToWait – 这是给连接池一个打印日志状态机会的低层次设置,还有重新尝试获得连接, 这些情况下往往需要很长时间为了避免连接池没有配置时静默失败)。默认值:20000 毫秒(也就是 20 秒)
                    poolPingQuery – 发送到数据的侦测查询,用来验证连接是否正常工作,并且准备接受请求。
                        默认是“NO PING QUERY SET” ,这会引起许多数据库驱动连接由一个错误信息而导致失败。
                    poolPingEnabled – 这是开启或禁用侦测查询。
                        如果开启,你必须用一个合法的 SQL 语句(最好是很快速的)设置 poolPingQuery 属性。默认值:false。
                    poolPingConnectionsNotUsedFor – 这是用来配置 poolPingQuery 多次时间被用一次。
                        这可以被设置匹配标准的数据库连接超时时间, 来避免不必要的侦测。
                        默认值: 0(也就是所有连接每一时刻都被侦测-但仅仅当 poolPingEnabled 为 true 时适用)。


            JNDI – 这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器, 容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。这个数据源配置只需要两个属性:

                    initial_context – 这 个 属 性 用 来 从 初 始 上 下 文 中 寻 找 环 境 ( 也 就 是 initialContext.lookup(initial——context) 。
                        这是个可选属性,如果被忽略,那么 data_source 属性将会直接以 initialContext 为背景再次寻找。
                    data_source – 这是引用数据源实例位置的上下文的路径。
                        它会以由 initial_context 查询返回的环境为背景来查找,如果 initial_context 没有返回结果时,直接以初始上下文为环境来查找。
                    和其他数据源配置相似, 它也可以通过名为 “env.” 的前缀直接向初始上下文发送属性。比如:
                        env.encoding=UTF8
                    在初始化之后,这就会以值“UTF8”向初始上下文的构造方法传递名为“encoding” 的属性。
            -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。
    但是, 首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在这方面没有提供一个很好的方法, 所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。
    你可以使用相对于类路径的资源引用,或者字符表示,或 url 引用的完全限定名(包括 file:///URLs) 。-->
    <mappers>
        <mapper resource="org/wm/pojo/FlowerMapper.xml"/>
    </mappers>


</configuration>

 

mapper.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">

<!--MyBatis 真正的力量是在映射语句中。这里是奇迹发生的地方。
    对于所有的力量,SQL 映射的 XML 文件是相当的简单。
    当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 95%的代码量。
    MyBatis 的构建就是聚焦于 SQL 的,使其远离于普通的方式。
-->

<!--namespace为全限定名,使用该映射文件中配置的已映射的sql语句时,最好加上全限定名,不然可能会造成语句模糊。-->
<mapper namespace="org.wm.mapper.TransferMapper">

    <!--
        sql – 可以重用的 SQL 块,也可以被其他语句引用。
        insert – 映射插入语句
        update – 映射更新语句
        delete – 映射删除语句
        select – 映射查询语句

        当传入参数为在sql语句标记为#{x}时,系统底层默认走的是PreparedStatement
        当传入参数为在sql语句标记为${x}时,系统底层默认走的是Statement
        参数也可以指定一个确定的数据类型:
            #{property,javaType=int,jdbcType=NUMERIC}

        insert、update、delete使用的套路基本一致,返回值都为Integer类型
        select需要指定返回值类型
        sql
        这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。
            <sql id="userColumns"> id,username,password </sql>
            <select id="selectUsers" parameterType="int" resultType="hashmap">
              select <include refid="userColumns"/>
              from some_table
              where id = #{id}
            </select>
    -->

    <select id="selByIdPwd" parameterType="account" resultType="account">
        select * from account where aid=#{aid} and pwd=#{pwd}
    </select>
    <select id="selByIdName" parameterType="account" resultType="account">
        select * from account where aid=#{aid} and aname=#{aname}
    </select>

    <update id="updAcc" parameterType="account">
        update account set money=money+#{money} where aid=#{aid}
    </update>

</mapper>

  

 

posted @ 2020-08-07 10:12  涂小二  阅读(335)  评论(0编辑  收藏  举报