Saludos gente bonita de CUCEI (que espero sean mayoría) y demás procedencias, el día de hoy me nació aprender a utilizar el Framework Mybatis de Persistencia para C# (ya que lo utilizo profesionalmente en mi trabajo como programador en Java) just because, y les vengo a relatar mi experiencia, con la esperanza de que les sea de utilidad, ya sea como referencia, cultura general o una tarea...
Y pues vamos a desmenuzar el pollo:
Persistencia:
CoffEscuandotucrushnotepelaperotuigualsiguesahírogándolecoff!
Ahhh, es simplemente la translación de objetos o información temporal generada en un programa a un medio "persistente", que soporte la carga y descarga del programa y no destruya los datos en el acto... Escribir archivos CSV, de longitud fija y demás (como bases de datos) es la persistencia.
Entonces Mybatis viene como un amigo que nos ayudará a realizar las operaciones INSERT, UPDATE, SELECT y DELETE, además de procedimientos mas gandalla de una manera bien nice, ordenada y modular, para no tener líneas y líneas de código que se la pasan definiendo queries...
Y de donde sacamos a este amiguito???
https://code.google.com/p/mybatisnet/downloads/detail?name=IBatis.DataMapper.1.6.2.bin.zip&can=3&q= (al 3 de Agosto de 2013)
Unzip y téngan a su amiguito cocked, locked and ready to rock...
Lo siguiente a conseguirnos será el Driver de Npgsql:
http://pgfoundry.org/frs/download.php/3493/Npgsql2.0.13.91-bin-ms.net4.0.zip
Dado que lo hice en Windows... Ustedes decidan si bajar ese u otro más mejor (como ustedes dicen) para sus necesidades...
Mismo que con Mybatis, unizip, cock y todo eso... ¬w¬
A lo mero bueno...
Especificaciones: Who fckin' cares???
I DO care:
Visual C# Express
Postgresql instalado y corriendo, con una base de Datos llamada TestingSpring (la uso para otras cosas) con la tabla shiro_users (ahí ustedes le cambian según sea necesario).
Mucha paciencia y los scripts de creación y población de la tabla: bájatelos !
Abrimos Visual C# o Visual Studio o lo que caramba esten usando:
Creamos una nueva solución de Windows Forms y le ponen el nombre que quieran, dado que quiero asociar las queries a botones y eventos con interfaz, por motivos que solo a mi me interesan.
Una vez creado, y no se si deban hacerlo ustedes tambien, pero a mi me la hizo de tos, así que click derecho al proyecto, Propiedades y el Target Framework a .Net v4 que no diga Client, por alguna maldita
Agregamos las referencias:
IbatisNet.Common.dll
IbatisNet.Common.Logging.Log4Net.dll
IbatisNet.DataMapper.dll
log4net.dll
Npgsql.dll
Npgsql.resources.dll
policy.2.0.Npgsql.dll
Ahora vamos a crear nuestro Mapper... Que vertebras es un Mapper???
Es una clase que nos ayudará a Mapear las propiedades de nuestras clases de modelo de Datos y usarlas dentro de sentencias SQL o mapearlas de resultados de queries para construir objetos... Bien nice... *u*
Y la llamaré MyBatisTestDAO.cs
MyBatisTestDAO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IBatisNet.Common.Utilities;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
namespace DemoDataBaseMyBatis
{
class MyBatisTestDAO
{
private static ISqlMapper mapper = null;
protected static void Configure(object obj)
{
mapper = null;
}
public static void init()
{
ConfigureHandler handler = new ConfigureHandler(Configure);
DomSqlMapBuilder builder = new DomSqlMapBuilder();
mapper = builder.ConfigureAndWatch(handler);
}
public static ISqlMapper Instance()
{
if (mapper == null)
{
lock (typeof(SqlMapper))
{
if (mapper == null) // double-check
{
init();
}
}
}
return mapper;
}
public static ISqlMapper Get()
{
return Instance();
}
}
}
El código anterior es mero código de placa de boiler, por lo que no tiene mucha importancia, salvo el hecho de que hemos generado un Singleton de nuestro Mapper, y así no tendremos que estar gestionando las conexiones, Mybatis ya se encargará de ello.
Vamos a crear una clase de modelo de datos llamada Usuario.cs
Usuario.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DemoDataBaseMyBatis
{
public class Usuario
{
private string _nombre;
private string _password;
public string Nombre { set{ _nombre = value;} get{ return _nombre;} }
public string Password { set { _password = value; } get { return _password; } }
}
}
Finalmente vamos a modificar la Form1 que viene por defecto, yo le cambiaré el nombre a MainWindow y le agregaré un lindo botón que nos permitirá activar las operaciones que queramos en la BD, es escueto porque
MainWindow.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using IBatisNet.DataMapper;
namespace DemoDataBaseMyBatis
{
public partial class MainWindow : Form
{
ISqlMapper mapper = null;
public MainWindow()
{
InitializeComponent();
mapper = MyBatisTestDAO.Instance();
}
private void btnTriggerBD_Click(object sender, EventArgs e)
{
Usuario param = new Usuario();
param.Nombre = "MxVulture";
Usuario user = mapper.QueryForObject
Console.WriteLine(user.Nombre);
Console.WriteLine(user.Password);
user = mapper.QueryForObject
Console.WriteLine(user.Nombre);
Console.WriteLine(user.Password);
user.Nombre = "Nuevo Nombre";
user.Password = "Nuevo_password";
Console.WriteLine(mapper.Insert("insertUsuario", user));
IList
foreach (Usuario us in lista)
{
Console.WriteLine(us.Nombre);
Console.WriteLine(us.Password);
}
}
}
}
Como pueden observar, ISqlMapper es la interfaz que les mencionaba que nos permitirá hacer nuestras sentencias SELECT, UPDATE, etc...
Y agregué un poco de código al evento, en el que solicitaré dos veces el mismo usuario usando dos maneras distintas, luego insertaré uno nuevo y finalmente pediré la lista completa de los usuarios usando la interfaz IList, todo esto para mostrarles como nos evitamos ya la pena de tener que mapear nosotros mismos los campos y estarlos parseando, esta cosa es oro puro! :D
Voy a dejarlo hasta aquí debido a que el proyecto ya es bastantito código (sin embargo este es todo el código que necesitamos!), solo resta el mapeado de objetos, que es lo mero bueno y no quiero meter tanto info el fregado post, al final hay un link para llegar a la siguiente parte de este manual!
Agradezco enormemente a http://coderstalk.blogspot.mx en su artículo:
http://coderstalk.blogspot.mx/2007/07/how-to-show-and-hide-text-in-blog-post.html
Por la mágica manera de poder ocultar los <span> con un link! Gracias!!! x3
this->parte2;
Buena introducción, quien diría que escribes de forma simpática.
ReplyDeleteMas les vale saber bien esta clase de frameworks que evitan esas feas sentencias [hasta suenan a castigo D:] SQL
Gracias por este trabajo, me sirvio a montones! Muy agradecido, saludos desde Peru :)
ReplyDelete