ibatis Mysqlマスタークラスタの読み書き分離テスト
6830 ワード
または2つのデータ・ソース:
SqlMapConfigW.xml書き込み
SqlMapConfigR.xml読み取り:
テストクラス
テスト結果:
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: