MyBatis
SqlMapConfig.xml
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息。文档的顶层结构如下:
可通过官方文档进一步了解相关的配置:http://www.mybatis.org/mybatis-3/zh/configuration.html
configuration 配置
properties 属性
settings 设置
typeAliases 类型别名
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
databaseIdProvider 数据库厂商标识
mappers 映射器
在配置相关属性的时候必须注意属性配置的先后顺序,如果打乱顺序进行配置,则相应的配置文件会报错,需要注意这点
properties 属性
如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
a.在 properties 元素体内指定的属性首先被读取
b.然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性
c.最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
![4e899d11ae7d5e9385ed3b171ea5bcac.png](https://i-blog.csdnimg.cn/blog_migrate/81d4db1ca8070c7a5d9ad3930c890681.png)
分析:在properties元素体内的property属性先被读取,由于加载了配置文件db.properties,相应地通过resource属性读取属性文件中的内容会覆盖掉同名属性定义的内容,虽然用户名显示定义为“wkaka”,但后续被属性文件中读取的内容覆盖,因此可以显示正常的数据信息
settings
settings是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。下表描述了设置中各项的意图、默认值等。
![14aa55d60843d9231459986cdb89dfd7.png](https://i-blog.csdnimg.cn/blog_migrate/9e1e7c8d5ca500ca435da52a50aa619a.jpeg)
![a60811864757db51542f17182550b48e.png](https://i-blog.csdnimg.cn/blog_migrate/a06c9087de5ab62a3c6155519994c388.jpeg)
![ba6bb5592c40caaeaf39b8eba18945c3.png](https://i-blog.csdnimg.cn/blog_migrate/54269c7cf294c08b7472611c0a9ca288.jpeg)
![e5f317281b7d7904af835b9497c858df.png](https://i-blog.csdnimg.cn/blog_migrate/8e11ac3900313a76784af35ba27380d4.png)
typeAliases别名
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:在Mapper.xml定义的很多的statement 输出结果映射类型可以使用别名减少名称的冗余
a.MyBatis默认支持的别名
![1de0d4fce9d48edbe4afa233a5236111.png](https://i-blog.csdnimg.cn/blog_migrate/3ebc29498ded2e8d6965274f4ffd5bc0.png)
![c540d9ea8ffe441bbc3a93be8b74446a.png](https://i-blog.csdnimg.cn/blog_migrate/3afdef07c0ca16412a88c7f1a07d4dc1.png)
举例说明:java.lang.Integer等价于int
![37b3ca1bba89006fedde3728ccdb462a.png](https://i-blog.csdnimg.cn/blog_migrate/50f8fb457bc4b7bef7b51fc4ea4acefd.png)
改为如下 使用系统支持的别名
![50de0dbff19a14a662a6cf844f400357.png](https://i-blog.csdnimg.cn/blog_migrate/a9e203091ee17e2377a0292cdadb9316.png)
b.自定义别名
自定义别名可分为:定义单个别名和批量定义别名,案例列举如下
在SqlMapConfig.xml中配置如下内容:
![5e4c9078872803e413cedf9ca42386d9.png](https://i-blog.csdnimg.cn/blog_migrate/21a0503103e87ada5453bf4c599b6159.png)
原始用法:
![a9073fc3e88410172c6c54da204013c9.png](https://i-blog.csdnimg.cn/blog_migrate/b3635d5b47a8f743f1d06fb19619a4c0.png)
使用自定义别名:
![9d425c382140d6c595e601fca14cd5cb.png](https://i-blog.csdnimg.cn/blog_migrate/cd94cef7766d9c1c570979a69faddb60.png)
![8fdd36e0b498eab833fa7caaa1d5193e.png](https://i-blog.csdnimg.cn/blog_migrate/a5350f5930cfd87cd59d926469d76be2.png)
需要注意的是,如果是定义个别名则需要指定的别名才生效,如果是批量定义别名,别名即为类名或者是类名首字母小写
environments配置环境
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。
注意:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一
<environments
注意这里的关键点:
- 默认的环境 ID(比如:default="development")
- 每个 environment 元素定义的环境 ID(比如:id="development")
- 事务管理器的配置(比如:type="JDBC")
- 数据源的配置(比如:type="POOLED")
默认的环境和环境 ID 是自解释的,因此一目了然。可以对环境随意命名,但一定要保证默认的环境 ID 要匹配其中一个环境 ID。
Mapper映射配置
Mapper映射配置由多种方式:
a.通过resource加载单个配置文件
b.通过mapper接口加载单个mapper
c.批量加载mapper(推荐)
![efa6a463bb77236140806e299fac8bc3.png](https://i-blog.csdnimg.cn/blog_migrate/c36ea6e7a318404a81bd7833e209f9bf.png)