文章阅读笔记(官方文档阅读笔记)
文章阅读笔记(官方文档阅读笔记)<properties> <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 启用默认值特性 --> </properties>注意点:如果你在属性名中使用了 ":" 字符(如:db:username),或者在 SQL 映射中使用了 OGNL 表达式的三元运算符,就需要设置特定的属性来修改分隔属性名和默认值的字符。这个特性默认是关闭的。要启用这个特性,需要添加一个特定的属性来开启这个特性。${driver}解析时加载的配置顺序:按上面顺序读取配置项时,后面读取的会覆盖之前读取过的同名属性。从 mybatis 3.4.2 开始,可以为占位符指定一
MyBatis配置文件概览项目结构层次
demo示例:
properties标签主要用来在整个配置文件中替换需要动态配置的属性值。如:
等价于:<property name="driver" value="com.mySQL.jdbc.Driver"/>
${driver}解析时加载的配置顺序:
- 首先读取在 properties标签体内的<property>指定的配置。
- 根据properties标签体的 resource 属性指定的 xxx.properties 文件,读取其中的配置项。
- 读取SqlSessionFactoryBuilder对象构建SqlSessionFactory实例时传入的Properties对象。
按上面顺序读取配置项时,后面读取的会覆盖之前读取过的同名属性。
指定配置项的默认值从 mybatis 3.4.2 开始,可以为占位符指定一个默认值。
这个特性默认是关闭的。要启用这个特性,需要添加一个特定的属性来开启这个特性。
<properties>
<property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 启用默认值特性 -->
</properties>
注意点:如果你在属性名中使用了 ":" 字符(如:db:username),或者在 SQL 映射中使用了 OGNL 表达式的三元运算符,就需要设置特定的属性来修改分隔属性名和默认值的字符。
settings标签(※)官网很详细了:https://mybatis.org/mybatis-3/zh/configuration.html#设置(settings)
- mapUnderscoreToCamelCase,是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。
- ...
typeAliases标签可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
typeAliases即可以为某个类指定缩写名,也可以通过指定包名来降低冗余的全限定类名书写。
指定包名时,MyBatis 会在包名下面搜索需要的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。若类上有注解@Alias,则别名为其注解值。
mybatis对常见的 Java 类型内建了类型别名。它们都是不区分大小写的,并且为了应对原始类型的命名重复,采取了特殊的命名风格。详情可查看官方文档。
typeHandlers标签MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。
mybatis已经提供了一些默认的类型处理器。
我们可以重写已有的类型处理器或创建自己的类型处理器来处理不支持的或非标准的类型。 具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler, 并且可以(可选地)将它映射到一个 JDBC 类型。
........
objectFactory标签每次 MyBatis 创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成实例化工作。
默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认无参构造方法,要么通过存在的参数映射来调用带有参数的构造方法。 如果想覆盖对象工厂的默认行为,可以通过创建自己的对象工厂来实现。
......
plugins标签MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。通过 MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor 接口,并指定想要拦截的方法签名即可。
.......
除了用插件来修改 MyBatis 核心行为以外,还可以通过完全覆盖配置类来达到目的。只需继承配置类后覆盖其中的某个方法,再把它传递到 SqlSessionFactoryBuilder.build(myConfig) 方法即可。再次重申,这可能会极大影响 MyBatis 的行为,务请慎之又慎。
environments标签(※)MyBatis 可以配置成适应多种环境。例如,开发、测试和生产环境需要有不同的配置。
尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
所以,如果想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例。
为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder()#build(reader environment);或SqlSessionFactoryBuilder()#build(reader environment properties);。
如果忽略了环境参数,那么将会加载默认环境。
..............
databaseIdProvider标签数据库厂商标识
MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。
MyBatis 会加载带有匹配当前数据库 databaseId 属性和所有不带 databaseId 属性的语句。 如果同时找到带有 databaseId 和不带 databaseId 的相同语句,则后者会被舍弃。
................
mappers标签(※)告诉 MyBatis 到哪里去找到SQL 映射语句。
https://blog.csdn.net/lgl782519197/article/details/109116342
需要注意的是如果使用的是<mapper class=""/>的配置方式,需要注意maven的静态资源过滤的问题,需要在pom文件中配置一下。https://blog.csdn.net/jasonbrook/article/details/110481203
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
..................
这些配置会告诉 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件。