目录
MyBatis配置文件结构
1.属性(Properties)
2.设置(settings)
3.类型别名(typeAliases)
4.类型处理器(typeHandlers)
5.插件(plugins) 拦截器
6.environments(环境)
7.映射器(mappers)
MyBatis框架包括两种XML类型的文件,
1)配置文件 :即 mybatis-config.xml
2)映射文件:即 xxxMapper.xml
MyBatis的配置文件 会深深影响MyBatis行为的设置和属性信息, 注意:mybatis-config.xml 配置讲究严格的顺序,具体顺序遵循 参考文档;
配置文件的层级结构如下:
具体的配置文件如下:
properties属性都是可以外部配置且可以动态替换的,既可在经典的java属性文件中配置,亦可通过properties元素的子元素来传递
例如:
ddriver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/juntest
username=root
password=123456
上述中的属性就可以在整个配置文件中被用来替换成需要动态配置的属性值,比如:
这个例子中的driver,url,username,password 将会由properties元素中设置的相应的值来替换,这样就为配置提供了诸多灵活选择,
属性也可以传递到SqlSessionFactoryBuilder.build()方法中,例如:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
// 或者
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props)
如果属性在不止一个地方进行配置,那么MyBatis将按照下面的顺序来加载:
1)properties 元素体内指定的属性首先被读取;
2)然后根据properties元素中的resource属性读取类路径下属性文件或根据url属性指定的路径读取属性文件,并覆盖已读取的同名属性;
3)最后读取作为方法参数传递的属性,并覆盖已读取的同名属性;
因此:通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是properties属性中指定的属性;
新特性
从MyBatis3.4.2 开始,你可以为占位符指定一个默认值。例如username,password 属性
这个特性默认是关闭的,如果你想为占位符指定一个默认值,你应该添加一个指定的属性来开启这个特性,例如
提示:
如果你已经使用了“:”作为属性的值,(如:db:username),或者你已经在SQL定义中使用OGNL表达式的三元运算符,(如:¥{password != null ? password1:'password2'}),就应该通过设置特定的属性来修改分割键名和默认值的字符,例如:
这是MyBatis 中极为重要的调整设置,它们会改变MyBatis的运行时行为;
最常用的设置:
是否开启自动驼峰命名规则映射,即从经典数据库列名user_name 到经典Java属性名 userName的类似映射;
类型别名是为Java类型设置的一个短的名字,它只和XML配置有关,存在的意义仅在于用来减少类完全限定名的冗余;
当这样配置时,user可以用在任何使用com.mybatis.test.User的地方
也可以指定一个包名,MyBatis会在包名下面搜索需要的JavaBean
每一个在包com.mybatis.test中的JavaBean ,在没有注解的情况下,会使用Bean的首字母小写的非限定类名来作为它的别名,
比如:com.mybatis.test.User 它的别名为user,若有注解,则别名为其注解值;
@Alias("user")
public class User{
}
MyBatis已经为许多常见的Java类型内建立了相应的类型别名,
无论是MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成java类型,可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型;
------
------
MyBatis可以配置成适应多种环境,例如:开发,测试,和生产环境需要有不同的配置:
尽管可以配置多个环境,但是每个SqlSessionFactory实例只能选择其一,
虽然这种方式也可以做到很方便的分离多个环境,但是实际使用场景下,我们更多的是选择使用spring来管理数据源,来做到环境的分离;
既然MyBatis的行为已经由上述元素配置完了,我们现在就要来定义SQL映射语句了;
但首先,我们需要告诉MyBatis到哪里去找到这些语句,在自动查找资源方面,Java并没有提供一个很好的解决方案,所以最好的办法是直接告诉MyBatis到哪里去找映射文件,可以使用相对于类路径的资源引用,或完全限定资源定位符,(包括 file:///的URL),或类名和包名等,例如:
这些配置会告诉MyBatis去哪里找映射文件,剩下的细节就应该是每个SQL映射文件了,