数据源
    数据连接池
    	dbcp
		第一步 pom.xml
			<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
			<dependency>
			    <groupId>org.apache.commons</groupId>
			    <artifactId>commons-dbcp2</artifactId>
			    <version>2.3.0</version>
			</dependency>
			<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
			<dependency>
			    <groupId>commons-logging</groupId>
			    <artifactId>commons-logging</artifactId>
			    <version>1.2</version>
			</dependency>
			<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
			<dependency>
			    <groupId>org.apache.commons</groupId>
			    <artifactId>commons-pool2</artifactId>
			    <version>2.5.0</version>
			</dependency>

            新的加入一个次,会自动引入三个jar文件
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-dbcp2</artifactId>
                <version>2.5.0</version>
            </dependency>

		第二步
			package com.db;

			import org.apache.commons.dbcp2.BasicDataSource;
			import org.apache.ibatis.datasource.DataSourceFactory;

			import javax.sql.DataSource;
			import java.util.Properties;

			/**
			 * Created by webrx on 2018-06-04.
			 */
			public class DbcpDataFactory implements DataSourceFactory {
			    private BasicDataSource datasource = null;

			    public DbcpDataFactory(){
				this.datasource = new BasicDataSource();
			    }

			    public void setProperties(Properties ps) {
				datasource.setDriverClassName( ps.getProperty("driverclassname"));
				datasource.setUsername( ps.getProperty("username"));
				datasource.setUrl( ps.getProperty("url"));
				datasource.setPassword( ps.getProperty("password"));
				datasource.setDefaultAutoCommit( ps.getProperty("defaultautocommit","0").equals("1") );
				datasource.setInitialSize( Integer.parseInt(ps.getProperty("initialsize","2")) );
				datasource.setMaxIdle( Integer.parseInt(ps.getProperty("maxidle","0")));
			    }

			    public DataSource getDataSource() {
				return datasource;
			    }
			}


			db.properties

				db.driver=com.mysql.cj.jdbc.Driver
				db.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=PRC
				db.username=root
				db.password=

		第三步 src/main/resources/conf.xml 核心配置文件
			<?xml version="1.0" encoding="UTF-8" ?>
			<!DOCTYPE configuration
				PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
				"http://mybatis.org/dtd/mybatis-3-config.dtd">
			<configuration>
			    <!-- 引入数据库服务配置文件信息 -->
			    <properties resource="db.properties"/>
			    <settings>
				<setting name="logPrefix" value="dao."/>
			    </settings>
			    <typeAliases>
				<typeAlias type="com.db.DbcpDataFactory" alias="DBCP"/>
				<package name="com.fz.entity"/>
			    </typeAliases>
			    <environments default="development">
				<environment id="development">
				    <transactionManager type="JDBC"/>
				    <!--<dataSource type="POOLED">
				    <property name="driver" value="${db.driver}"/>
				    <property name="url" value="${db.url}"/>
				    <property name="username" value="${db.username}"/>
				    <property name="password" value="${db.password}"/>
				    </dataSource>-->
				    <dataSource type="DBCP">
					<property name="driverclassname" value="${db.driver}"/>
					<property name="url" value="${db.url}"/>
					<property name="username" value="${db.username}"/>
					<property name="password" value="${db.password}"/>
					<property name="initialsize" value="20"/>
				     </dataSource>
				</environment>
			    </environments>
			    <mappers>
				<package name="com.fz.mapper"/>
			    </mappers>
			</configuration>

		    @Test
		    public void query() {
			BookMapper bm = session.getMapper(BookMapper.class);
			System.out.println(bm.query());
			System.out.println(session.getConfiguration().getEnvironment().getDataSource());
		    }

	c3p0
		pom.xml
			第一步
				<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
				<dependency>
				    <groupId>com.mchange</groupId>
				    <artifactId>c3p0</artifactId>
				    <version>0.9.5.2</version>
				</dependency>

			第二步
				package com.db;
				import com.mchange.v2.c3p0.ComboPooledDataSource;
				import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
				/**
				 * Created by webrx on 2018-06-04.
				 */
				public class C3p0DataFactory extends UnpooledDataSourceFactory {
				    public C3p0DataFactory() {
					this.dataSource = new ComboPooledDataSource();
				    }
				}
			第三步
				修改:
				<dataSource type="POOLED">
				<property name="driver" value="${db.driver}"/>
				<property name="url" value="${db.url}"/>
				<property name="username" value="${db.username}"/>
				<property name="password" value="${db.password}"/>
				</dataSource>
				为:
			   <dataSource type="com.db.C3p0DataFactory">
				<property name="driverClass" value="${db.driver}" />
				<property name="jdbcUrl" value="${db.url}" />
				<property name="user" value="${db.username}" />
				<property name="password" value="${db.password}" />
				<property name="idleConnectionTestPeriod" value="60" />
				<property name="maxPoolSize" value="20" />
				<property name="maxIdleTime" value="600" />
				<property name="preferredTestQuery" value="SELECT 1" />
			    </dataSource>
			测试:
			   @Test
			    public void sss(){
				System.out.println(session.getConfiguration().getEnvironment().getDataSource());
			    }


	JNDI是 Java 命名与文件夹接口(Java Naming and Directory Interface),
		javaee 规范 servlet 窗口提供

		1)建立maven web项目
			main
			    /java java类
			    /resources 资源配置文件
			    /webapp
			           /META-INF/context.xml
				   /WEB-INF/web.xml
				   index.jsp
			test/java 测试类

		        pom.xml
				<?xml version="1.0" encoding="UTF-8"?>
				<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
					 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
				    <modelVersion>4.0.0</modelVersion>
				    <groupId>com.fz</groupId>
				    <artifactId>mybatis24</artifactId>
				    <version>1.0</version>
				    <packaging>war</packaging>
				    <name>mybatis24</name>
				    <properties>
					<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
					<maven.compiler.source>1.7</maven.compiler.source>
					<maven.compiler.target>1.7</maven.compiler.target>
				    </properties>

				    <dependencies>
					<dependency>
					    <groupId>junit</groupId>
					    <artifactId>junit</artifactId>
					    <version>4.12</version>
					    <scope>test</scope>
					</dependency>

					<dependency>
					    <groupId>javax.servlet</groupId>
					    <artifactId>javax.servlet-api</artifactId>
					    <version>3.1.0</version>
					    <scope>provided</scope>
					</dependency>
					<dependency>
					    <groupId>javax.servlet.jsp</groupId>
					    <artifactId>jsp-api</artifactId>
					    <version>2.2</version>
					    <scope>provided</scope>
					</dependency>
					<dependency>
					    <groupId>javax.servlet</groupId>
					    <artifactId>jstl</artifactId>
					    <version>1.2</version>
					</dependency>

					<dependency>
					    <groupId>mysql</groupId>
					    <artifactId>mysql-connector-java</artifactId>
					    <version>8.0.11</version>
					</dependency>

					<dependency>
					    <groupId>org.projectlombok</groupId>
					    <artifactId>lombok</artifactId>
					    <version>1.16.22</version>
					    <scope>provided</scope>
					</dependency>

					<dependency>
					    <groupId>org.mybatis</groupId>
					    <artifactId>mybatis</artifactId>
					    <version>3.4.6</version>
					</dependency>


				    </dependencies>


				    <build>
					<finalName>${project.artifactId}</finalName>
					<sourceDirectory>src/main/java</sourceDirectory>
					<testSourceDirectory>src/test/java</testSourceDirectory>
					<resources>
					    <resource>
						<directory>src/main/java</directory>
						<includes>
						    <include>**/*.xml</include>
						    <include>**/*.properties</include>
						</includes>
					    </resource>
					    <resource>
						<directory>src/main/resources</directory>
						<includes>
						    <include>**/*.xml</include>
						    <include>**/*.properties</include>
						</includes>
					    </resource>
					</resources>
					<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
					    <plugins>
						<plugin>
						    <artifactId>maven-clean-plugin</artifactId>
						    <version>3.0.0</version>
						</plugin>
						<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
						<plugin>
						    <artifactId>maven-resources-plugin</artifactId>
						    <version>3.0.2</version>
						</plugin>
						<plugin>
						    <artifactId>maven-compiler-plugin</artifactId>
						    <version>3.7.0</version>
						</plugin>
						<plugin>
						    <artifactId>maven-surefire-plugin</artifactId>
						    <version>2.20.1</version>
						</plugin>
						<plugin>
						    <artifactId>maven-war-plugin</artifactId>
						    <version>3.2.0</version>
						</plugin>
						<plugin>
						    <artifactId>maven-install-plugin</artifactId>
						    <version>2.5.2</version>
						</plugin>
						<plugin>
						    <artifactId>maven-deploy-plugin</artifactId>
						    <version>2.8.2</version>
						</plugin>
					    </plugins>
					</pluginManagement>
				    </build>
				</project>

			src/main/webapp/META-INF/context.xml
				<?xml version="1.0" encoding="UTF-8"?>
				<Context>
				    <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
					      maxActive="100" maxIdle="30" maxWait="10000" username="root"
					      password="" driverClassName="com.mysql.cj.jdbc.Driver"
					      url="jdbc:mysql://localhost:3306/db?useSSL=false&amp;serverTimezone=PRC&amp;useUnicode=true&amp;characterEncoding=UTF8" />
				</Context>

			src/main/webapp/WEB-INF/web.xml
				<?xml version="1.0" encoding="UTF-8"?>
				<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
					 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
					 id="WebApp_ID" version="3.1">
				    <display-name>mybatis24</display-name>
				    <welcome-file-list>
					<welcome-file>index.html</welcome-file>
					<welcome-file>index.jsp</welcome-file>
				    </welcome-file-list>
				</web-app>

			src/main/resources/conf.xml mybatis配置文件
					<?xml version="1.0" encoding="UTF-8" ?>
					<!DOCTYPE configuration
						PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
						"http://mybatis.org/dtd/mybatis-3-config.dtd">
					<configuration>
					<settings>
					    <setting name="logPrefix" value="dao."/>
					</settings>
					    <typeAliases>
						<package name="com.fz.entity"/>
					    </typeAliases>
					    <environments default="development">
						<environment id="development">
						    <transactionManager type="JDBC"/>
						    <!-- 下边配置实现JNDI数据连接池 -->
						    <dataSource type="JNDI">
								<property name="initial_context" value="java:comp/env" />
								<property name="data_source" value="jdbc/mysql" />
						    </dataSource>
						</environment>
					    </environments>
					    <mappers>
						<package name="com.fz.mapper"/>
					    </mappers>
					</configuration>




	druid
		第一步 pom.xml
			<dependency>
			    <groupId>com.alibaba</groupId>
			    <artifactId>druid</artifactId>
			    <version>1.1.11</version>
			</dependency>

		第二步编写类
			package com.db;

			import com.alibaba.druid.pool.DruidDataSource;
			import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;

			/**
			 * Created by webrx on 2018-06-04.
			 */
			public class DruidDataSourceFactory extends UnpooledDataSourceFactory {
			    public DruidDataSourceFactory() {
				this.dataSource = new DruidDataSource();
			    }
			}

		第三步配置 conf.xml
		   <dataSource type="com.db.DruidDataSourceFactory">
			<property name="driverClassName" value="${db.driver}"/>
			<property name="url" value="${db.url}" />
			<property name="username" value="${db.username}" />
			<property name="password" value="${db.password}" />
			<!-- 配置初始化大小、最小、最大 -->
			<property name="initialSize" value="1" />
			<property name="minIdle" value="1" />
			<property name="maxActive" value="20" />

			<!-- 配置获取连接等待超时的时间 -->
			<property name="maxWait" value="60000" />

			<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
			<property name="timeBetweenEvictionRunsMillis" value="60000" />

			<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
			<property name="minEvictableIdleTimeMillis" value="300000" />

			<property name="validationQuery" value="SELECT 'x'" />
			<property name="testWhileIdle" value="true" />
			<property name="testOnBorrow" value="false" />
			<property name="testOnReturn" value="false" />

			<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
			<property name="filters" value="stat" />
		    </dataSource>

		src/main/resources/conf.xml
			<?xml version="1.0" encoding="UTF-8" ?>
			<!DOCTYPE configuration
				PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
				"http://mybatis.org/dtd/mybatis-3-config.dtd">
			<configuration>
			    <!-- 引入数据库服务配置文件信息 -->
			    <properties resource="db.properties"/>
			    <settings>
				<setting name="logPrefix" value="dao."/>
			    </settings>
			    <typeAliases>
				<typeAlias type="com.db.DbcpDataFactory" alias="DBCP"/>
				<typeAlias type="com.db.DruidDataSourceFactory" alias="DRUID"/>
				<package name="com.fz.entity"/>
			    </typeAliases>
			    <environments default="development">
				<environment id="development">
				    <transactionManager type="JDBC"/>
				    <!--<dataSource type="POOLED">
				    <property name="driver" value="${db.driver}"/>
				    <property name="url" value="${db.url}"/>
				    <property name="username" value="${db.username}"/>
				    <property name="password" value="${db.password}"/>
				    </dataSource>-->

				    <!--<dataSource type="DBCP">
					<property name="driverclassname" value="${db.driver}"/>
					<property name="url" value="${db.url}"/>
					<property name="username" value="${db.username}"/>
					<property name="password" value="${db.password}"/>
					<property name="initialsize" value="20"/>
				     </dataSource>
			-->
				    <dataSource type="DRUID">
					<property name="driverClassName" value="${db.driver}"/>
					<property name="url" value="${db.url}" />
					<property name="username" value="${db.username}" />
					<property name="password" value="${db.password}" />
					<!-- 配置初始化大小、最小、最大 -->
					<property name="initialSize" value="${db.initialSize}" />
					<property name="minIdle" value="1" />
					<property name="maxActive" value="20" />

					<!-- 配置获取连接等待超时的时间 -->
					<property name="maxWait" value="60000" />

					<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
					<property name="timeBetweenEvictionRunsMillis" value="60000" />

					<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
					<property name="minEvictableIdleTimeMillis" value="300000" />

					<property name="validationQuery" value="SELECT 'x'" />
					<property name="testWhileIdle" value="true" />
					<property name="testOnBorrow" value="false" />
					<property name="testOnReturn" value="false" />

					<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
					<property name="filters" value="stat" />
				    </dataSource>

				</environment>
			    </environments>
			    <mappers>
				<package name="com.fz.mapper"/>
			    </mappers>
			</configuration>


			测试代码
				package com;
				import com.fz.mapper.BookMapper;
				import org.apache.ibatis.io.Resources;
				import org.apache.ibatis.session.SqlSession;
				import org.apache.ibatis.session.SqlSessionFactory;
				import org.apache.ibatis.session.SqlSessionFactoryBuilder;
				import org.junit.After;
				import org.junit.Before;
				import org.junit.Test;
				import java.io.IOException;
				import java.io.InputStream;

				/**
				 * Created by webrx on 2018-06-04.
				 */
				public class Demo {
				    protected SqlSession session = null;

				    @Before
				    public void init() {
					InputStream is = null;
					try {
					    is = Resources.getResourceAsStream("conf.xml");
					} catch (IOException e) {
					    e.printStackTrace();
					}
					SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
					this.session = sf.openSession();
				    }

				    @After
				    public void close() {
					session.commit();
					session.close();
				    }

				    @Test
				    public void query() {
					BookMapper bm = session.getMapper(BookMapper.class);
					System.out.println(bm.query());
					System.out.println(session.getConfiguration().getEnvironment().getDataSource());
				    }
				}

 

10-04 14:53