- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration> :配置
- <properties />:属性
- <property> :将数据库连接的相关配置进行改写
- <settings >:设置
-
- Settings是Mybatis中最复杂的配置,它能深刻影响MyBatis底层的运行(常用)
- 关于缓存的:cacheEnabled
- 关于级联的:lazyLoadingEnabled和aggressiveLazyLoading
- 关于自动映射的:autoMappingBehavior和mapUnderscoreToCamelCase
- 关于执行器的:defaultExecutorType
- <typeAliases>:类型命名(别名)
- 分为系统定义别名+自定义别名
- 系统定义别名
-
- TypeAliasRegistry类(初始化类名)
- registerAlias("string",String.class)
- Configuration配置的别名
- 事务方式别名
- typeAliasRegistry.registerAlias("JDBC",JdbcTransactionFactory.class)
- 数据源类型别名
- typeAliasRegistry.registerAlias("POOLED",PooledDataSourceFactory.class)
- 缓存策略别名
- typeAliasRegistry.registerAlias("PERPETUAL",perpetualCache.class)
- 日志类别名
- typeAliasRegistry.registerAlias("LOG4J",log4jImpl.class)
- 数据库标识别名
- typeAliasRegistry.registerAlias("DB_VENDOR",VendorDatabaseIdProvider.class)
- 语言驱动类别名
- typeAliasRegistry.registerAlias("XML",XMLLanguageDriver.class)
- 动态代理别名
- typeAliasRegistry.registerAlias("CGLIB",CglibProxyFactory.class)
- 事务方式别名
- TypeAliasRegistry类(初始化类名)
- 自定义别名
- <typeAliases><typeAlias alias="别名" type="类的路径(全路径)"></typeAliases>
- 自动扫描别名
- <typeAliases><pagkage name="包名(全路径)"></typeAliases>
- 自动扫描会把扫描到的类第一个字母变为小写
- 如果不同包,有相同类名的类,可以用注解(@Alias("别名"))来区分
- <typeHandlers />:类型处理器
- 在MyBatis中typeHandler都要实现接口org.apache.ibaits.type.TypeHandler
- 系统定义的typeHandler
- 都继承了org.apache.ibatis.type.BaseTypeHandler
- 自定义typeHandler
- 使用代码方式
- <typeHandlers><typeHandler jdbcType="VARCHAR" javaType="string" handler="MyTypeHandler"></typeHandlers>
- 使用包扫描+注解方式
- <typeHandlertype><package name="(包全路径)"></typeHandlertype>
- @MappedTypes(String.class)
- @MappedjabcTypes(jdbcType.VARCHAR)
- 使用代码方式
- <objectFactory />:对象工厂
- 默认情况下,MyBatis会使用其定义的对象工厂--DefaultObjectFactory(org.apache.ibatis.reflection.factory.DefaultObjectFactory)
- 自定义ObjectFactory
- 需要实现接口:org.apache.ibatis.reflection.factory.ObjectFactory
- <plugins/>:插件
- <environments>:配置环境
- <environment>:环境变量
- 主要作用:配置数据库
- 在MyBatis中,数据库通过以下三个工厂类来提供(无论哪个工厂类,最后生成的产品都会是一个实现了DataSource接口的数据库对象)
- PooledDataSourceFactory
- 对应产生:PooledDataSource对象
- 配置:<DataSource type="POOLED">
- POOLED(数据源)
- 利用“池”的概念将JDBC的Connection对象组织起来
- 它开始会有一些空置,并且已经连接好的数据库连接,所以请求时,无须再建立和验证,省去了创建新的连接实例时所必需的初始化和认证时间
- 它还控制最大连接数,避免过多的连接导致系统瓶颈
- POOLED的属性
- UNPOOLED的属性(相同)
- poolMaximumActiveConnections:实在任意时间都存在的活动(也就是正在使用)连接数量,默认为10
- poolMaximumIdleConnections:是任意时间可能存在的空闲连接数
- poolMaximumCheckoutTime:在被强制返回之前,池中连接被检出(checked out)的时间,默认为20000毫秒(20秒)
- poolTimeToWait:是一个底层设置,如果获取连接时间花费相当长的时间,它会给连接池打印状态日志,并重新获取一个连接(避免在错误配置的情况下一直失败),默认值为20000毫秒
- poolPingQuery:为发送到数据库的侦测查询,用来检验连接是否处在正常工作秩序中,并准备接受请求。默认是“NO PING QUERY SET”,这会导致多数数据库驱动失败时带有一个恰当的错误消息
- poolPingEnabled(enabled:开启):是否启用侦测查询。若开启,也必须使用一个可执行的SQL语句设置poolPingQuery属性(最好是一个非常快的SQL),默认为false
- poolPingConnectionsUsedFor:配置poolPingQuery的使用频度。这可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值为0(即所有连接每一时刻都被侦测--仅当poolPingEnabled为true时适用)
- UnpooledDataSourceFactory
- 对应产生:UnpooledDataSource对象
- 配置:<DataSource type="UNPOOLED">
- UNPOOLED(一般用于对性能没有很高要求的场合)
- 采用非数据库池的管理方式
- 每次请求都会打开一个新的数据库连接(所以创建会比较慢)
- UNPOOLED类型的数据源可以配置以下几种属性
- driver:数据库驱动名(com.mysql.jdbc.Driver)
- url:连接数据库的URL
- username:用户名
- password:密码
- defaultTransactionLevel:默认的连接事务隔离级别
- JndiDataSourceFactory
- 会根据JNDI的信息拿到外部容器实现的数据库连接对象
- 配置:<DataSource type="JNDI">
- JNDI(数据源)
- JNDI的实现是为了能再如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JDNI上下文的引用。
- 这种数据源配置只需要两个属性
- initial_context
- 用来在InitialContext中寻找上下文(即,initialContext.lookup(initial_context))
- initial_context是个可选属性,如果忽略,那么data_source属性将胡直接从InitialContext中寻找
- datasource
- 是引用数据源实例位置上下文的路径
- 当提供initial_context配置时,data_source会在其返回的上下文进行查找
- 当没有提供initial_context时,data_source 直接在InitialContext中查找
- initial_context
- PooledDataSourceFactory
- <transactionManager/>:事务管理器
- 事务管理器配置有以下两种方式
- <transactionManager type="JDBC" />
- JDBC使用JdbcTransactionFactory生成的Transaction对象实现。
- 它是以JDBC的方式对数据库的提交和回滚进行操作
- <transactionManager type="MANAGED">
- MANAGED使用ManagedTransactionFactory生成的ManagedTransaction对象实现
- 它的提交和回滚方法不用任何操作,而是把事务交给容器处理
- 默认情况下,它会关闭连接,然而一些容器并不希望这样,因此需要将closeConnection属性设置为false来阻止它默认的关闭行为
- <transactionManager type="JDBC" />
- org.apache.ibatis.transaction.Transaction(接口)
- 主要工作:提交(commit)、回滚(rollback)和关闭(close)数据库的事务
- 提供了两个实现类
- 分别对应着两个工厂:JdbctransactionFactory和ManagedTransactionFactory这个工厂需要实现TransactionFactory接口,通过她们会生成对应的Transaction对象
- JdbcTransaction
- ManagedTransaction
- 事务管理器配置有以下两种方式
- <dataSource>:数据源
- <environment>:环境变量
- <databaseIdProvider/>:数据库厂商标识
- 主要是支持多种不同厂商的数据库
- 系统默认的databaseIdProvider
- <databaseIdprovider type="DB_VENDOR">
- <property name="数据库名称" value="别名">
- <property name="Oracle" vaue="oracle">
- <property name="MySQL" value="mysql">
- <property name="DB2" value="db2">
- <databaseIdprovider type="DB_VENDOR">
- 自定义规则
- 实现接口:DatabaseIdProvider
- 获取连接:Connection connection = dataSource . getConnectoin();
- 获取数据库类型:String dbProductName =connection. getMetaData () . getDatabaseProductName();
- <databaseidProvidertype =” com . learn . ssm . chapter4 .databaseidprovider.MyDatabaseidProvider ” ><property name= ”msg ” value= ” 自定义 DatabaseidProvider /></databaseidProvider >
- 实现接口:DatabaseIdProvider
- <mappers>:映射器
- 定义接口
- 在<mapper namespace="接口的全路径名">
- 包名引入映射器
- <mappers>
- 包名引入映射器:<package name="有mapper文件的包名">
- 用类注册引入映射器:<mapper class="接口的全路径名">
- <mappers>
- <properties />:属性
MyBatis配置(笔记)
猜你喜欢
转载自blog.csdn.net/weixin_41640994/article/details/82747948
今日推荐
周排行