3.Mybatis的配置解析
转载:https://blog.kuangstudy.com/index.php/archives/493/
一.核心配置文件
-
mybatis-config.xml 系统核心配置文件
-
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
-
能配置的内容如下:注意元素节点的顺序!顺序不对会报错
configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源) databaseIdProvider(数据库厂商标识) mappers(映射器) <!-- 注意元素节点的顺序!顺序不对会报错 -->
1.environments元素
-
配置多个环境并切换(通过default指定)
-
子元素节点:environment
-
id:唯一,用来区别不同环境
-
事务管理器(transactionManager):有两种 JDBC或MANAGED,一般使用JDBC
-
数据源(dataSource):使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
-
有三种内建的数据源类型:UNPOOLED或POOLED或JNDI,一般使用POOLED
-
-
举例:切换不同配置环境 default="test" ,修改default即可切换
1 <environments default="test"> 2 <environment id="development"> 3 <transactionManager type="JDBC"/> 4 <dataSource type="POOLED"> 5 <property name="driver" value="com.mysql.jdbc.Driver"/> 6 <property name="url" 7 value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/> 8 <property name="username" value="root"/> 9 <property name="password" value="123456"/> 10 </dataSource> 11 </environment> 12 13 <environment id="test"> 14 <transactionManager type="JDBC"/> 15 <dataSource type="POOLED"> 16 <property name="driver" value="com.mysql.jdbc.Driver"/> 17 <property name="url" 18 value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/> 19 <property name="username" value="root"/> 20 <property name="password" value="123456"/> 21 </dataSource> 22 </environment> 23 </environments>
2.Properties元素
-
数据库这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。(说白了就是通过xx.properties文件内容来替换mybatis-config.xml中的内容)
-
可以使用外部xx.properties文件配置参数,可以在标签内部配置参数,也可以混合使用即用xx.properties也用标签配置但是外部配置文件高于标签配置,优先使用外部配置文件
-
注意元素节点的顺序!顺序不对会报错
(2.1)外部配置文件db.properties
1 driver=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8 3 username=root 4 password=123456
1 <!--导入properties文件--> 2 <properties resource="db.properties"/> 3 4 <environments default="development"> 5 <environment id="development"> 6 <transactionManager type="JDBC"/> 7 <dataSource type="POOLED"> 8 <property name="driver" value="${driver}"/> 9 <property name="url" 10 value="${url}"/> 11 <property name="username" value="${username}"/> 12 <property name="password" value="${password}"/> 13 </dataSource> 14 </environment> 15 </environments>
(2.2)混合使用
db.properties:
1 driver=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
mybatis-config.xml:外部配置文件优先(如果db.properties中也配置了username和password则优先使用)
1 <!--导入properties文件--> 2 <properties resource="db.properties"> 3 <property name="username" value="root"></property> 4 <property name="password" value="123456"></property> 5 </properties>
3.类型别名(typeAliases)
-
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
-
类型别名的两种方式:
-
直接给实体类起别名
-
配置包名加注解,如果不加注解则必须与实体类名相同,加注解之后可以任意命名
-
(3.1)直接给实体类起别名
mybatis-config.xml:
1 <typeAliases> 2 <typeAlias type="edu.ustc.wzh.pojo.User" alias="User"></typeAlias> 3 </typeAliases>
UserMapper.xml:
(3.2)配置包名+注解
mybatis-config.xml:
1 <typeAliases> 2 <package name="edu.ustc.wzh.pojo"></package> 3 </typeAliases>
User.java:
1 @Alias("User")
UserMapper.xml:
(3.3)也可以只配置包名,使用时类名首字母小写即可。如果类名可能重名则使用(3.2)加上@Alias("xxx")来避免
(3.4)MyBatis初始化时设置的Java 类型内建的相应的类型别名
例如:传入参数为Java的int类型,此时parameterType="_int"
数组基本用Map来传递
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
4.设置(settings)
设置内容较多只需要重点记住:
-
懒加载
-
日志实现
-
缓存开启关闭
-
一个配置完整的 settings 元素的示例如下:
1 <settings> 2 <setting name="cacheEnabled" value="true"/> 3 <setting name="lazyLoadingEnabled" value="true"/> 4 <setting name="multipleResultSetsEnabled" value="true"/> 5 <setting name="useColumnLabel" value="true"/> 6 <setting name="useGeneratedKeys" value="false"/> 7 <setting name="autoMappingBehavior" value="PARTIAL"/> 8 <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> 9 <setting name="defaultExecutorType" value="SIMPLE"/> 10 <setting name="defaultStatementTimeout" value="25"/> 11 <setting name="defaultFetchSize" value="100"/> 12 <setting name="safeRowBoundsEnabled" value="false"/> 13 <setting name="mapUnderscoreToCamelCase" value="false"/> 14 <setting name="localCacheScope" value="SESSION"/> 15 <setting name="jdbcTypeForNull" value="OTHER"/> 16 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> 17 </settings>
5.其他配置(只需要了解)
-
typeHandlers(类型处理器)
-
objectFactory(对象工厂)
-
plugins插件
-
mybatis-generator-core
-
mybatis-plus
-
通用mapper
-
6.映射器(mappers)
-
用于注册我们的Mapper.xml文件
-
有四种方式注册,我们一般只使用三种:
-
resources绑定注册:推荐使用
-
class文件绑定注册:可能会有问题
-
User接口和UserMapper配置文件必须同名
-
User接口和UserMapper配置文件必须在同一个包下
-
-
package绑定注册:可能会有问题
-
User接口和UserMapper配置文件必须同名
-
User接口和UserMapper配置文件必须在同一个包下
-
-
1 <!--每一个Mapper.XML都需要在Mybatis核心配置文件中注册--> 2 <mappers> 3 <!--<mapper resource="edu/ustc/wzh/dao/UserMapper.xml"/>--> 4 <!--<mapper class="edu.ustc.wzh.dao.UserMapper"></mapper>--> 5 <!--<package name="edu.ustc.wzh.dao"></package>--> 6 </mappers>
7.生命周期和作用域
-
理解我们目前已经讨论过的不同作用域和生命周期类是至关重要的,因为错误的使用会导致非常严重的并发问题。
-
SqlSessionFactoryBuilder:
-
一旦创建SqlSessionFactory就不在需要SqlSessionFactoryBuilder
-
局部变量
-
-
SqlSessionFactory:
-
相当于数据库连接池
-
一旦创建就在运行期间一直存在,不要再去创建或删除它
-
作用域最好是应用作用域
-
单例模式或静态单例模式
-
-
SqlSession:
-
连接到连接池的一个请求
-
线程不安全的,不可以被共享,最佳作用域为请求或是方法的作用域
-
用完之后需要赶紧关闭,否则会造成资源浪费
-
这里的每一个Mapper就代表一个具体的业务!