美文网首页
MyBatis3-配置详解

MyBatis3-配置详解

作者: 我相信你爱过gg | 来源:发表于2017-03-12 23:30 被阅读111次

    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>
        <environments default="mysql">
            <environment id="mysql">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://${ip}:${port}/${DataBaseName}"/>
                    <property name="username" value="${UserName}"/>
                    <property name="password" value="${PassWord}"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="cc/ibadboy/mybatis/map/userMapper.xml"></mapper>
        </mappers>
    </configuration>
    

    首先看根元素configuration为什么根元素是这个,因为mybatis-3-config.dtd这个头文件规定了我们 XML 文件可用的元素标签.同时也规定了根元素为configuration .


    environments 元素

    MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。

    不过要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。

    environments 元素属性

    default: 属性值为environment元素的 ID 属性值.当我们要创建SqlSessionFactory时候,代码如下

    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
    

    如果参数environment不指定,则会通过default属性值,创建SqlSessionFactory.


    environment 元素

    用来配置数据库环境,例如指定事务,数据库驱动, URL 用户名 密码等.

    environment 元素属性

    id: 可以理解为数据库环境的名字.


    transactionManager 元素

    配置事务管理器

    transactionManager 元素属性

    type: 在 MyBatis 中有两种类型的事务管理器(也就是type=”[JDBC|MANAGED]”)
    DBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
    MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文) 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。例如:

    <transactionManager type="MANAGED">
      <property name="closeConnection" value="false"/>
    </transactionManager>
    

    dataSource 元素

    dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

    dataSource 元素属性

    type: 有三种内建的数据源类型(也就是type=”[UNPOOLED|POOLED|JNDI]”):
    UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。虽然一点慢,它对在及时可用连接方面没有性能要求的简单应用程序是一个很好的选择。
    POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
    JNDI– 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。


    property 元素

    设置数据源对应属性的值. 配置有三种方式

    <property name="username" value="${UserName}"/>
    

    这种配置会从属性文件中根据键来读取值.需要添加如下代码

    <properties resource="config.properties"></properties>
    

    指定你的属性文件地址.

    姿势二
    <property name="username" value="root"/>
    

    在写配置文件的时候 直接将值写进去.

    姿势三

    姿势三与姿势一类似

    <properties resource="config.properties">
        <property name="UserName" value="root"/>
    </properties>
    

    mappers元素

    告诉 mybatis 框架我的映射文件都有哪些.下面是四种映射姿势.

    <mappers>
      <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
      <mapper url="file:///var/mappers/AuthorMapper.xml"/>
      <mapper class="org.mybatis.builder.AuthorMapper"/>
      <package name="org.mybatis.builder"/>
    </mappers>
    

    mapper映射文件

    SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):

    cache – 给定命名空间的缓存配置。
    cache-ref – 其他命名空间缓存配置的引用。
    resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
    sql – 可被其他语句引用的可重用语句块。
    insert – 映射插入语句
    update – 映射更新语句
    delete – 映射删除语句
    select – 映射查询语句

    select查询语句

    <mapper namespace="cc.ibadboy.mybatis.entity">
        <select id="findById" resultType="String" parameterType="int">
            select userName from user where userId = #{id}
        </select>
    </mapper>
    

    namespace:作用是对 SQL 语句进行分类化管理.
    id: 标识 映射文件中的 SQL 语句.
    parameterType:参数类型
    resultType: 返回结果类型
    #{id}:就是占位符? 问号.
    ${id}:就是不做任何修改拼接 SQL 字符串.

    调用查询语句

    session.selectOne("cc.ibadboy.mybatis.entity.findById",1);
    

    第一个参数,表明我要调用哪个命名空间下的 SQL 语句.语法namespace+"."+id
    第二个参数,输入参数.

    自增主键返回

    Mysql使用:LAST_INSERT_ID(),在 insert 之后调用此函数.

    <insert id="insertAuthor">
      <selectKey keyProperty="id" resultType="int" order="BEFORE">
        select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
      </selectKey>
      insert into Author
        (id, username, password, email,bio, favourite_section)
      values
        (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
    </insert>
    

    keyProperty selectKey 语句结果应该被设置的目标属性。
    resultType 结果的类型。
    order 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素 - 这和像 Oracle 的数据库相似,在插入语句内部可能有嵌入索引调用。

    详细介绍请参考官方 文档

    相关文章

      网友评论

          本文标题:MyBatis3-配置详解

          本文链接:https://www.haomeiwen.com/subject/hmntnttx.html