package test.db; import com.firefly.db.DefaultBeanProcessor; import com.firefly.db.DefaultBeanProcessor.Mapper; import com.firefly.db.DefaultBeanProcessor.SQLMapper; import com.firefly.db.JDBCHelper; import com.firefly.utils.concurrent.Promise; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; import java.util.Map; import static org.hamcrest.Matchers.*; public class TestAnnotation { private JDBCHelper jdbcHelper; private int size = 10; public TestAnnotation() { HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:h2:mem:test"); config.setDriverClassName("org.h2.Driver"); config.setAutoCommit(false); HikariDataSource ds = new HikariDataSource(config); jdbcHelper = new JDBCHelper(ds); } @Before public void before() { jdbcHelper.update("drop schema if exists test"); jdbcHelper.update("create schema test"); jdbcHelper.update("set mode MySQL"); jdbcHelper.update( "CREATE TABLE `test`.`user`(id BIGINT AUTO_INCREMENT PRIMARY KEY, pt_name VARCHAR(255), pt_password VARCHAR(255), other_info VARCHAR(255))"); for (int i = 1; i <= size; i++) { jdbcHelper.insert("insert into `test`.`user`(pt_name, pt_password) values(?,?)", "test" + i, "test_pwd" + i); } } @After public void after() { jdbcHelper.update("DROP TABLE IF EXISTS `test`.`user`"); } @Test public void test() { for (long i = 1; i <= size; i++) { User user = jdbcHelper.queryForObject("select * from `test`.`user` where id = ?", User.class, i); Assert.assertThat(user.getId(), is(i)); Assert.assertThat(user.getName(), is("test" + i)); Assert.assertThat(user.getPassword(), is("test_pwd" + i)); } Map<Long, User> map = jdbcHelper.queryForBeanMap("select * from `test`.`user`", User.class); Assert.assertThat(map.size(), is(size)); for (long i = 1; i <= size; i++) { User user = map.get(i); Assert.assertThat(user.getId(), is(i)); Assert.assertThat(user.getName(), is("test" + i)); Assert.assertThat(user.getPassword(), is("test_pwd" + i)); } } @Test public void testInsertAndUpdateObject() { User user = new User(); user.setName("hello"); user.setPassword("world"); user.setOtherInfo("test Other"); Long id = jdbcHelper.insertObject(user); Assert.assertThat(user.getId(), notNullValue()); User user1 = jdbcHelper.queryById(User.class, id); Assert.assertThat(user1.getName(), is("hello")); Assert.assertThat(user1.getPassword(), is("world")); Assert.assertThat(user1.getOtherInfo(), nullValue()); User user2 = new User(); user2.setId(id); user2.setName("hello 2"); user2.setPassword("pwed"); user.setOtherInfo("test Other2"); int e = jdbcHelper.updateObject(user2); Assert.assertThat(e, is(1)); User user3 = jdbcHelper.queryById(User.class, id); Assert.assertThat(user3.getName(), is("hello 2")); Assert.assertThat(user3.getPassword(), is("pwed")); Assert.assertThat(user3.getOtherInfo(), nullValue()); int n = jdbcHelper.deleteById(User.class, id); Assert.assertThat(n, is(1)); User user4 = jdbcHelper.queryById(User.class, id); Assert.assertThat(user4, nullValue()); Long id2 = jdbcHelper.insert("insert into `test`.`user`(pt_name, pt_password, other_info) values(?,?,?)", "ptTest", "ptTestPwd", "testOtherInfo"); User otherUser = jdbcHelper.queryForObject("select * from `test`.`user` where id = ?", User.class, id2); System.out.println(otherUser); Assert.assertThat(otherUser, notNullValue()); Assert.assertThat(otherUser.getId(), is(id2)); Assert.assertThat(otherUser.getName(), is("ptTest")); Assert.assertThat(otherUser.getPassword(), is("ptTestPwd")); Assert.assertThat(otherUser.getOtherInfo(), is("testOtherInfo")); } @Test public void testBeanProcessor() { DefaultBeanProcessor beanProcessor = jdbcHelper.getDefaultBeanProcessor(); Assert.assertThat(beanProcessor.getIdColumnName(User.class), is("id")); Map<String, Mapper> mapper = beanProcessor.getMapper(User.class); Assert.assertThat(mapper.get("id").annotated, is(true)); Assert.assertThat(mapper.get("name").annotated, is(true)); Assert.assertThat(mapper.get("name").columnName, is("pt_name")); Assert.assertThat(mapper.get("password").columnName, is("pt_password")); Assert.assertThat(beanProcessor.getTableName(User.class), is("user")); SQLMapper sqlMapper = beanProcessor.generateInsertSQL(User.class); System.out.println(sqlMapper); sqlMapper = beanProcessor.generateQuerySQL(User.class); System.out.println(sqlMapper); } @Test public void testAsync() throws Exception { Promise.Completable<List<User>> completable = jdbcHelper.async((conn, helper) -> { List<User> users = new ArrayList<>(); for (long i = 1; i <= size; i++) { User user = helper.queryById(User.class, i); if (user != null) { users.add(user); } } return users; }); List<User> users = completable.get(); System.out.println(users); Long id = 1L; Promise.Completable<Integer> r = jdbcHelper.asyncTransaction((conn, helper) -> { User user = new User(); user.setId(1L); user.setName("apple"); return helper.updateObject(conn, user); }); Assert.assertThat(r.get(), is(1)); User user1 = jdbcHelper.queryById(User.class, id); Assert.assertThat(user1.getName(), is("apple")); r = jdbcHelper.asyncTransaction((conn, helper) -> { User user = new User(); user.setId(1L); user.setName("orange"); helper.updateObject(conn, user); helper.rollback(conn); return 0; }); Assert.assertThat(r.get(), is(0)); user1 = jdbcHelper.queryById(User.class, id); Assert.assertThat(user1.getName(), is("apple")); } }