MyBatis配置文件

MyBatis配置结构

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

  • configuration(配置)
    • properties(属性)
    • setting(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)

属性(properties)

这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。例如:

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

这样就可以在db-config.properties文件中配置数据库信息,然后一参数的形式在mybatis.xml文件中调用,例如:

 <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>

设置(setting)

类型别名(typeAliases)

这个属性就是在注册实体类给实体类的全限定性类名起个别名(类似于小名),因为在写mapper文件的时候,需要配置实体类的全限定名,如果全限定名很长,那就很痛苦,此时就可以使用这个属性给你的类起个小名了,例如:

<typeAliases>
     <typeAlias type="com.kons.dao.User"/>
</typeAliases>

当然,项目不可能只有一个实体类,那样子还是要给所有的实体类起小名,也是很麻烦,MyBatis当然考虑这个问题了,此时可以使用package属性指定一个包名,例如:

<typeAliases>
     <package name="com.kons.dao"/>
</typeAliases>

默认情况下,会将com.kons.dao包下的类名首字母小写作为别名,例如:com.kons.dao.User的别名就是user。
另外还有注解配置别名的方法等。

类型处理器(typeHandlers)

对象工厂(objectFactory)

插件(plugins)

环境配置(environments)

配置MyBatis的运行环境

  • 运行环境的切换
    工作的项目不止一个环境,什么测试环境啊,正式环境什么的,往往要配置好几个数据库配置。此时就可以在environments里配置多个environment,如下:
  <environments default="development">
        <!--开发环境-->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>
        <!--测试环境-->
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${test_url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

切换环境的时候,只要修改environments中default属性就可以了。

  • transactionManager标签
    该标签用于指定MyBatis所使用的事务管理器。 MyBatis 支持两种事务管理器类型:
    • JDBC
      该事务器就是我们之前通过Connection的commit()方法提交,通过rollback()方法回滚,默认是需要手动提交的。
    • MANAGED
      由容器来管理事务的整个事务的生命周期,默认情况下会关闭连接,将来学习spring框架之后,就不用在配置事务管理器了,spring会使用自带的管理器。
  • dataSource标签
    该项主要用于配置数据源和数据库连接基本属性,有以下三种内建的数据源类型:
    • UNPOOLED
      该配置表示不使用连接池,每次请求都会创建一个数据库连接,使用完毕后再关闭。当项目对数据库性能要求不大的时候,可以使用该配置。
    • POOLED
      改配置表示使用mybatis自带的数据库连接池,可以在dataSource下的property属性中设置数据库连接池的基本信息,该部分可以在mybatis的官网中看到。
    • JNDI
      配置外部数据源

数据库厂商标识(databaseIdProvider)

映射器(mappers)

这个属性就是告诉mybatis去哪里找sql语句,有四种方式:

  1. 使用相对于类路径的资源引用
    <mappers>
        <mapper resource="mapper/user.xml"/>
    </mappers>
  1. 使用完全限定资源定位符
    <mappers>
        <mapper resource="file:///mapper/user.xml"/>
    </mappers>
  1. 使用映射器接口实现类的完全限定类名
    该方式的使用,需要满足以下几个要求:
    (1)映射文件名要与 Dao 接口名称相同
    (2)映射文件要与接口在同一包中
    (3)映射文件中的 namespace 属性值为 Dao 接口的全类名
    <mappers>
        <mapper class="com.kons.dao.userMapper"/>
    </mappers>
  1. 将包内的映射器接口实现全部注册为映射器
    这种方式的使用需要满足以下几个条件:
    (1)dao 使用 mapper 动态代理实现
    (2)映射文件名要与 Dao 接口名称相同
    (3)映射文件要与接口在同一包中
    (4)映射文件中的 namespace 属性值为 Dao 接口的全类名
    <mappers>
        <mapper package="com.kons.dao"/>
    </mappers>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容