一、propertis属性使用
此属性可以在外部进行配置,并可以进行动态替换。
<properties resource="jdbc.properties"> <property name="jdbc.username" value="goyeer"/> <property name="jdbc.password" value="123456"/> </properties>
设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值
<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>
这个例子中的 username 和 password 将会由 properties 元素中设置的相应值来替换。 driver 和 url 属性将会由 config.properties 文件中对应的值来替换。这样就为配置提供了诸多灵活选择
属性值可以在SqlSessionFactoryBuilder.build()方法中传入属性值:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
或者
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);
如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
▪首先读取在 properties 元素体内指定的属性
▪然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
▪最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。
在MyBatis 3.4.2 及其更高的版本中,可以使用占位符指定一个默认值
<dataSource type="POOLED"> <!-- 如果属性 'username' 没有被配置,'username' 属性的值将为 'goyeer' --> <property name="username" value="${jdbc.username:goyeer}"/> </dataSource>
这个特性默认是关闭的。添加一个特定的属性来开启这个特性。如:
<properties resource="jdbc.properties"> <!-- ... --> <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 启用默认值特性 --> </properties>
如果你在属性名中使用了 “:” 字符(如:db:username),或者在 SQL 映射中使用了 OGNL 表达式的三元运算符(如: ${tableName != null ? tableName : ‘global_constants’}),就需要设置特定的属性来修改分隔属性名和默认值的字符。例如:
<properties resource="jdbc.properties"> <!-- ... --> <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> <!-- 修改默认值的分隔符 --> </properties>
<dataSource type="POOLED"> <!-- ... --> <property name="username" value="${db:username?:goyeer}"/> </dataSource>
二、settings全局参数设置
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为
参数及说明
设置示例
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="defaultFetchSize" value="100"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="safeResultHandlerEnabled" value="true"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> <setting name="defaultScriptingLanguage" value="org.apache.ibatis.scripting.xmltags.XMLLanguageDriver"/> <setting name="defaultEnumTypeHandler" value="org.apache.ibatis.type.EnumTypeHandler"/> <setting name="callSettersOnNulls" value="false"/> <setting name="returnInstanceForEmptyRow" value="false"/> <setting name="logPrefix" value="exampleLogPreFix_"/> <setting name="logImpl" value="SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING"/> <setting name="proxyFactory" value="CGLIB | JAVASSIST"/> <setting name="vfsImpl" value="org.mybatis.example.YourselfVfsImpl"/> <setting name="useActualParamName" value="true"/> <setting name="configurationFactory" value="org.mybatis.example.ConfigurationFactory"/> </settings>
三、typeAliases类型别名
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:
<typeAliases> <typeAlias alias="Author" type="com.goyeer.Author"/> <typeAlias alias="Blog" type="com.goyeer.Blog"/> <typeAlias alias="Comment" type="com.goyeer.Comment"/> <typeAlias alias="Post" type="com.goyeer.Post"/> <typeAlias alias="Section" type="com.goyeer.Section"/> <typeAlias alias="Tag" type="com.goyeer.Tag"/> </typeAliases>
当这样配置时,Blog 可以用在任何使用 com.goyeer.Blog 的地方。
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
<typeAliases> <package name="com.goyeer"/> </typeAliases>
每一个在包 com.goyeer 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 com.goyeer.Author 的别名为 author;若有注解,则别名为其注解值。见下面的例子:
@Alias("author") public class Author { ... }