Mybatis全局配置文件解析

mybatis的全局配置文件SqlMapConfig.xml,配置内容如下:

properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
下面介绍一些常用的属性

1.1 properties属性

需求:将数据库连接参数配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值,在SqlMapConfig.xml中就不需要对数据库参数进行硬编码

将数据库参数配置在db.properties的原因:数据库参数同一管理,方便其他xml引用该db.properties,例如当系统庞大形成集群的时候,系统升级需要修改数据库连接信息,需要脚本来操作,只需要操作db.properties即可

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

在SqlMapConfig.xml中加载配置文件并引用配置文件中的参数如下

 <!-- 加载属性文件 -->
<properties resouce="db.properties">
<!-- 元素体,properties中还可以配置一些属性名和属性值
 <property name="jdbc.driver" value=""/>-->
</properties>
 <!-- 和spring整合后将会移除environments的配置 -->
    <environments default="development">
        <environment id="development">
            <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>

properties特性
注意:Mybatis会按照下面的顺序来加载属性:

  • properties元素体内的值首先会被读取
  • 然后会读取properties 元素中resouce或url加载的属性,它会覆盖已加载的同名属性
  • 最后读取parameterType(sql配置文件中的)传递的属性,它会覆盖已读取的同名属性。

当sql配置文件中statement有传递参数为name

 <select id="findUserByName" parameterType="java.lang.String" resultType="cn.eugene.po.User">
        select * from user where userName like '%${name}%'
</select>

并且db.properties配置中也有参数为name

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
name=aaa

程序最后会读取到statement中传递的name的值
建议:
不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。
在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX

1.2 settings全局参数配置

mybatis框架在运行时可以调整一些运行参数。
比如:开启二级缓存、开启延迟加载。。

全局参数将会影响mybatis的运行行为


a.png

b.png
c.png

1.3 typeAliases(别名)

需求

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

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

1.3.1 mybatis默认支持的别名

d.png

1.3.2 定义单个别名

    <!-- 定义别名 -->
    <typeAliases>
        <typeAlias type="cn.eugene.po.User" alias="user" /> 
    </typeAliases>

在sql配置文件中引用别名

    <select id="findUserById" parameterType="int" resultType="user">
        select * from user where id = #{id}
    </select>   

1.3.3 批量定义别名(常用)

指定包名,mybaties自动扫描包中的类,别名就是类名

   <typeAliases>
        <!-- <typeAlias type="cn.eugene.po.User" alias="user" /> -->
        <package name ="cn.eugene.po"/>
    </typeAliases>

1.4 typeHandlers(类型处理器)

mybatis中通过typeHandlers完成jdbc类型和java类型的转换。

通常情况下,mybatis提供的类型处理器满足日常需要,不需要自定义.

e.png

1.5 mappers(映射配置)

1.5.1 通过resource加载单个映射文件


    <mappers>
        <!-- 加载userMapper.xml文件 -->
        <mapper resource="sqlmap/userMapper.xml" />
        <mapper resource="mapper/userMapper2.xml" />
    </mappers>

1.5.2 通过mapper接口加载单个mapper

通过mapper接口加载单个mapper需要满足一些规范:mapper接口类名要和mapper.xml的文件名要保持一致且在同一个目录中
上边规范的前提:使用mapper代理开发

1.5.3 批量加载mapper(推荐使用)

批量加载mapper,和上面的的批量定义类名类似,我们指定mapper接口的包名,mybatis会自动扫描包下所有的mapper接口
需遵循一些规范::mapper接口类名要和mapper.xml的文件名要保持一致且在同一个目录中,使用的是mapper代理开发

<mappers>
        <!-- 通过指定包名批量加载mapper口 -->
        <package name="com.eugene.mapper"/>
</mappers>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352