先上包結構
這裏用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文件
最後附上測試結果