package com.taobao.tddl.qatest.matrix.template;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import com.taobao.tddl.qatest.BaseTemplateTestCase;
/**
* Comment for JDBCTemplateTest
* <p/>
* Author By: zhuoxue.yll Created Date: 2013-4-9 下午6:25:13
*/
public class JDBCTemplateTest extends BaseTemplateTestCase {
@Test
public void CRUDTest() throws Exception {
sql = String.format("insert into %s (pk,name) values(?,?)", normaltblTableName);
andorJT.update(sql, new Object[] { RANDOM_ID, name });
sql = String.format("select * from %s where pk= ?", normaltblTableName);
Map re = andorJT.queryForMap(sql, new Object[] { RANDOM_ID });
Assert.assertEquals(name, String.valueOf(re.get("NAME")));
sql = String.format("update %s set name =? where pk=? ", normaltblTableName);
andorJT.update(sql, new Object[] { name1, RANDOM_ID });
sql = String.format("select * from %s where pk= ?", normaltblTableName);
re = andorJT.queryForMap(sql, new Object[] { RANDOM_ID });
Assert.assertEquals(name1, String.valueOf(re.get("NAME")));
sql = String.format("delete from %s where pk = ?", normaltblTableName);
andorJT.update(sql, new Object[] { RANDOM_ID });
sql = String.format("select * from %s where pk= ?", normaltblTableName);
List le = andorJT.queryForList(sql, new Object[] { RANDOM_ID });
Assert.assertEquals(0, le.size());
}
@Test
public void tractionCommitTest() {
JdbcTemplate andorJT = new JdbcTemplate(us);
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(us);
TransactionStatus ts = transactionManager.getTransaction(def);
try {
sql = String.format("insert into %s (pk,name) values(?,?)", normaltblTableName);
andorJT.update(sql, new Object[] { RANDOM_ID, name });
sql = String.format("select * from %s where pk= ?", normaltblTableName);
Map re = andorJT.queryForMap(sql, new Object[] { RANDOM_ID });
Assert.assertEquals(name, String.valueOf(re.get("NAME")));
} catch (DataAccessException ex) {
transactionManager.rollback(ts);
throw ex;
} finally {
transactionManager.commit(ts);
}
sql = String.format("select * from %s where pk= ?", normaltblTableName);
Map re = andorJT.queryForMap(sql, new Object[] { RANDOM_ID });
Assert.assertEquals(name, String.valueOf(re.get("NAME")));
}
@Test
public void tractionRollBackTest() {
JdbcTemplate andorJT = new JdbcTemplate(us);
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(us);
TransactionStatus ts = transactionManager.getTransaction(def);
try {
sql = String.format("insert into %s (pk,name) values(?,?)", normaltblTableName);
andorJT.update(sql, new Object[] { RANDOM_ID, name });
sql = String.format("select * from %s where pk= ?", normaltblTableName);
Map re = andorJT.queryForMap(sql, new Object[] { RANDOM_ID });
Assert.assertEquals(name, String.valueOf(re.get("NAME")));
// 回滚
transactionManager.rollback(ts);
} catch (DataAccessException ex) {
transactionManager.rollback(ts);
throw ex;
} finally {
}
// 验证查询不到数据
sql = String.format("select * from %s where pk= ?", normaltblTableName);
List le = andorJT.queryForList(sql, new Object[] { RANDOM_ID });
Assert.assertEquals(0, le.size());
}
}