Pada kali ini akan membahas tentang penggunaan multiple connection dan konsep OOP pada class QueryBuilder untuk generate query pada aplikasi database. Penggunaan multiple connection dan konsep OOP pada class QueryBuilder dapat menjadi solusi efektif dalam meningkatkan performa aplikasi database. Selain itu, penekanan pada konsep OOP dan penggunaan interface IDatabaseConnection juga dapat meningkatkan fleksibilitas dan maintainability dari aplikasi. Yuk, simak selengkapnya!
Dalam dunia pengembangan aplikasi database, seringkali kita dihadapkan dengan kebutuhan untuk melakukan query pada database yang berbeda, seperti MySQL, SQL Server, atau Oracle. Untuk itu, diperlukan suatu solusi yang efektif untuk menghasilkan query pada database yang berbeda dengan menggunakan class yang sama, tanpa harus melakukan perubahan pada source code aplikasi yang sudah ada. Salah satu solusi yang bisa digunakan adalah penggunaan class QueryBuilder dengan menerapkan konsep OOP dan multiple connection.
Berikut ini merupakan source codenya
using System.Data;
using System.Data.SqlClient;
using MySql.Data.MySqlClient;
// Interface untuk koneksi database
public interface IDatabaseConnection
{
void OpenConnection();
void CloseConnection();
DataTable ExecuteQuery(string query);
}
// Class untuk koneksi ke MySQL
public class MySqlConnection : IDatabaseConnection
{
private readonly IDbConnection connection;
// Constructor untuk inisialisasi koneksi ke MySQL
public MySqlConnection(string server, string database, string uid, string password)
{
connection = new MySql.Data.MySqlClient.MySqlConnection($"server={server};database={database};uid={uid};password={password}");
}
// Method untuk membuka koneksi ke MySQL
public void OpenConnection()
{
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
}
// Method untuk menutup koneksi ke MySQL
public void CloseConnection()
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
// Method untuk mengeksekusi query pada MySQL
public DataTable ExecuteQuery(string query)
{
OpenConnection();
IDbCommand command = connection.CreateCommand();
command.CommandText = query;
IDataReader reader = command.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(reader);
CloseConnection();
return dataTable;
}
}
// Class untuk koneksi ke SQL Server
public class SqlServerConnection : IDatabaseConnection
{
private readonly IDbConnection connection;
// Constructor untuk inisialisasi koneksi ke SQL Server
public SqlServerConnection(string server, string database, string uid, string password)
{
connection = new SqlConnection($"Server={server};Database={database};User Id={uid};Password={password};");
}
// Method untuk membuka koneksi ke SQL Server
public void OpenConnection()
{
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
}
// Method untuk menutup koneksi ke SQL Server
public void CloseConnection()
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
// Method untuk mengeksekusi query pada SQL Server
public DataTable ExecuteQuery(string query)
{
OpenConnection();
IDbCommand command = connection.CreateCommand();
command.CommandText = query;
IDataReader reader = command.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(reader);
CloseConnection();
return dataTable;
}
}
// Contoh class untuk generate query
public class QueryBuilder
{
private IDatabaseConnection connection;
private string tableName;
private List<string> columns = new List<string>();
private string whereClause;
private string orderByClause;
// Constructor untuk inisialisasi class dengan MySQL
public QueryBuilder(string server, string database, string uid, string password, bool isMySql = true)
{
if (isMySql)
{
connection = new MySqlConnection(server, database, uid, password);
}
else
{
connection = new SqlServerConnection(server, database, uid, password);
}
}
// Method untuk menambahkan kolom pada select query
public void Select(string column)
{
columns.Add(column);
}
// Method untuk menambahkan where clause pada query
public void Where(string clause)
{
whereClause = clause;
}
// Method untuk menambahkan order by clause pada query
public void OrderBy(string clause)
{
orderByClause = clause;
}
// Method untuk generate select query
public string GetSelectQuery()
{
string query = "SELECT ";
if (columns.Count > 0)
{
query += string.Join(", ", columns);
}
else
{
query += "*";
}
query += " FROM " + tableName;
if (!string.IsNullOrEmpty(whereClause))
{
query += " WHERE " + whereClause;
}
if (!string.IsNullOrEmpty(orderByClause))
{
query += " ORDER BY " + orderByClause;
}
return query;
}
// Method untuk membuka koneksi ke database
public void OpenConnection()
{
connection.OpenConnection();
}
// Method untuk menutup koneksi ke database
public void CloseConnection()
{
connection.CloseConnection();
}
// Method untuk melakukan query pada database dan mengembalikan hasil dalam bentuk DataTable
public DataTable ExecuteQuery(string query)
{
return connection.ExecuteQuery(query);
}
Semoga membantu