Descargar Conector Java
馃摝 Descargar Connector/J Conecctor para Glashfish.
JDBC URL
jdbc:mysql://localhost:3306/mysql?zeroDateTimeBehavior=CONVERT_TO_NULL&useTimezone=true&serverTimezon=UTC
Configuracion Manual de Driver
com.mysql.cj.jdbc.Driver
MySQL (Connector/J driver)
Instalacion y Prueba de Conector
Usaremos la herramienta BIzagui Modeler
馃摝 Descargar Bizagui Modeler Software de mapeo de procesos de negocio gratuito, intuitivo y colaborativo utilizado por millones de personas en todo el mundo.
馃摝 Software Online Visual Online Visual Herramienta de diagrama de BPMN en l铆nea.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.8.0</version>
</dependency>
Datos Clase Conexion
public class Conexion {
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/control_clientes?useSSL=false&useTimezone=true&serverTimezone=UTC&allowPublicKeyRetrieval=true";
private static final String JDBC_USER = "root";
private static final String JDBC_PASSWORD = "briandb";
public static BasicDataSource getDataSource(){
BasicDataSource ds = new BasicDataSource();
ds.setUrl(JDBC_URL);
ds.setUsername(JDBC_USER);
ds.setPassword(JDBC_PASSWORD);
ds.setInitialSize(50); // 50 conecciones
return ds;
}
public static Connection getConnection() throws SQLException{
return getDataSource().getConnection();
}
public static void close(ResultSet rs){
try {
rs.close();
} catch (SQLException ex) {
ex.printStackTrace(System.out);
}
}
public static void close(PreparedStatement stmt){
try {
stmt.close();
} catch (SQLException ex) {
ex.printStackTrace(System.out);
}
}
public static void close(Connection conn){
try {
conn.close();
} catch (SQLException ex) {
ex.printStackTrace(System.out);
}
}
Entidad Cliente
public class Cliente {
private int idCliente;
private String nombre;
private String apellido;
private String email;
private String telefono;
private double saldo;
public Cliente() {
}
public Cliente(int idCliente) {
this.idCliente = idCliente;
}
public Cliente(String nombre, String apellido, String email, String telefono, double saldo) {
this.nombre = nombre;
this.apellido = apellido;
this.email = email;
this.telefono = telefono;
this.saldo = saldo;
}
public Cliente(int idCliente, String nombre, String apellido, String email, String telefono, double saldo) {
this.idCliente = idCliente;
this.nombre = nombre;
this.apellido = apellido;
this.email = email;
this.telefono = telefono;
this.saldo = saldo;
}
public int getIdCliente() {
return idCliente;
}
public void setIdCliente(int idCliente) {
this.idCliente = idCliente;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public double getSaldo() {
return saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
@Override
public String toString() {
return "Cliente{" + "idCliente=" + idCliente + ", nombre=" + nombre + ", apellido=" + apellido + ", email=" + email + ", telefono=" + telefono + ", saldo=" + saldo + '}';
}
- Uso del patron de dise帽o DAO (Objeto de acceso a datos)
En software de computadores, un objeto de acceso a datos (en ingl茅s, data access object, abreviado DAO) es un componente de software que suministra una interfaz com煤n entre la aplicaci贸n y uno o m谩s dispositivos de almacenamiento de datos, tales como una Base de datos o un archivo. El t茅rmino se aplica frecuentemente al Patr贸n de dise帽o Object.
vENTAJAS
Los Objetos de Acceso a Datos son un Patr贸n de los subordinados de Dise帽o Core J2EE y considerados una buena pr谩ctica. La ventaja de usar objetos de acceso a datos es que cualquier objeto de negocio (aquel que contiene detalles espec铆ficos de operaci贸n o aplicaci贸n) no requiere conocimiento directo del destino final de la informaci贸n que manipula.
Los Objetos de Acceso a Datos pueden usarse en Java para aislar a una aplicaci贸n de la tecnolog铆a de persistencia Java subyacente (API de Persistencia Java), la cual podr铆a ser JDBC, JDO, Enterprise JavaBeans, TopLink, EclipseLink, Hibernate, iBATIS, o cualquier otra tecnolog铆a de persistencia. Usar Objetos de Acceso de Datos significa que la tecnolog铆a subyacente puede ser actualizada o cambiada sin cambiar otras partes de la aplicaci贸n.
Desventajas
La flexibilidad tiene un precio. Cuando se a帽aden DAOs a una aplicaci贸n, la complejidad adicional de usar otra capa de persistencia incrementa la cantidad de c贸digo ejecutado durante tiempo de ejecuci贸n. La configuraci贸n de las capas de persistencia requiere en la mayor铆a de los casos mucho trabajo.
Las aplicaciones cr铆ticas con el rendimiento no deber铆an usar DAOs. WIKIPEDIA
public List<Cliente> listar() {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
Cliente cliente = null;
List<Cliente> clientes = new ArrayList<>();
try {
conn = Conexion.getConnection();
stmt = conn.prepareStatement(SQL_SELECT);
rs = stmt.executeQuery();
while (rs.next()) {
int idCliente = rs.getInt("id_cliente");
String nombre = rs.getString("nombre");
String apellido = rs.getString("apellido");
String email = rs.getString("email");
String telefono = rs.getString("telefono");
double saldo = rs.getDouble("saldo");
cliente = new Cliente(idCliente, nombre, apellido, email, telefono, saldo);
clientes.add(cliente);
}
} catch (SQLException ex) {
ex.printStackTrace(System.out);
} finally {
Conexion.close(rs);
Conexion.close(stmt);
Conexion.close(conn);
}
return clientes;
}
public Cliente encontrar(Cliente cliente) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = Conexion.getConnection();
stmt = conn.prepareStatement(SQL_SELECT_BY_ID);
stmt.setInt(1, cliente.getIdCliente());
rs = stmt.executeQuery();
rs.absolute(1);//nos posicionamos en el primer registro devuelto
String nombre = rs.getString("nombre");
String apellido = rs.getString("apellido");
String email = rs.getString("email");
String telefono = rs.getString("telefono");
double saldo = rs.getDouble("saldo");
cliente.setNombre(nombre);
cliente.setApellido(apellido);
cliente.setEmail(email);
cliente.setTelefono(telefono);
cliente.setSaldo(saldo);
} catch (SQLException ex) {
ex.printStackTrace(System.out);
} finally {
Conexion.close(rs);
Conexion.close(stmt);
Conexion.close(conn);
}
return cliente;
}
public int insertar(Cliente cliente) {
Connection conn = null;
PreparedStatement stmt = null;
int rows = 0;
try {
conn = Conexion.getConnection();
stmt = conn.prepareStatement(SQL_INSERT);
stmt.setString(1, cliente.getNombre());
stmt.setString(2, cliente.getApellido());
stmt.setString(3, cliente.getEmail());
stmt.setString(4, cliente.getTelefono());
stmt.setDouble(5, cliente.getSaldo());
rows = stmt.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace(System.out);
} finally {
Conexion.close(stmt);
Conexion.close(conn);
}
return rows;
}
public int actualizar(Cliente cliente) {
Connection conn = null;
PreparedStatement stmt = null;
int rows = 0;
try {
conn = Conexion.getConnection();
stmt = conn.prepareStatement(SQL_UPDATE);
stmt.setString(1, cliente.getNombre());
stmt.setString(2, cliente.getApellido());
stmt.setString(3, cliente.getEmail());
stmt.setString(4, cliente.getTelefono());
stmt.setDouble(5, cliente.getSaldo());
stmt.setInt(6, cliente.getIdCliente());
rows = stmt.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace(System.out);
} finally {
Conexion.close(stmt);
Conexion.close(conn);
}
return rows;
}
public int eliminar(Cliente cliente) {
Connection conn = null;
PreparedStatement stmt = null;
int rows = 0;
try {
conn = Conexion.getConnection();
stmt = conn.prepareStatement(SQL_DELETE);
stmt.setInt(1, cliente.getIdCliente());
rows = stmt.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace(System.out);
} finally {
Conexion.close(stmt);
Conexion.close(conn);
}
return rows;
}
- Se observa el Backend terminado.
Link Bootstrap
Link Colores Bootstrap
Uso de bootstrap para:
- Para agregar estilos facilmente
- Adaptacion en Pantalla
Se Agregaran Iconos para que sea mas interactivo con el usuario
Link Font Awesome
Cabeceros - Pie de Pagina
Visualizacion de Backend
<ul>
<c:forEach var="cliente" items="${clientes}">
<li>${cliente.idCliente} ${cliente.nombre} ${cliente.apellido} ${cliente.saldo}</li>
</c:forEach>
</ul>
- Se Observa el listado de clientes , ,usando modulos deparados
- Se Agregaron las tarjetas en el lado derecho, teniendo en cuenta el GRID de Botstrap.
- Ventana modal de Agregar cliente con Valudaciones en Bootstrap
-Iconos para el Siderar
- Aplicativo terminado y funcionando