package org.springframework.data.jdbc; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import javax.sql.DataSource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.dao.DataAccessException; import org.springframework.data.jdbc.test.adt.SimpleAdvancedDataTypesDao; import org.springframework.jdbc.core.ConnectionCallback; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.jdbc.test.adt.Actor; import org.springframework.data.jdbc.test.adt.AdvancedDataTypesDao; import org.springframework.data.jdbc.test.adt.SqlActor; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @TransactionConfiguration public class SimpleAdtTests { private SimpleJdbcTemplate simpleJdbcTemplate; @Autowired @Qualifier("simpleAdvancedDataTypesDao") private AdvancedDataTypesDao dao; @Autowired public void init(DataSource dataSource) { this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource); } @Transactional @Test public void testSqlData() { SqlActor a1 = new SqlActor(); a1.setId(4L); a1.setName("Adrian"); a1.setAge(44); dao.addSqlActor(a1); int count = simpleJdbcTemplate.queryForInt("select count(*) from actor where id = 4"); assertEquals("actor not added", 1, count); SqlActor a2 = dao.getSqlActor(4L); assertEquals("", "Adrian", a2.getName()); simpleJdbcTemplate.getJdbcOperations().execute( new ConnectionCallback<Object>() { public Object doInConnection(Connection conn) throws SQLException, DataAccessException { conn.getTypeMap().clear(); return null; } }); } @Transactional @Test public void testStruct() { Actor a1 = new Actor(); a1.setId(4L); a1.setName("Adrian"); a1.setAge(44); dao.addActor(a1); int count = simpleJdbcTemplate.queryForInt("select count(*) from actor where id = 4"); assertEquals("actor not added", 1, count); Actor a2 = dao.getActor(4L); assertEquals("", "Adrian", a2.getName()); } @Transactional @Test public void testArray() { Long[] ids = new Long[] {2L, 3L}; dao.deleteActors(ids); String[] names = dao.getActorNames(); assertTrue("", names.length == 1); } @Transactional @Test public void testRefCursor() { List<Actor> actors = dao.getActors(); assertTrue("", actors.size() > 0); } @Transactional @Test public void testStructArray() { List<Actor> actors = dao.getAllActors(); assertTrue("", actors.size() > 0); Long[] ids = new Long[actors.size()]; for (int i = 0; i < actors.size(); i++) { ids[i] = actors.get(i).getId(); } dao.deleteActors(ids); assertTrue("", dao.getAllActors().size() == 0); dao.saveActors(actors); assertTrue("", dao.getAllActors().size() == actors.size()); } }