
In computer software, a data access object (DAO) is an object that provides an abstract interface to some type of database or other persistence mechanism. By mapping application calls to the persistence layer, DAO provide some specific data operations without exposing details of the database. This isolation supports the Single responsibility principle. It separates what data accesses the application needs, in terms of domain-specific objects and data types (the public interface of the DAO), from how these needs can be satisfied with a specific DBMS, database schema, etc. sumber: wiki
Kali ini kita akan belajar untuk membuat template class DAO, untuk memulai-nya kita harus pelajari dulu Apache Velocity Generate POJO. pembahasan kali ini kita beri judul:
Apache Velocity Create Template DAO
Mari kita ikuti langkah-langkah pembelajaran Apache Velocity Create Template DAO berikut ini:
1). Karena artikel ini melanjutkan pembahasan Apache Velocity Generate POJO maka kita buka projek “Belajar Apache Velocity” dengan editor eclipse
2). Create file “dao.vm” simpan di folder “resources”
3). Buka file “dao.vm” lalu ketikkan coding dibawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
package com.wijaksana; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class $utility.toString($class.Name)Dao { private PostgreSQLJDBC postgreSQLJDBC; public $utility.toString($class.Name)Dao(PostgreSQLJDBC postgreSQLJDBC) { this.postgreSQLJDBC = postgreSQLJDBC; } public void create($utility.toString($class.Name) $utility.firstToLowerCase($class.Name)) { Connection conn = postgreSQLJDBC.getConnection(); try { PreparedStatement ps = conn.prepareStatement("INSERT INTO $utility.firstToLowerCase($class.Name) " + "($utility.columnNameDomain($class.Attributes, false)) " + "Values($utility.columnNameDomain($class.Attributes, true))"); #foreach($att in $class.Attributes) ps.set$utility.firstToUpperCase($att.Type)($foreach.count, $utility.firstToLowerCase($class.Name)#[[.]]#get$utility.firstToUpperCase($att.Name)#[[()]]#); #end System.out.println("Insert " + ps.executeUpdate() + " rows"); conn.commit(); ps.close(); } catch (SQLException e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } }; public void read() { Connection conn = postgreSQLJDBC.getConnection(); try { PreparedStatement ps = conn.prepareStatement("SELECT * FROM $utility.firstToLowerCase($class.Name)"); ResultSet rs = ps.executeQuery(); while (rs.next()) { #foreach($att in $class.Attributes) $att.Type $att.Name = rs.get$utility.firstToUpperCase($att.Type)("$att.Name"); #end System.out.println($utility.columnNameToPrint($class.Attributes)); } rs.close(); ps.close(); } catch (SQLException e) { e.printStackTrace(); } }; public void update($utility.toString($class.Name) $utility.firstToLowerCase($class.Name)) { Connection conn = postgreSQLJDBC.getConnection(); try { PreparedStatement ps = conn.prepareStatement("UPDATE $utility.firstToLowerCase($class.Name) " + "SET $utility.columnNameDomainUpdate($class.Attributes) " + "WHERE $class.Attributes[0].Name=?"); #foreach($att in $class.Attributes) #if ($foreach.count != 1) #set ($index = $foreach.count - 1) ps.set$utility.firstToUpperCase($att.Type)($index, $utility.firstToLowerCase($class.Name)#[[.]]#get$utility.firstToUpperCase($att.Name)#[[()]]#); #end #end #set ($att = $class.Attributes[0]) #set ($index = $class.Attributes.size()) ps.set$utility.firstToUpperCase($att.Type)($index, $utility.firstToLowerCase($class.Name)#[[.]]#get$utility.firstToUpperCase($att.Name)#[[()]]#); System.out.println("Update " + ps.executeUpdate() + " rows"); conn.commit(); ps.close(); } catch (SQLException e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } }; public void delete($utility.toString($class.Name) $utility.firstToLowerCase($class.Name)) { Connection conn = postgreSQLJDBC.getConnection(); try { PreparedStatement ps = conn.prepareStatement("DELETE FROM $utility.firstToLowerCase($class.Name) " + "WHERE $class.Attributes[0].Name=?"); #set ($att = $class.Attributes[0]) #set ($index = 1) ps.set$utility.firstToUpperCase($att.Type)($index, $utility.firstToLowerCase($class.Name)#[[.]]#get$utility.firstToUpperCase($att.Name)#[[()]]#); System.out.println("Delete " + ps.executeUpdate() + " rows"); conn.commit(); ps.close(); } catch (SQLException e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } }; public static void main(String[] args) { PostgreSQLJDBC jdbc = new PostgreSQLJDBC(); jdbc.createConnection(); $utility.toString($class.Name)Dao ups = new $utility.toString($class.Name)Dao(jdbc); ups.read(); $utility.toString($class.Name) data = new $utility.toString($class.Name)(); #set ($data = 24) #foreach($att in $class.Attributes) data.set$utility.firstToUpperCase($att.Name)($utility.generateDataByColumnType($att)); #end ups.create(data); ups.read(); #set ($att = $class.Attributes[1]) data.set$utility.firstToUpperCase($att.Name)($utility.generateDataByColumnType2($att)); ups.update(data); ups.read(); ups.delete(data); ups.read(); } } |
4). Buka Class “GeneratorUtility”, lalu tambahkan method-method terlihat seperti coding dibawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
public String firstToLowerCase(String text) { char[] textArray = text.toCharArray(); textArray[0] = Character.toLowerCase(textArray[0]); return new String(textArray); } public String columnNameDomain(ArrayList<AttributeDescriptor> attributes, boolean isQuestionMark) { String columns = null; for (AttributeDescriptor att : attributes) { if (columns == null) { columns = (isQuestionMark == true ? "?" : att.getName()); } else { columns += ", " + (isQuestionMark == true ? "?" : att.getName()); } } return columns; } public String columnNameDomainUpdate(ArrayList<AttributeDescriptor> attributes) { String columns = null; for (int i = 1; i < attributes.size(); i++) { AttributeDescriptor att = attributes.get(i); if (columns == null) { columns = att.getName() + "=?"; } else { columns += ", " + att.getName() + "=?"; } } return columns; } public String columnNameToPrint(ArrayList<AttributeDescriptor> attributes) { String columns = null; for (AttributeDescriptor att : attributes) { if (columns == null) { columns = att.getName(); } else { columns += " + \" : \" + " + att.getName(); } } return columns; } public String generateDataByColumnType(AttributeDescriptor att) { if ("String".contains(att.getType())) { return "\"" + "24" + "\""; } else { return "24"; } } public String generateDataByColumnType2(AttributeDescriptor att) { if ("String".contains(att.getType())) { return "\"" + "1234" + "\""; } else { return "1234"; } } |
5). Kita lanjutka ke artikel Apache Velocity Generate DAO
Semoga Membantu,
Salam berbagi,
Yulianto Wijaksana