Refactor rxjava-jdbc

This commit is contained in:
Ahmed Tawila 2017-09-23 16:09:01 +02:00
parent 7ef66d7e83
commit b3edd4bbba
10 changed files with 107 additions and 114 deletions

View File

@ -3,11 +3,11 @@ package com.baeldung.rxjava.jdbc;
import com.github.davidmoten.rx.jdbc.ConnectionProvider; import com.github.davidmoten.rx.jdbc.ConnectionProvider;
import com.github.davidmoten.rx.jdbc.ConnectionProviderFromUrl; import com.github.davidmoten.rx.jdbc.ConnectionProviderFromUrl;
public class Connector { class Connector {
public static final String DB_CONNECTION = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"; static final String DB_CONNECTION = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";
public static final String DB_USER = ""; static final String DB_USER = "";
public static final String DB_PASSWORD = ""; static final String DB_PASSWORD = "";
public static final ConnectionProvider connectionProvider = new ConnectionProviderFromUrl(DB_CONNECTION, DB_USER, DB_PASSWORD); static final ConnectionProvider connectionProvider = new ConnectionProviderFromUrl(DB_CONNECTION, DB_USER, DB_PASSWORD);
} }

View File

@ -25,5 +25,4 @@ public class Manager {
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
} }

View File

@ -6,9 +6,9 @@ import java.io.StringWriter;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
public class Utils { class Utils {
public static String getStringFromInputStream(InputStream input) throws IOException { static String getStringFromInputStream(InputStream input) throws IOException {
StringWriter writer = new StringWriter(); StringWriter writer = new StringWriter();
IOUtils.copy(input, writer, "UTF-8"); IOUtils.copy(input, writer, "UTF-8");
return writer.toString(); return writer.toString();

View File

@ -24,40 +24,40 @@ public class AutomapClassTest {
@Before @Before
public void setup() { public void setup() {
create = db.update("CREATE TABLE IF NOT EXISTS MANAGER(id int primary key, name varchar(255))") create = db.update("CREATE TABLE IF NOT EXISTS MANAGER(id int primary key, name varchar(255))")
.count(); .count();
insert1 = db.update("INSERT INTO MANAGER(id, name) VALUES(1, 'Alan')") insert1 = db.update("INSERT INTO MANAGER(id, name) VALUES(1, 'Alan')")
.dependsOn(create) .dependsOn(create)
.count(); .count();
insert2 = db.update("INSERT INTO MANAGER(id, name) VALUES(2, 'Sarah')") insert2 = db.update("INSERT INTO MANAGER(id, name) VALUES(2, 'Sarah')")
.dependsOn(create) .dependsOn(create)
.count(); .count();
} }
@Test @Test
public void whenSelectManagersAndAutomap_thenCorrect() { public void whenSelectManagersAndAutomap_thenCorrect() {
List<Manager> managers = db.select("select id, name from MANAGER") List<Manager> managers = db.select("select id, name from MANAGER")
.dependsOn(create) .dependsOn(create)
.dependsOn(insert1) .dependsOn(insert1)
.dependsOn(insert2) .dependsOn(insert2)
.autoMap(Manager.class) .autoMap(Manager.class)
.toList() .toList()
.toBlocking() .toBlocking()
.single(); .single();
assertThat(managers.get(0) assertThat(managers.get(0)
.getId()).isEqualTo(1); .getId()).isEqualTo(1);
assertThat(managers.get(0) assertThat(managers.get(0)
.getName()).isEqualTo("Alan"); .getName()).isEqualTo("Alan");
assertThat(managers.get(1) assertThat(managers.get(1)
.getId()).isEqualTo(2); .getId()).isEqualTo(2);
assertThat(managers.get(1) assertThat(managers.get(1)
.getName()).isEqualTo("Sarah"); .getName()).isEqualTo("Sarah");
} }
@After @After
public void close() { public void close() {
db.update("DROP TABLE MANAGER") db.update("DROP TABLE MANAGER")
.dependsOn(create); .dependsOn(create);
connectionProvider.close(); connectionProvider.close();
} }
} }

View File

@ -9,7 +9,6 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.github.davidmoten.rx.jdbc.ConnectionProvider; import com.github.davidmoten.rx.jdbc.ConnectionProvider;
import com.github.davidmoten.rx.jdbc.ConnectionProviderFromUrl;
import com.github.davidmoten.rx.jdbc.Database; import com.github.davidmoten.rx.jdbc.Database;
import rx.Observable; import rx.Observable;
@ -25,34 +24,34 @@ public class AutomapInterfaceTest {
@Before @Before
public void setup() { public void setup() {
create = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE(id int primary key, name varchar(255))") create = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE(id int primary key, name varchar(255))")
.count(); .count();
insert1 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(1, 'Alan')") insert1 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(1, 'Alan')")
.dependsOn(create) .dependsOn(create)
.count(); .count();
insert2 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(2, 'Sarah')") insert2 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(2, 'Sarah')")
.dependsOn(create) .dependsOn(create)
.count(); .count();
} }
@Test @Test
public void whenSelectFromTableAndAutomap_thenCorrect() { public void whenSelectFromTableAndAutomap_thenCorrect() {
List<Employee> employees = db.select("select id, name from EMPLOYEE") List<Employee> employees = db.select("select id, name from EMPLOYEE")
.dependsOn(create) .dependsOn(create)
.dependsOn(insert1) .dependsOn(insert1)
.dependsOn(insert2) .dependsOn(insert2)
.autoMap(Employee.class) .autoMap(Employee.class)
.toList() .toList()
.toBlocking() .toBlocking()
.single(); .single();
assertThat(employees.get(0) assertThat(employees.get(0)
.id()).isEqualTo(1); .id()).isEqualTo(1);
assertThat(employees.get(0) assertThat(employees.get(0)
.name()).isEqualTo("Alan"); .name()).isEqualTo("Alan");
assertThat(employees.get(1) assertThat(employees.get(1)
.id()).isEqualTo(2); .id()).isEqualTo(2);
assertThat(employees.get(1) assertThat(employees.get(1)
.name()).isEqualTo("Sarah"); .name()).isEqualTo("Sarah");
} }
@After @After

View File

@ -6,11 +6,9 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import org.junit.After; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.github.davidmoten.rx.jdbc.ConnectionProvider; import com.github.davidmoten.rx.jdbc.ConnectionProvider;
import com.github.davidmoten.rx.jdbc.ConnectionProviderFromUrl;
import com.github.davidmoten.rx.jdbc.Database; import com.github.davidmoten.rx.jdbc.Database;
import rx.Observable; import rx.Observable;
@ -25,34 +23,34 @@ public class BasicQueryTypesTest {
@Test @Test
public void whenCreateTableAndInsertRecords_thenCorrect() { public void whenCreateTableAndInsertRecords_thenCorrect() {
create = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE(id int primary key, name varchar(255))") create = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE(id int primary key, name varchar(255))")
.count(); .count();
insert1 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(1, 'John')") insert1 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(1, 'John')")
.dependsOn(create) .dependsOn(create)
.count(); .count();
update = db.update("UPDATE EMPLOYEE SET name = 'Alan' WHERE id = 1") update = db.update("UPDATE EMPLOYEE SET name = 'Alan' WHERE id = 1")
.dependsOn(create) .dependsOn(create)
.count(); .count();
insert2 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(2, 'Sarah')") insert2 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(2, 'Sarah')")
.dependsOn(create) .dependsOn(create)
.count(); .count();
insert3 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(3, 'Mike')") insert3 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(3, 'Mike')")
.dependsOn(create) .dependsOn(create)
.count(); .count();
delete = db.update("DELETE FROM EMPLOYEE WHERE id = 2") delete = db.update("DELETE FROM EMPLOYEE WHERE id = 2")
.dependsOn(create) .dependsOn(create)
.count(); .count();
List<String> names = db.select("select name from EMPLOYEE where id < ?") List<String> names = db.select("select name from EMPLOYEE where id < ?")
.parameter(3) .parameter(3)
.dependsOn(create) .dependsOn(create)
.dependsOn(insert1) .dependsOn(insert1)
.dependsOn(insert2) .dependsOn(insert2)
.dependsOn(insert3) .dependsOn(insert3)
.dependsOn(update) .dependsOn(update)
.dependsOn(delete) .dependsOn(delete)
.getAs(String.class) .getAs(String.class)
.toList() .toList()
.toBlocking() .toBlocking()
.single(); .single();
assertEquals(Arrays.asList("Alan"), names); assertEquals(Arrays.asList("Alan"), names);
} }
@ -60,7 +58,7 @@ public class BasicQueryTypesTest {
@After @After
public void close() { public void close() {
db.update("DROP TABLE EMPLOYEE") db.update("DROP TABLE EMPLOYEE")
.dependsOn(create); .dependsOn(create);
connectionProvider.close(); connectionProvider.close();
} }
} }

View File

@ -29,7 +29,7 @@ public class InsertBlobTest {
@Before @Before
public void setup() throws IOException { public void setup() throws IOException {
create = db.update("CREATE TABLE IF NOT EXISTS SERVERLOG (id int primary key, document BLOB)") create = db.update("CREATE TABLE IF NOT EXISTS SERVERLOG (id int primary key, document BLOB)")
.count(); .count();
InputStream actualInputStream = new FileInputStream("src/test/resources/actual_clob"); InputStream actualInputStream = new FileInputStream("src/test/resources/actual_clob");
this.actualDocument = Utils.getStringFromInputStream(actualInputStream); this.actualDocument = Utils.getStringFromInputStream(actualInputStream);
@ -38,28 +38,28 @@ public class InsertBlobTest {
InputStream expectedInputStream = new FileInputStream("src/test/resources/expected_clob"); InputStream expectedInputStream = new FileInputStream("src/test/resources/expected_clob");
this.expectedDocument = Utils.getStringFromInputStream(expectedInputStream); this.expectedDocument = Utils.getStringFromInputStream(expectedInputStream);
this.insert = db.update("insert into SERVERLOG(id,document) values(?,?)") this.insert = db.update("insert into SERVERLOG(id,document) values(?,?)")
.parameter(1) .parameter(1)
.parameter(Database.toSentinelIfNull(bytes)) .parameter(Database.toSentinelIfNull(bytes))
.dependsOn(create) .dependsOn(create)
.count(); .count();
} }
@Test @Test
public void whenInsertBLOB_thenCorrect() throws IOException { public void whenInsertBLOB_thenCorrect() throws IOException {
db.select("select document from SERVERLOG where id = 1") db.select("select document from SERVERLOG where id = 1")
.dependsOn(create) .dependsOn(create)
.dependsOn(insert) .dependsOn(insert)
.getAs(String.class) .getAs(String.class)
.toList() .toList()
.toBlocking() .toBlocking()
.single(); .single();
assertEquals(expectedDocument, actualDocument); assertEquals(expectedDocument, actualDocument);
} }
@After @After
public void close() { public void close() {
db.update("DROP TABLE SERVERLOG") db.update("DROP TABLE SERVERLOG")
.dependsOn(create); .dependsOn(create);
connectionProvider.close(); connectionProvider.close();
} }
} }

View File

@ -11,7 +11,6 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.github.davidmoten.rx.jdbc.ConnectionProvider; import com.github.davidmoten.rx.jdbc.ConnectionProvider;
import com.github.davidmoten.rx.jdbc.ConnectionProviderFromUrl;
import com.github.davidmoten.rx.jdbc.Database; import com.github.davidmoten.rx.jdbc.Database;
import rx.Observable; import rx.Observable;
@ -29,7 +28,7 @@ public class InsertClobTest {
@Before @Before
public void setup() throws IOException { public void setup() throws IOException {
create = db.update("CREATE TABLE IF NOT EXISTS SERVERLOG (id int primary key, document CLOB)") create = db.update("CREATE TABLE IF NOT EXISTS SERVERLOG (id int primary key, document CLOB)")
.count(); .count();
InputStream actualInputStream = new FileInputStream("src/test/resources/actual_clob"); InputStream actualInputStream = new FileInputStream("src/test/resources/actual_clob");
this.actualDocument = Utils.getStringFromInputStream(actualInputStream); this.actualDocument = Utils.getStringFromInputStream(actualInputStream);
@ -37,28 +36,28 @@ public class InsertClobTest {
InputStream expectedInputStream = new FileInputStream("src/test/resources/expected_clob"); InputStream expectedInputStream = new FileInputStream("src/test/resources/expected_clob");
this.expectedDocument = Utils.getStringFromInputStream(expectedInputStream); this.expectedDocument = Utils.getStringFromInputStream(expectedInputStream);
this.insert = db.update("insert into SERVERLOG(id,document) values(?,?)") this.insert = db.update("insert into SERVERLOG(id,document) values(?,?)")
.parameter(1) .parameter(1)
.parameter(Database.toSentinelIfNull(actualDocument)) .parameter(Database.toSentinelIfNull(actualDocument))
.dependsOn(create) .dependsOn(create)
.count(); .count();
} }
@Test @Test
public void whenSelectCLOB_thenCorrect() throws IOException { public void whenSelectCLOB_thenCorrect() throws IOException {
db.select("select document from SERVERLOG where id = 1") db.select("select document from SERVERLOG where id = 1")
.dependsOn(create) .dependsOn(create)
.dependsOn(insert) .dependsOn(insert)
.getAs(String.class) .getAs(String.class)
.toList() .toList()
.toBlocking() .toBlocking()
.single(); .single();
assertEquals(expectedDocument, actualDocument); assertEquals(expectedDocument, actualDocument);
} }
@After @After
public void close() { public void close() {
db.update("DROP TABLE SERVERLOG") db.update("DROP TABLE SERVERLOG")
.dependsOn(create); .dependsOn(create);
connectionProvider.close(); connectionProvider.close();
} }
} }

View File

@ -7,7 +7,6 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.github.davidmoten.rx.jdbc.ConnectionProvider; import com.github.davidmoten.rx.jdbc.ConnectionProvider;
import com.github.davidmoten.rx.jdbc.ConnectionProviderFromUrl;
import com.github.davidmoten.rx.jdbc.Database; import com.github.davidmoten.rx.jdbc.Database;
import rx.Observable; import rx.Observable;
@ -24,26 +23,26 @@ public class ReturnKeysTest {
public void setup() { public void setup() {
begin = db.beginTransaction(); begin = db.beginTransaction();
createStatement = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE(id int auto_increment primary key, name varchar(255))") createStatement = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE(id int auto_increment primary key, name varchar(255))")
.dependsOn(begin) .dependsOn(begin)
.count(); .count();
} }
@Test @Test
public void whenInsertAndReturnGeneratedKey_thenCorrect() { public void whenInsertAndReturnGeneratedKey_thenCorrect() {
Integer key = db.update("INSERT INTO EMPLOYEE(name) VALUES('John')") Integer key = db.update("INSERT INTO EMPLOYEE(name) VALUES('John')")
.dependsOn(createStatement) .dependsOn(createStatement)
.returnGeneratedKeys() .returnGeneratedKeys()
.getAs(Integer.class) .getAs(Integer.class)
.count() .count()
.toBlocking() .toBlocking()
.single(); .single();
assertThat(key).isEqualTo(1); assertThat(key).isEqualTo(1);
} }
@After @After
public void close() { public void close() {
db.update("DROP TABLE EMPLOYEE") db.update("DROP TABLE EMPLOYEE")
.dependsOn(createStatement); .dependsOn(createStatement);
connectionProvider.close(); connectionProvider.close();
} }
} }

View File

@ -6,7 +6,6 @@ import org.junit.After;
import org.junit.Test; import org.junit.Test;
import com.github.davidmoten.rx.jdbc.ConnectionProvider; import com.github.davidmoten.rx.jdbc.ConnectionProvider;
import com.github.davidmoten.rx.jdbc.ConnectionProviderFromUrl;
import com.github.davidmoten.rx.jdbc.Database; import com.github.davidmoten.rx.jdbc.Database;
import rx.Observable; import rx.Observable;
@ -23,20 +22,20 @@ public class TransactionTest {
public void whenCommitTransaction_thenRecordUpdated() { public void whenCommitTransaction_thenRecordUpdated() {
begin = db.beginTransaction(); begin = db.beginTransaction();
createStatement = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE(id int primary key, name varchar(255))") createStatement = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE(id int primary key, name varchar(255))")
.dependsOn(begin) .dependsOn(begin)
.count(); .count();
insertStatement = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(1, 'John')") insertStatement = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(1, 'John')")
.dependsOn(createStatement) .dependsOn(createStatement)
.count(); .count();
updateStatement = db.update("UPDATE EMPLOYEE SET name = 'Tom' WHERE id = 1") updateStatement = db.update("UPDATE EMPLOYEE SET name = 'Tom' WHERE id = 1")
.dependsOn(insertStatement) .dependsOn(insertStatement)
.count(); .count();
commit = db.commit(updateStatement); commit = db.commit(updateStatement);
String name = db.select("select name from EMPLOYEE WHERE id = 1") String name = db.select("select name from EMPLOYEE WHERE id = 1")
.dependsOn(commit) .dependsOn(commit)
.getAs(String.class) .getAs(String.class)
.toBlocking() .toBlocking()
.single(); .single();
assertEquals("Tom", name); assertEquals("Tom", name);
} }
@ -44,7 +43,7 @@ public class TransactionTest {
@After @After
public void close() { public void close() {
db.update("DROP TABLE EMPLOYEE") db.update("DROP TABLE EMPLOYEE")
.dependsOn(createStatement); .dependsOn(createStatement);
connectionProvider.close(); connectionProvider.close();
} }
} }