1. 程式人生 > >Mybatis連線多個數據庫配置方法

Mybatis連線多個數據庫配置方法

注意:本文配置不涉及Spring,僅限於Mybatis內。

思路:

1、configuration.xml配置檔案中environments內參數寫成動態傳參;

2、DBUtil類中構建SQLSessionFactory時讀取傳入的資料庫連線配置資訊動態生成。

案例如下:

1)configuration.xml配置資訊:

<environments default="development">
	<environment id="development">
		<transactionManager type="JDBC" />
		<dataSource type="UNPOOLED">
			<property name="driver" value="${jdbc.driver}" />
			<property name="url" value="${jdbc.url}" />
			<property name="username" value="${jdbc.user}" />
			<property name="password" value="${jdbc.password}" />
		</dataSource>
	</environment>
</environments>

2)DBUtil類:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

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 com.sz.properties.MG01;

public class DBUtil {
	public SqlSession getSqlSession(Properties properties) throws IOException {
		// 通過配置檔案獲取資料庫連線資訊
		InputStream stream = Resources.getResourceAsStream("Configuration.xml");
		/*
		System.out.println(properties.getProperty("jdbc.driver"));
		System.out.println(properties.getProperty("jdbc.url"));
		System.out.println(properties.getProperty("jdbc.user"));
		System.out.println(properties.getProperty("jdbc.password"));
		*/
		// 通過配置資訊構建一個SQLSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream,properties);
		// 通過sqlSessionFactory開啟一個數據庫會話
		SqlSession sqlSession = sqlSessionFactory.openSession();
		return sqlSession;
	}
	
	// 測試主方法
	public static void main(String[] args) {
		SqlSession sqlSession = null;
		try {
			sqlSession = new DBUtil().getSqlSession(DBProperties.CS15);
			System.out.println(sqlSession);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(session != null){
			        session.close();
			}
		}
	}
}

3)DBProperties工具類:

import java.util.Properties;

public class DBProperties {

	public static final Properties MG01;
	public static final Properties CS15;
	
	static{
		
		MG01 = new Properties();
		MG01.setProperty("jdbc.driver", "oracle.jdbc.driver.OracleDriver");
		MG01.setProperty("jdbc.url", "jdbc:oracle:thin:@192.168.0.0:1521/mg01");
		MG01.setProperty("jdbc.user", "xxx");
		MG01.setProperty("jdbc.password", "xxx");
		
		CS15 = new Properties();
		CS15.setProperty("jdbc.driver", "oracle.jdbc.driver.OracleDriver");
		CS15.setProperty("jdbc.url", "jdbc:oracle:thin:@192.168.0.0:1521/mg15");
		CS15.setProperty("jdbc.user", "xxx");
		CS15.setProperty("jdbc.password", "xxx");
	}
	
}

4)javabean:User類

/**
 * 賬號密碼實體類
 */
public class User {

	private String uer;
	private String pwd;
	
	public String getUer() {
		return uer;
	}
	public void setUer(String uer) {
		this.uer = uer;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
}

5)IUser介面

import java.util.Map;

import com.sz.bean.User;

public interface IUser {

	User login(Map<String, String> parameterMap);
}

6)User.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.sz.dao.IUser">
  <resultMap type="com.sz.bean.User" id="UserResult">
    <result column="username" jdbcType="VARCHAR" property="uer"/>
    <result column="password" jdbcType="VARCHAR" property="pwd"/>
  </resultMap>

  <select id="login" parameterType="java.util.Map" resultMap="UserResult">
      select username, password from sz_user where username = #{uer} and password = #{pwd}
  </select>

</mapper>

7)UserAction類

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;

import com.opensymphony.xwork2.ActionSupport;
import com.sz.bean.User;
import com.sz.dao.IUser;
import com.sz.db.DBUtil;
import com.sz.properties.DBProperties;

@SuppressWarnings("serial")
public class UserAction extends ActionSupport {

	private String uer = "";// 賬號
	private String pwd = "";// 密碼

	public String login(){
		if(uer != null && pwd != null){
			Map<String, String> parameterMap = new HashMap<String, String>();
			DBUtil util = new DBUtil();
			SqlSession session = null;
			User user = null;
			parameterMap.put("uer", uer);
			parameterMap.put("pwd", pwd);
			try {
				session = util.getSqlSession(DBProperties.DMS);
				IUser iuser = session.getMapper(IUser.class);
				user = iuser.login(parameterMap);
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if(session != null){
					session.close();
				}
			}
			if(uer.equals(user.getUer())){
				return "main";
			}
			return "error";
		}
		return "error";
	}

	/*
	 * 測試引數傳輸
	 */
	public String test(){
		System.out.println(getUer());
		System.out.println(getPwd());
		return "error";
	}
	
	public String getUer() {
		return uer;
	}
	public void setUer(String uer) {
		this.uer = uer;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
}

8)struts2.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

	<constant name="struts.enable.DynamicMethodInvocation" value="true" />

	<package name="admin" extends="struts-default" namespace="/">
	
	   <action name="User_*" method="{1}" class="com.sz.action.UserAction">
		  <result name="main">main.jsp</result>
		  <result name="error">login.jsp</result>
		</action>
		
	</package>
</struts>

9)頁面表單請求

<div class="main">
	<div class="center">
		<form action="User_login" id="formOne" method="post" onsubmit="return submitB()" >
			<br/><br/>
			<i class="fa fa-user Cone">  | </i>
			<input type="text" name="uer" id="user" placeholder="使用者名稱"onblur="checkUser()"/>
			<span id="user_pass"></span>
			<br/>
			<i class="fa fa-key Cone">  | </i>
			<input type="password" name="pwd" id="pwd" placeholder="密碼"onblur="checkUser1()"/>
			<span id="pwd_pass"></span>
			<br/>
			<input type="submit" value="登  錄" id="submit" name="submit" />
			<br/>
		</form>
	</div>
</div>

這樣案例就可以跑起來了!(本案例配合struts2網頁呼叫