MyBatis配置數據源druid(非Spring環境) + MyBatis單元測試

先上包結構

包結構

這裏用druid舉例子,如果要用其他連接池,請參考文件3

導入依賴包,jdbc,mybatis,druid,這裏略過

db.properties & mybatis-config.xml  都在src目錄下,請注意

文件1 --- db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/blog?
username=root
password=java1234

文件2--mybatis-config.xml  

注意這裏的 <dataSource type="com.zhou.util.DruidDataSourceFactory">  type指向自己編寫的類,請參考文件3

<?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" />
	<!-- mybatis的配置環境 -->
	<environments default="development">
		<!-- mybatis的配置環境 -->
		<environment id="development">
			<!-- 事物管理配置 -->
			<transactionManager type="JDBC" />
			<!-- 數據源的選擇 -->
			<dataSource type="com.zhou.util.DruidDataSourceFactory">
				<!-- 數據庫鏈接的配置 -->
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<mapper resource="com/zhou/mapper/BlogDaoMapper.xml" />
	</mappers>

</configuration>

文件3--編寫DruidDataSourceFactory  實現 DataSourceFactory接口,重寫方法,(自定義數據源關鍵)

package com.zhou.util;

import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.ibatis.datasource.DataSourceFactory;

import com.alibaba.druid.pool.DruidDataSource;

public class DruidDataSourceFactory implements DataSourceFactory {

	private Properties props;
	
	@Override
	public DataSource getDataSource() {
		DruidDataSource dds = new DruidDataSource();
		dds.setDriverClassName(this.props.getProperty("driver"));
		dds.setUrl(this.props.getProperty("url"));
		dds.setUsername(this.props.getProperty("username"));
		dds.setPassword(this.props.getProperty("password"));
		try {
			dds.init();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return dds;
	}

	@Override
    public void setProperties(Properties props) {
        this.props = props;
    }

}

這裏就mybatis配置druid 就ok了,開始測試

即使在 mybatis-config.xml 設置了url和driver和Username和userpassword這裏類中也要設置

文件4-- MyBatis 測試工具類  SqlSessionFactoryUtil 

package com.zhou.test;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


/**
 * 
 * @author Mr_zhou
 * 2018年11月21日 下午10:11:33
 * TODO 
 * 		MyBatis 測試工具
 * 		getOpenSession 獲得SqlSession
 * 		getTestMapper 傳入dao接口,返回dao實現類
 */
public class SqlSessionFactoryUtil {
	
	private static SqlSessionFactory sqlSessionFactory;
	
	
	static {
		try {
			InputStream inputStream = Resources.getResourceAsStream("mybatis_config_test.xml");
			 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	
	
	public static SqlSession getOpenSession() {
		SqlSession session=null;
        try {
            session = sqlSessionFactory.openSession();
        } catch (Exception e) {
			System.out.println(e.getMessage());
		}
        return session;
	}
	
	/**
	 * 
	 * @fun-name getTestMapper
	 * @return-type T
	 * @author Mr_zhou
	 * @date 2018年11月21日 下午10:03:04
	 * @param type
	 * @return
	 * TODO !!! 單元測試專用方法,傳入dao接口,返回實現類
	 */
	public static <T> T getTestMapper(Class<T> type) {
		return getOpenSession().getMapper(type);
	}
	
}

附上 我的測試類

package com.zhou.test;

import com.zhou.dao.BlogDao;
import com.zhou.util.SqlSessionFactoryUtil;

public class MyBatisTest {
	public static void main(String[] args) {
		
		//調用測試工具返回dao接口的實現
		BlogDao BlogDaoImp =SqlSessionFactoryUtil.getTestMapper(BlogDao.class);
		
		//BlogDaoImp調用接口的方法,完成測試
		int allBlogIndexCount = BlogDaoImp.getAllBlogIndexCount();
		
		System.out.println(allBlogIndexCount);
	}
}

.dao接口,和mapper.xml文件

Dao接口

 

Mapper.xml

 最後附上測試結果

測試結果

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章