ibatis Mysqlマスタークラスタの読み書き分離テスト

6830 ワード

または2つのデータ・ソース:
SqlMapConfigW.xml書き込み
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

  <!-- Configure a built-in transaction manager.  If you're using an 
       app server, you probably want to use its transaction manager 
       and a managed datasource -->
  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
      <property name="JDBC.ConnectionURL" value="jdbc:mysql:loadbalance://10.11.2.126:3306/DB_TEST7?roundRobinLoadBalance=true&characterEncoding=UTF-8"/>
      <property name="JDBC.Username" value="TESTUSER"/>
      <property name="JDBC.Password" value="TESTPWD"/>
    </dataSource>
  </transactionManager>

  <!-- List the SQL Map XML files. They can be loaded from the 
       classpath, as they are here (com.domain.data...) -->
  <sqlMap resource="com/mydomain/data/City.xml"/>

</sqlMapConfig>

SqlMapConfigR.xml読み取り:
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

  <!-- Configure a built-in transaction manager.  If you're using an 
       app server, you probably want to use its transaction manager 
       and a managed datasource -->
  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
      <property name="JDBC.ConnectionURL" value="jdbc:mysql:loadbalance://10.11.0.75,172.16.0.202:3306/DB_TEST7?roundRobinLoadBalance=true&characterEncoding=UTF-8"/>
      <property name="JDBC.Username" value="TESTUSER"/>
      <property name="JDBC.Password" value="TESTPWD"/>
    </dataSource>
  </transactionManager>

  <!-- List the SQL Map XML files. They can be loaded from the 
       classpath, as they are here (com.domain.data...) -->
  <sqlMap resource="com/mydomain/data/City.xml"/>

</sqlMapConfig>
City  :
package com.mydomain.domain;

public class City {
	private int id;
	private String sname;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	
	
}
City.xml :
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="City">

  <!-- Use type aliases to avoid typing the full classname every time. -->
  <typeAlias alias="City" type="com.mydomain.domain.City"/>

  <!-- Result maps describe the mapping between the columns returned
       from a query, and the class properties.  A result map isn't
       necessary if the columns (or aliases) match to the properties 
       exactly. -->
  <resultMap id="CityResult" class="City">
    <result property="id" column="ID"/>
    <result property="sname" column="SNAME"/>
  </resultMap>

  <!-- Select with no parameters using the result map for Account class. -->
  <select id="selectAllCitys" resultMap="CityResult" parameterClass="City">
    select * from City where sName = #sname#
  </select>

   
  <!-- Insert example, using the Account parameter class -->
  <insert id="insertCity" parameterClass="City">
    insert into City (
      sName
     )
    values (
      #sname#
    )
  </insert>


  <!-- Delete example, using an integer as the parameter class -->
  <delete id="deleteCity" parameterClass="int">
    delete from city where id = #id#
  </delete>

</sqlMap>

テストクラス
package com.mydomain.data;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.mydomain.domain.City;

public class Test {

	private static SqlMapClient sqlMapperR; // 
	private static SqlMapClient sqlMapperW; // 
	public Test(String wr){
		if(wr.equals("W")){
			try {
				Reader reader = Resources.getResourceAsReader("com/mydomain/data/SqlMapConfigW.xml");
				sqlMapperW = SqlMapClientBuilder.buildSqlMapClient(reader);
				reader.close(); 
			} catch (IOException e) {
				throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
			}
		}else{
			try {
				Reader reader = Resources.getResourceAsReader("com/mydomain/data/SqlMapConfigR.xml");
				sqlMapperR = SqlMapClientBuilder.buildSqlMapClient(reader);
				reader.close(); 
			} catch (IOException e) {
				throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
			}
		}
	}
	
	public static List selectAllCitys (City city) throws SQLException {
		return sqlMapperR.queryForList("selectAllCitys",city);
	}
	public static void insertCity (City city) throws SQLException {
		sqlMapperW.insert("insertCity", city);
	}

	public static void deleteCity (int id) throws SQLException {
		sqlMapperW.delete("deleteCity", id);
	}  
	  
	public static void main(String[] args) {
		Test t1 = new Test("R");
		Test t2 = new Test("W");
		City c = new City();
		c.setSname(" ");
		try {  
			t2.insertCity(c);
			List<City> list = t1.selectAllCitys(c);  
			for (int i = 0; i < list.size(); i++) {
				City ci = list.get(i);
				System.out.println("sName:"+ci.getSname());
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

テスト結果:
sName: