diff --git a/persistence-modules/core-java-persistence-3/pom.xml b/persistence-modules/core-java-persistence-3/pom.xml
new file mode 100644
index 0000000000..26ac2a5218
--- /dev/null
+++ b/persistence-modules/core-java-persistence-3/pom.xml
@@ -0,0 +1,29 @@
+
+ 4.0.0
+ com.baeldung.core-java-persistence-3
+ core-java-persistence-3
+ core-java-persistence-3
+ 0.1.0-SNAPSHOT
+ jar
+
+ com.baeldung
+ persistence-modules
+ 1.0.0-SNAPSHOT
+
+
+
+ com.h2database
+ h2
+ ${h2.version}
+
+
+ commons-dbutils
+ commons-dbutils
+ ${commons-dbutils.version}
+
+
+
+ 2.1.214
+ 1.8.1
+
+
\ No newline at end of file
diff --git a/persistence-modules/core-java-persistence-3/src/test/java/com/baeldung/resultsettomap/ResultSetToMapUnitTest.java b/persistence-modules/core-java-persistence-3/src/test/java/com/baeldung/resultsettomap/ResultSetToMapUnitTest.java
new file mode 100644
index 0000000000..e449beb83a
--- /dev/null
+++ b/persistence-modules/core-java-persistence-3/src/test/java/com/baeldung/resultsettomap/ResultSetToMapUnitTest.java
@@ -0,0 +1,107 @@
+package com.baeldung.resultsettomap;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.dbutils.QueryRunner;
+import org.apache.commons.dbutils.ResultSetHandler;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ResultSetToMapUnitTest {
+ private static Connection connection = null;
+ private static final String JDBC_URL = "jdbc:h2:mem:testDatabase";
+ private static final String USERNAME = "dbUser";
+ private static final String PASSWORD = "dbPassword";
+
+ @Before
+ public void setup() throws Exception {
+ connection = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);
+ initialDataSetup();
+ }
+
+ private void initialDataSetup() throws SQLException {
+ Statement statement = connection.createStatement();
+ String ddlQuery = "CREATE TABLE employee (empId INTEGER not null, empName VARCHAR(50), empCity VARCHAR(50), PRIMARY KEY (empId))";
+ statement.execute(ddlQuery);
+ List sqlQueryList = Arrays.asList("INSERT INTO employee VALUES (1, 'Steve','London')", "INSERT INTO employee VALUES (2, 'John','London')", "INSERT INTO employee VALUES (3, 'David', 'Sydney')",
+ "INSERT INTO employee VALUES (4, 'Kevin','London')", "INSERT INTO employee VALUES (5, 'Jade', 'Sydney')");
+
+ for (String query : sqlQueryList) {
+ statement.execute(query);
+ }
+ }
+
+ @Test
+ public void whenUsingContainsKey_thenConvertResultSetToMap() throws SQLException {
+ ResultSet resultSet = connection.prepareStatement("SELECT * FROM employee")
+ .executeQuery();
+ Map> valueMap = new HashMap<>();
+
+ while (resultSet.next()) {
+ String empCity = resultSet.getString("empCity");
+ String empName = resultSet.getString("empName");
+ if (!valueMap.containsKey(empCity)) {
+ valueMap.put(empCity, new ArrayList<>());
+ }
+ valueMap.get(empCity)
+ .add(empName);
+ }
+ assertEquals(3, valueMap.get("London")
+ .size());
+ }
+
+ @Test
+ public void whenUsingComputeIfAbsent_thenConvertResultSetToMap() throws SQLException {
+ ResultSet resultSet = connection.prepareStatement("SELECT * FROM employee")
+ .executeQuery();
+ Map> valueMap = new HashMap<>();
+
+ while (resultSet.next()) {
+ String empCity = resultSet.getString("empCity");
+ String empName = resultSet.getString("empName");
+ valueMap.computeIfAbsent(empCity, data -> new ArrayList<>())
+ .add(empName);
+ }
+ assertEquals(3, valueMap.get("London")
+ .size());
+ }
+
+ @Test
+ public void whenUsingDbUtils_thenConvertResultSetToMap() throws SQLException {
+
+ ResultSetHandler