第五章: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

第二步:配置数据源的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>

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

文件名 springContext-dao.xml

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

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

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的一个具体实现。

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.将数据源配置监控即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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值