MyBatis配置(笔记)

  • <!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)
        •  
      • 自定义别名
        • <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中查找
        • <transactionManager/>:事务管理器
          • 事务管理器配置有以下两种方式
            • <transactionManager type="JDBC" />
              • JDBC使用JdbcTransactionFactory生成的Transaction对象实现。
              • 它是以JDBC的方式对数据库的提交和回滚进行操作
            • <transactionManager type="MANAGED">
              • MANAGED使用ManagedTransactionFactory生成的ManagedTransaction对象实现
              • 它的提交和回滚方法不用任何操作,而是把事务交给容器处理
              • 默认情况下,它会关闭连接,然而一些容器并不希望这样,因此需要将closeConnection属性设置为false来阻止它默认的关闭行为
          • org.apache.ibatis.transaction.Transaction(接口)
            • 主要工作:提交(commit)、回滚(rollback)和关闭(close)数据库的事务
          • 提供了两个实现类
            • 分别对应着两个工厂:JdbctransactionFactory和ManagedTransactionFactory这个工厂需要实现TransactionFactory接口,通过她们会生成对应的Transaction对象
            • JdbcTransaction
            • ManagedTransaction
        • <dataSource>:数据源
    • <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
          • 获取连接:Connection connection = dataSource . getConnectoin();  
          • 获取数据库类型:String dbProductName =connection. getMetaData () . getDatabaseProductName();  
          • <databaseidProvidertype =” com . learn . ssm . chapter4 .databaseidprovider.MyDatabaseidProvider ” ><property name= ”msg ” value= ” 自定义 DatabaseidProvider /></databaseidProvider >  
    • <mappers>:映射器
      • 定义接口
      • 在<mapper namespace="接口的全路径名">
      • 包名引入映射器
        • <mappers>
          • 包名引入映射器:<package name="有mapper文件的包名">
          • 用类注册引入映射器:<mapper class="接口的全路径名">

猜你喜欢

转载自blog.csdn.net/weixin_41640994/article/details/82747948