En la programación de Android que involucra una base de datos SQLite, generalmente creamos tablas con código Java utilizando un ORM. ¿Por qué hacemos esto ya que es mucho más fácil y rápido hacerlo directamente en SQL?

La respuesta de Steven J Owens es muy buena, pero es una razón importante para usar ORM que falta, aunque no es tan necesaria como importante en la programación de Android. Los ORM le permiten crear un modelo de objetos que se puede usar en diferentes bases de datos fácilmente. Los ORM están diseñados para proporcionar una interfaz genérica entre su aplicación y su fuente de datos que le permite intercambiar fuentes de datos más fácilmente. En la programación de Android, esto no es necesariamente necesario, ya que casi todos usan SQLite, pero es posible que desee utilizar un código similar en clientes de PC, iOS y OSX. Incluso puede usar el mismo ORM en el lado del servidor que le permite pasar sus objetos de datos entre el cliente y el servidor en XML o JSON.

Los ORM son muy útiles cuando se desarrollan con aplicaciones de software de código abierto. Si fuera a desarrollar una aplicación de Windows que utiliza MySQL o MariaDB y desea incluir un instalador opcional para ellos en su versión. Debe lanzar su aplicación bajo una licencia de código abierto compatible o su código debe admitir múltiples bases de datos para ofrecer opciones al usuario. Entonces, si va a lanzar su aplicación de esta manera y no desea abrir la fuente de su aplicación también, querrá algún tipo de capa de abstracción de la base de datos como un ORM.

Esta pregunta es parte de un tema mucho más amplio, más complejo y global sobre modas y marcos y la filosofía general del desarrollo de software. No voy a tratar de lidiar con todo eso, pero te daré la versión corta.

Muchos programas necesitan muchas consultas simples de bases de datos CRUD (Crear / Leer / Actualizar / Eliminar). Un buen ORM hará que sea muy fácil de hacer. Más fácil incluso que SQL.

Además, si profundiza en el tema, se encontrará con discusiones sobre el “desajuste de impedancia de objeto / relacional”, lo que significa que hay una visión del mundo fundamentalmente diferente entre las bases de datos relacionales y los programas orientados a objetos. Me saltearé la explicación de que aquí, ya se ha escrito mucho al respecto, puedes buscar en Google.

Hay una trampa, por supuesto. Los ORM inevitablemente no pueden proporcionar tanta potencia expresiva y flexibilidad como SQL … o reimplementan SQL en un dialecto muy personalizado, que tiene sus propios inconvenientes.

Los ORM son extremadamente comunes en estos días, especialmente en el mundo de Java y el mundo de Android derivado de Java. Tengo sentimientos encontrados sobre los ORM y sobre la mayoría de los marcos, aunque incluso he escrito mi propio ORM (bastante limitado), alguna vez.

Los ORM y los marcos pueden ser muy útiles, pero es difícil diseñar uno bueno. El problema es que cuanto más hace una herramienta por usted, más probable es que cierre las opciones. Si te comprometes demasiado con una herramienta que cierra demasiadas opciones, entonces estás atascado cuando necesitas algo que la herramienta no puede hacer. No puede escapar de los límites de la herramienta para resolver su problema utilizando las tecnologías subyacentes.

Encontrar el punto de equilibrio entre esas dos tensiones, y diseñar la herramienta de una manera que mitigue ese riesgo, es “no trivial”, para usar un eufemismo clásico de programación.

Aún así, muchas de las herramientas de tiempo son muy útiles.

Siento que usar SQL directamente es fácil.

Sin embargo, a muchos programadores no les gusta la disyunción entre la programación orientada a conjuntos (SQL) y la Programación orientada a objetos (Java), un ORM hace que una base de datos relacional se parezca un poco a una base de datos de objetos.

Por supuesto, no es mucho más fácil usar Java directamente y para la mayoría de las tareas no es más rápido, después de todo, ORM escribe SQL para usted.

Por simplicidad de ORM considere

Solo piense en una sola tabla y compare la cantidad de código que escribe para hacer una actualización de inserción y seleccione, utilizando el Java SQL, el código que escriba será más grande.