• 第五章:Spring细分一如何让mapper文件夹下的SQL语句对数据库生效,jdbc和mybatis-config.xml


    从 XML 中构建 SqlSessionFactory

    先学会xml文件的方式后,再从Maven构建项目就简单很多。
    Mybatis官网链接
    提示:这里对文章进行总结:
    数据库连接可以在容器启动的时候就先进行一定数量的连接,放在连接池当中,等待调用。
    举例子:jdbc.initialSize1=50
    常用连接池功能不仅仅局限于连接,还能对sql语句进行监控管理、处理异常、管理事务作用。
    项目代码中已经创建mapper文件夹,并且创建xml,里面写了sql语句,如何让其对应数据库连接并生效对数据库操作呢?举例子:关注MapperScannerConfigurer配置。

    第一步:配置数据源jdbc.properties(配置多个)

    这里配置2个数据源为例子
    对应mapper.xml的所在文件夹一般是对某个数据库操作的。
    数据源的属性名可以自定义,但是xml 配置中就必须统一
    比如jdbc.username数据源中可以改其他名,只要配置在数据源xml中对即可。

    --------------------------------------数据源__1----------------------------------------
    
    #驱动器
    driveConfigClass1=com.mysql.jdbc.Driver
    url1=jdbc\:mysql\://localhost\:3306/DataBase_Name?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
    username1=
    password1=
    #连接池初始化时初始化的数据库连接数,当项目第一次进行增,删,改,查的时候,连接池会初始化,这个时候会根据initialSize参数初始化数据库连接放入连接池中。
    initialSize1=50
    #最大空闲数
    maxIdle1=300
    #最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请
    minIdle1=50
    #最大激活数
    maxActive1=300
    #用来验证数据库连接的有效性
    validationQuery1=select 1
    
    --------------------------------------数据源__2----------------------------------------
    
    #驱动器
    driveConfigClass2=com.mysql.Driver
    url2=:mysql\://localhost\:3306/DataBase_Name?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
    name=
    word=
    #连接池初始化时初始化的数据库连接数,当项目第一次进行增,删,改,查的时候,连接池会初始化,这个时候会根据initialSize参数初始化数据库连接放入连接池中。
    initialSize2=10
    #最大空闲数
    maxIdle2=15
    #最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请
    minIdle2=10
    #最大激活数
    maxActive2=15
    #用来验证数据库连接的有效性
    validationQuery2=select 1
    testOnBorrow=true
    
    --------------------------------------数据源__3----------------------------------------
    
    #配置驱动
    sqlServerDrive=com.microsoft.sqlserver.jdbc.SQLServerDriver
    url3=jdbc:sqlserver://localhost;database=DataBase_Name
    usernameTEST=
    passwordTEST=
    #最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请
    initialSizeTest=15
    minIdleTEST=15
    maxIdleTEST=1200
    #最大激活数
    maxActiveTEST=1200
    testOnBorrow=true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    第二步:配置数据源的Mybatis全局配置

    首要的配置数据库sql语句执行日志,监控和管理,而log4.properties配置是对非sql日志监控
    这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
    在使用mybatis框架时,首先导入其对应的jar包,并进行相应的配置,所以得对配置文件的每个参数都得了解。一个完全的mybatis配置文件结构如下:
    mybatis-Config.xml常用配置注解包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)

    
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "https://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>  
    #一个配置完整的 settings 元素的示例如下:
    <settings>
    #	全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。
      <setting name="cacheEnabled" value="true"/>
    #  	延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。
      <setting name="lazyLoadingEnabled" value="true"/>
      <setting name="aggressiveLazyLoading" value="true"/>
      <setting name="multipleResultSetsEnabled" value="true"/>
      <setting name="useColumnLabel" value="true"/>
      #	允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。
      <setting name="useGeneratedKeys" value="true"/>
      <setting name="autoMappingBehavior" value="PARTIAL"/>
      <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
    #常用配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。
      <setting name="defaultExecutorType" value="REUSE"/>
      <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_"/>
      #日志 关于mysql语句运行的日志
      <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"/>
    #  	允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 Java 8 编译,并且加上 -parameters 选项。(新增于 3.4.1)
      <setting name="useActualParamName" value="true"/>
      
      <setting name="configurationFactory" value="org.mybatis.example.ConfigurationFactory"/>
    </settings>
    #类型别名(typeAliases)
    <typeAliases>
      <typeAlias alias="Author" type="domain.blog.Author"/>
      <typeAlias alias="Blog" type="domain.blog.Blog"/>
      <typeAlias alias="Comment" type="domain.blog.Comment"/>
      <typeAlias alias="Post" type="domain.blog.Post"/>
      <typeAlias alias="Section" type="domain.blog.Section"/>
      <typeAlias alias="Tag" type="domain.blog.Tag"/>
    </typeAliases>
    #分页插件
        <plugins>
            <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
        </plugins>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    第三步:将前两步的配置注入连接池和Bean类的属性值中

    文件名 springContext-dao.xml

    #将数据源的值注入到三个Bean中,这里只是注入了数据源1,另外连个一次类推
    1.DruidDataSource链接学习:

    数据库连接池当用户不使用的时候,并没有断开与数据库的连接,而是将连接放到连接池当中,
    否则每次连接会耗费极大的连接资源。
    Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,
    内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。
    
    • 1
    • 2
    • 3
    • 4

    2.SqlSessionFactoryBean

    浏览器和服务器之间的会话通过Session标记,Session用来维护无状态请求之间的状态的信息。
    因此SqlSession是客户端与数据库Server之间建立的会话,并维护了客户端和数据库Server的一些状态信息。
    1.SqlSession是关联到具体数据库连接的,实现了SqlSession接口,可以执行sql命令、获取mapper和管理事务
    2.SqlSessionFactoryBean是生产SqlSessionFactory的一种工厂Bean;
    3.SqlSessionFactory是一种生产SqlSession的工厂,其能力(方法 )就是打开一个会话(客户端和数据库Server)
    4.SqlSession是代表数据库连接客户端和数据库Server之间的会话信息;
    5.SqlSessionTemplate是SqlSession的一个具体实现。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.MapperScannerConfigurer
    此配置会扫描所在项目的文件夹下的所有接口,然后创建各自接口的动态代理类。这样,Service就可以注入dao的实例了。
    mybatis-spring提供了MapperScannerConfigurer这个类,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
     #将jdbc文件引用到这个文件
    <context:property-placeholder location="classpath:文件夹名字/jdbc.properties" />
    --------------#为将 数据源1	注入到Bean中-----------------------
        <!--配置数据库连接池,使用的连接池是druid-->
        <bean id="dataSource_ID1" class="com.alibaba.druid.pool.DruidDataSource">
            <property name="driverClassName" value="${driveConfigClass1}"></property>
            <property name="url" value="${url1}"></property>
            <property name="username" value="${username1}"></property>
            <property name="password" value="${password1}"></property>
            <property name="initialSize" value="${initialSize1}"/>
    		<property name="maxActive" value="${maxActive1}" />
    		<property name="maxIdle" value="${maxIdle1}" />
    		<property name="minIdle" value="${minIdle1}"/>
    	    <property name="validationQuery" value="${validationQuery}"/>	
    	    <property name="testOnBorrow" value="${testOnBorrow}"/>			
        </bean>
    
        <!--配置SqlSession的工厂-->	
        <bean id="sqlSessionFactory_ID1" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="configLocation"  value="classpath:Mybatis-Config.xml"/>
            	#引用dataSource_ID1 给sqlsession
            <property name="dataSource" ref="dataSource_ID1"></property>
        </bean>
        
        
        <!--配置数据库操作的接口以及xml所在package-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		    <!--配置basePackage的需要扫描Dao接口包-->	
            <property name="basePackage" 
            value="net.test.xxx1.mapper",
            "net.test.xxx2.mapper",
    		"net.test.xxx3.mapper",
    		......
            >
            </property>
    		         <!--注入sqlSessionFactory_ID1-->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_ID1" />
        </bean>
    </beans>
    
    --------------#为将 数据源3	注入到Bean中-----------------------
     #将jdbc文件引用到这个文件
    <context:property-placeholder location="classpath:文件夹名字/jdbc.properties" />
    --------------#为将 数据源3	注入到Bean中-----------------------
        <!--配置数据库连接池,使用的连接池是druid-->
        <bean id="dataSource_ID3" class="com.alibaba.druid.pool.DruidDataSource">
            <property name="driverClassName" value="${sqlServerDrive}"></property>
            <property name="url" value="${url3}"></property>
            <property name="username" value="${usernameTEST}"></property>
            <property name="password" value="${passwordTEST}"></property>
            <property name="initialSize" value="${initialSizeTest}"/>
    		<property name="maxActive" value="${maxActiveTEST}" />
    		<property name="maxIdle" value="${maxIdleTEST}" />
    		<property name="minIdle" value="${minIdleTEST}"/>
    	    <property name="testOnBorrow" value="${testOnBorrow}"/>			
        </bean>
    
        <!--配置SqlSession的工厂-->	
        <bean id="sqlSessionFactory_ID3" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="configLocation"  value="classpath:Mybatis-Config.xml"/>
            	#引用dataSource_ID3 给sqlsession
            <property name="dataSource" ref="dataSource_ID3"></property>
        </bean>
        
        
        <!--配置数据库操作的接口以及xml所在package-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		    <!--配置basePackage的需要扫描Dao接口包-->	
            <property name="basePackage" 
            value="net.test.xxxxx1.mapper","net.test.xxxxx2.mapper",
    		"net.test.xxxxx3.mapper",
    		......
            ></property>
            
    		         <!--注入sqlSessionFactory_ID-->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_ID3" />
        </bean>
    </beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82

    总结

    1.配置数据源
    2.将数据源配置监控即mybatis-config.xml
    3.SpringContext_dao将数据源和对应的mapper文件中sql语句进行匹配,就是匹配这些sql语句在哪个数据库连接上生效的意思。
    此篇配置文件会在接下来几个章节被引用

    提示:这里对文章进行总结:

    点解连接
    第一章:Spring流程执行步骤
    第二章:Spring核心思想和IOC和AOP依赖注入
    第三章:Spring常用注解解释
    第四章:Spring七大核心模块Bean、Core、Context
    第五章:Spring细分一如何让mapper文件夹下的SQL语句对数据库生效,jdbc和mybatis-config.xml
    第六章:Springmvc事务管理和配置文件xml详解和七大事务和注解@Transactional

  • 相关阅读:
    macOS 使用 X11 运行远端 linux 中的 x11 client 图形程序
    Nginx基本使用(反向代理,负载均衡,动静分离)
    SQL NULL Values(空值)
    第3关:Client连接及状态
    【CSS】transition、transform以及animation
    从0到1使用kubebuiler开发operator
    华为机器学习服务语音识别功能,让应用绘“声”绘色
    生成rdma-core deb文件在ubuntu22.04
    Spring Boot、Spring MVC 和 Spring Cloud 深度解析
    前端学成在线项目详细解析三
  • 原文地址:https://blog.csdn.net/beiback/article/details/127962811