From deb15e2733bac2e68adac5a271a13d6c453f1360 Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Mon, 4 Apr 2016 12:24:15 +0530 Subject: [PATCH] JDBC removed... --- .../java/com/iluwatar/datamapper/App.java | 209 +++++++------- .../java/com/iluwatar/datamapper/Student.java | 186 +++++++------ .../datamapper/StudentDataMapper.java | 65 +++-- .../datamapper/StudentMySQLDataMapper.java | 257 +++++++----------- .../datamapper/StudentOracleDataMapper.java | 257 +++++++----------- 5 files changed, 433 insertions(+), 541 deletions(-) diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java index 6345b5a4c..8b5853609 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java @@ -1,105 +1,104 @@ -/** - * The MIT License Copyright (c) 2014 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.util.Optional; -import java.util.UUID; - -import org.apache.log4j.Logger; - -/** - * - * The Data Mapper (DM) is a layer of software that separates the in-memory objects from the - * database. Its responsibility is to transfer data between the two and also to isolate them from - * each other. With Data Mapper the in-memory objects needn't know even that there's a database - * present; they need no SQL interface code, and certainly no knowledge of the database schema. (The - * database schema is always ignorant of the objects that use it.) Since it's a form of Mapper , - * Data Mapper itself is even unknown to the domain layer. - *

- * The below example demonstrates basic CRUD operations: select, add, update, and delete. - * - */ -public final class App { - - private static Logger log = Logger.getLogger(App.class); - - - private static final String DB_TYPE_ORACLE = "Oracle"; - private static final String DB_TYPE_MYSQL = "MySQL"; - - - /** - * Program entry point. - * - * @param args command line args. - */ - public static final void main(final String... args) { - - if (log.isInfoEnabled() & args.length > 0) { - log.debug("App.main(), db type: " + args[0]); - } - - StudentDataMapper mapper = null; - - /* Check the desired db type from runtime arguments */ - if (args.length == 0) { - - /* Create default data mapper for mysql */ - mapper = new StudentMySQLDataMapper(); - - } else if (args.length > 0 && DB_TYPE_ORACLE.equalsIgnoreCase(args[0])) { - - /* Create new data mapper for mysql */ - mapper = new StudentMySQLDataMapper(); - - } else if (args.length > 0 && DB_TYPE_MYSQL.equalsIgnoreCase(args[0])) { - - /* Create new data mapper for oracle */ - mapper = new StudentMySQLDataMapper(); - } else { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Following data source(" + args[0] + ") is not supported"); - } - - /* Create new student */ - Student student = new Student(UUID.randomUUID(), 1, "Adam", 'A'); - - /* Add student in respectibe db */ - mapper.insert(student); - - /* Find this student */ - final Optional studentToBeFound = mapper.find(student.getGuId()); - - if (log.isDebugEnabled()) { - log.debug("App.main(), db find returned : " + studentToBeFound); - } - - /* Update existing student object */ - student = new Student(student.getGuId(), 1, "AdamUpdated", 'A'); - - /* Update student in respectibe db */ - mapper.update(student); - - /* Delete student in db */ - mapper.delete(student); - } - - private App() {} -} +/** + * The MIT License Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.Optional; + +import org.apache.log4j.Logger; + +/** + * + * The Data Mapper (DM) is a layer of software that separates the in-memory objects from the + * database. Its responsibility is to transfer data between the two and also to isolate them from + * each other. With Data Mapper the in-memory objects needn't know even that there's a database + * present; they need no SQL interface code, and certainly no knowledge of the database schema. (The + * database schema is always ignorant of the objects that use it.) Since it's a form of Mapper , + * Data Mapper itself is even unknown to the domain layer. + *

+ * The below example demonstrates basic CRUD operations: Create, Read, Update, and Delete. + * + */ +public final class App { + + private static Logger log = Logger.getLogger(App.class); + + + private static final String DB_TYPE_ORACLE = "Oracle"; + private static final String DB_TYPE_MYSQL = "MySQL"; + + + /** + * Program entry point. + * + * @param args command line args. + */ + public static final void main(final String... args) { + + if (log.isInfoEnabled() & args.length > 0) { + log.debug("App.main(), db type: " + args[0]); + } + + StudentDataMapper mapper = null; + + /* Check the desired db type from runtime arguments */ + if (args.length == 0) { + + /* Create default data mapper for mysql */ + mapper = new StudentMySQLDataMapper(); + + } else if (args.length > 0 && DB_TYPE_ORACLE.equalsIgnoreCase(args[0])) { + + /* Create new data mapper for mysql */ + mapper = new StudentMySQLDataMapper(); + + } else if (args.length > 0 && DB_TYPE_MYSQL.equalsIgnoreCase(args[0])) { + + /* Create new data mapper for oracle */ + mapper = new StudentMySQLDataMapper(); + } else { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Following data mapping type(" + args[0] + ") is not supported"); + } + + /* Create new student */ + Student student = new Student(1, "Adam", 'A'); + + /* Add student in respectibe db */ + mapper.insert(student); + + /* Find this student */ + final Optional studentToBeFound = mapper.find(student.getStudentId()); + + if (log.isDebugEnabled()) { + log.debug("App.main(), db find returned : " + studentToBeFound); + } + + /* Update existing student object */ + student = new Student(student.getStudentId(), "AdamUpdated", 'A'); + + /* Update student in respectibe db */ + mapper.update(student); + + /* Delete student in db */ + mapper.delete(student); + } + + private App() {} +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java b/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java index 920d4d9ee..2f0c6d0a6 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java @@ -1,83 +1,103 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.io.Serializable; -import java.util.UUID; - -public final class Student implements Serializable { - - private static final long serialVersionUID = 1L; - - private UUID guid; - private int studentID; - private String name; - private char grade; - - public Student() { - this.guid = UUID.randomUUID(); - } - - public Student(final UUID guid, final int studentID, final String name, final char grade) { - super(); - - this.guid = guid; - this.studentID = studentID; - this.name = name; - this.grade = grade; - } - - - public Student(final UUID guid) { - this.guid = guid; - } - - public final int getStudentId() { - return studentID; - } - - public final void setStudentId(final int studentID) { - this.studentID = studentID; - } - - public final String getName() { - return name; - } - - public final void setName(final String name) { - this.name = name; - } - - public final char getGrade() { - return grade; - } - - public final void setGrade(final char grade) { - this.grade = grade; - } - - public final UUID getGuId() { - return guid; - } - - @Override - public final String toString() { - return "Student [guid=" + guid + ", studentID=" + studentID + ", name=" + name + ", grade=" + grade + "]"; - } -} +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + + +import java.io.Serializable; + +public final class Student implements Serializable { + + private static final long serialVersionUID = 1L; + + private int studentId; + private String name; + private char grade; + + public Student() { + + } + + public Student(final int studentId, final String name, final char grade) { + super(); + + this.studentId = studentId; + this.name = name; + this.grade = grade; + } + + public final int getStudentId() { + return studentId; + } + + public final void setStudentId(final int studentId) { + this.studentId = studentId; + } + + public final String getName() { + return name; + } + + public final void setName(final String name) { + this.name = name; + } + + public final char getGrade() { + return grade; + } + + public final void setGrade(final char grade) { + this.grade = grade; + } + + @Override + public boolean equals(final Object inputObject) { + + boolean isEqual = false; + + /* Check if both objects are same */ + if (this == inputObject) { + + isEqual = true; + } + /* Check if objects belong to same class */ + else if (inputObject != null && getClass() == inputObject.getClass()) { + + final Student student = (Student) inputObject; + + /* If student id matched */ + if (this.getStudentId() == student.getStudentId()) { + + isEqual = true; + } + } + return isEqual; + } + + @Override + public int hashCode() { + + /* Student id is assumed to be unique */ + return this.getStudentId(); + } + + @Override + public final String toString() { + return "Student [studentId=" + studentId + ", name=" + name + ", grade=" + grade + "]"; + } +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java index 2493a9478..1fa33e067 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java @@ -1,33 +1,32 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.util.Optional; -import java.util.UUID; - -public interface StudentDataMapper { - - public Optional find(final UUID uniqueID) throws DataMapperException; - - public void insert(final Student student) throws DataMapperException; - - public void update(final Student student) throws DataMapperException; - - public void delete(final Student student) throws DataMapperException; -} +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.Optional; + +public interface StudentDataMapper { + + public Optional find(final int studentId); + + public void insert(final Student student) throws DataMapperException; + + public void update(final Student student) throws DataMapperException; + + public void delete(final Student student) throws DataMapperException; +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java index 7520bc923..cbb97bfa9 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java @@ -1,160 +1,97 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Optional; -import java.util.UUID; - -public final class StudentMySQLDataMapper implements StudentDataMapper { - - @Override - public final Optional find(final UUID uniqueID) throws DataMapperException { - - try { - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "SELECT `guid`, `grade`, `studentID`, `name` FROM `students` where `guid`=?"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set unique id in sql statement */ - dbStatement.setString(1, uniqueID.toString()); - - /* Execute the sql query */ - final ResultSet rs = dbStatement.executeQuery(); - - while (rs.next()) { - - /* Create new student */ - final Student student = new Student(UUID.fromString(rs.getString("guid"))); - - /* Set all values from database in java object */ - student.setName(rs.getString("name")); - student.setGrade(rs.getString("grade").charAt(0)); - student.setStudentId(rs.getInt("studentID")); - - return Optional.of(student); - } - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from MySQL data source.", e); - } - - /* Return empty value */ - return Optional.empty(); - } - - @Override - public final void update(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "UPDATE `students` SET `grade`=?, `studentID`=?, `name`=? where `guid`=?"; - - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, Character.toString(student.getGrade())); - dbStatement.setInt(2, student.getStudentId()); - dbStatement.setString(3, student.getName()); - dbStatement.setString(4, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from MySQL data source.", e); - } - } - - @Override - public final void insert(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "INSERT INTO `students` (`grade`, `studentID`, `name`, `guid`) VALUES (?, ?, ?, ?)"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, Character.toString(student.getGrade())); - dbStatement.setInt(2, student.getStudentId()); - dbStatement.setString(3, student.getName()); - dbStatement.setString(4, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from MySQL data source.", e); - } - } - - @Override - public final void delete(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "DELETE FROM `students` where `guid`=?"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from MySQL data source.", e); - } - } -} +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.List; +import java.util.Optional; + +public final class StudentMySQLDataMapper implements StudentDataMapper { + + /* Note: Normally this would be in the form of an actual database */ + private List students; + + @Override + public final Optional find(final int studentId) { + + /* Compare with existing students */ + for (final Student student : this.students) { + + /* Check if student is found */ + if (student.getStudentId() == studentId) { + + return Optional.of(student); + } + } + + /* Return empty value */ + return Optional.empty(); + } + + @Override + public final void update(final Student studentToBeUpdated) throws DataMapperException { + + + /* Check with existing students */ + if (this.students.contains(studentToBeUpdated)) { + + /* Get the index of student in list */ + final int index = this.students.indexOf(studentToBeUpdated); + + /* Update the student in list */ + this.students.set(index, studentToBeUpdated); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeUpdated.getName() + "] is not found"); + } + } + + @Override + public final void insert(final Student studentToBeInserted) throws DataMapperException { + + /* Check with existing students */ + if (!this.students.contains(studentToBeInserted)) { + + /* Add student in list */ + this.students.add(studentToBeInserted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student already [" + studentToBeInserted.getName() + "] exists"); + } + } + + @Override + public final void delete(final Student studentToBeDeleted) throws DataMapperException { + + /* Check with existing students */ + if (this.students.contains(studentToBeDeleted)) { + + /* Delete the student from list */ + this.students.remove(studentToBeDeleted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); + } + } +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java index 0b6b7ebbf..6abf1c55a 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java @@ -1,160 +1,97 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Optional; -import java.util.UUID; - -public final class StudentOracleDataMapper implements StudentDataMapper { - - @Override - public final Optional find(final UUID uniqueID) throws DataMapperException { - - try { - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "SELECT `guid`, `grade`, `studentID`, `name` FROM `students` where `guid`=?"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set unique id in sql statement */ - dbStatement.setString(1, uniqueID.toString()); - - /* Execute the sql query */ - final ResultSet rs = dbStatement.executeQuery(); - - while (rs.next()) { - - /* Create new student */ - final Student student = new Student(UUID.fromString(rs.getString("guid"))); - - /* Set all values from database in java object */ - student.setName(rs.getString("name")); - student.setGrade(rs.getString("grade").charAt(0)); - student.setStudentId(rs.getInt("studentID")); - - return Optional.of(student); - } - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from Oracle data source.", e); - } - - /* Return empty value */ - return Optional.empty(); - } - - @Override - public final void update(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "UPDATE `students` SET `grade`=?, `studentID`=?, `name`=? where `guid`=?"; - - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, Character.toString(student.getGrade())); - dbStatement.setInt(2, student.getStudentId()); - dbStatement.setString(3, student.getName()); - dbStatement.setString(4, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from Oracle data source.", e); - } - } - - @Override - public final void insert(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "INSERT INTO `students` (`grade`, `studentID`, `name`, `guid`) VALUES (?, ?, ?, ?)"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, Character.toString(student.getGrade())); - dbStatement.setInt(2, student.getStudentId()); - dbStatement.setString(3, student.getName()); - dbStatement.setString(4, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from Oracle data source.", e); - } - } - - @Override - public final void delete(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "DELETE FROM `students` where `guid`=?"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from Oracle data source.", e); - } - } -} +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.List; +import java.util.Optional; + +public final class StudentOracleDataMapper implements StudentDataMapper { + + /* Note: Normally this would be in the form of an actual database */ + private List students; + + @Override + public final Optional find(final int studentId) { + + /* Compare with existing students */ + for (final Student student : this.students) { + + /* Check if student is found */ + if (student.getStudentId() == studentId) { + + return Optional.of(student); + } + } + + /* Return empty value */ + return Optional.empty(); + } + + @Override + public final void update(final Student studentToBeUpdated) throws DataMapperException { + + + /* Check with existing students */ + if (this.students.contains(studentToBeUpdated)) { + + /* Get the index of student in list */ + final int index = this.students.indexOf(studentToBeUpdated); + + /* Update the student in list */ + this.students.set(index, studentToBeUpdated); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeUpdated.getName() + "] is not found"); + } + } + + @Override + public final void insert(final Student studentToBeInserted) throws DataMapperException { + + /* Check with existing students */ + if (!this.students.contains(studentToBeInserted)) { + + /* Add student in list */ + this.students.add(studentToBeInserted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student already [" + studentToBeInserted.getName() + "] exists"); + } + } + + @Override + public final void delete(final Student studentToBeDeleted) throws DataMapperException { + + /* Check with existing students */ + if (this.students.contains(studentToBeDeleted)) { + + /* Delete the student from list */ + this.students.remove(studentToBeDeleted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); + } + } +}