Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Aplicaciones Con Base de Datos Orientada A Objetos Con DB4O
Aplicaciones Con Base de Datos Orientada A Objetos Con DB4O
com.db4o
Ahora usted puede crear una consulta de nativos con tres claves: n + q + Control + Espacio.
Características similares están disponibles en la mayoría de los IDEs modernos.
4.2.4. Ejemplo avanzada
Para consultas complejas, la sintaxis nativa es muy precisa y
rápida de escribir. Vamos a comparar a una consulta de
SODA que encuentra todos los pilotos con un nombre o una
puntuación dentro de un rango dado:
4.2.4. Ejemplo avanzada
Así es como la misma consulta se verá así con la sintaxis de consulta nativos,
totalmente abierto a la terminación automática, la refactorización y otras
funciones del IDE, totalmente verificados en tiempo de compilación:
4.2.5. Arbitraria de código.-
Básicamente eso es todo lo que hay que saber acerca de
las consultas nativas para poder utilizarlos de manera
eficiente. En principio se puede ejecutar código arbitrario
como consultas nativas, sólo tienes que tener mucho
cuidado con los efectos secundarios - especialmente
aquellos que puedan afectar a los objetos persistentes.
• Así que un candidato tiene que ser de tipo piloto y tener un miembro llamado
'nombre' que es igual a la propuesta de cadena para ser aceptado por el resultado.
• Tenga en cuenta que la restricción de clase no es necesaria: Si lo dejamos fuera,
nos consulta para todos los objetos que contienen un miembro "nombre " con el
valor dado.
• En la mayoría de los casos esto no será el comportamiento deseado, sin
embargo.
• Encontrar un piloto por puntos exactos. Sólo hay que cruzar la primitivos de
Java / dividir objeto.
4.3.1. Consultas sencillas.-
4.3.2. Avanzada consultas
Ahora bien, hay ocasiones en las que no queremos para consultar
los valores de campo exacta, sino más bien por rangos de valores,
no los objetos que contiene dado valores de los miembros, etc Esta
funcionalidad es proporcionada por la API de restricción.
En primer lugar, vamos a negar una consulta para buscar todos los
pilotos que no son Michael Schumacher:
4.3.2. Avanzada consultas
Cuando hay negación, los operadores booleanos otro no puede
estar muy lejos.
4.3.2. Avanzada consultas
También puede limitar a una comparación con un valor dado
4.3.2. Avanzada consultas
La consulta API también permite consultar los valores por
defecto de campo
4.3.2. Avanzada consultas
También es posible tener clase db4o los resultados.
4.3.2. Avanzada consultas
Todas estas técnicas se pueden combinar de
forma arbitraria, por supuesto.
Por favor, pruébelo. Todavía puede darse el
caso de la izquierda donde las restricciones
predefinidas API de consulta puede no ser
suficiente - no te preocupes, siempre puedes
dejar que db4o ejecutar cualquier código
arbitrario que usted proporciona en una
evaluación.
4.3.2. Avanzada consultas
4.3.3. Conclusion.-
Cuál es el mejor para usar? Algunos consejos:
Consultas Nativas se dirigen a la interfaz principal de db4o, por lo
que debe ser preferido.
Con el estado actual del optimizador de consultas db4o puede
haber consultas que se ejecutarán más rápido en el estilo de
SODA, por lo que se puede utilizar para aplicaciones de
composición. SODA también puede ser más conveniente para
construir consultas dinámicas en tiempo de ejecución.
Consulta-por ejemplo-es bueno para un manejo sencillo de una
sola línea, pero limitado en funcionalidad. Si te gusta este
enfoque, el uso, siempre y cuando se adapte a las necesidades de
su aplicación.
4.3.4. Código Completo
4.3.4. Código Completo
4.3.4. Código Completo
4.3.4. Código Completo
4.3.4. Código Completo
5. Objetos estructurados.-
Es hora de ampliar nuestro dominio de negocio con otra clase y ver
cómo maneja db4o interrelaciones objeto. Vamos a dar a nuestros
pilotos un vehículo.
5.1. Almacenamiento de objetos
estructurados.-
Para almacenar un coche con su piloto, que acabamos de
llamar al # store () de nuestro objeto de nivel superior, el
coche. El piloto se almacenarán de forma implícita.
5.1. Almacenamiento de objetos
estructurados.-
Por supuesto, necesitamos una cierta competencia aquí. Esta
vez almacenar explícitamente el piloto antes de entrar en el
coche - esto no hace ninguna diferencia.
5.2. Recuperación de objetos
estructurados.-
5.2.1. QBE.- Para recuperar todos los coches,
simplemente proporcionar un 'blanco' prototipo.
Recuperación de Objetos
Estructurados
QBE.- Para recuperar todos los coches, que sólo
tiene que proporcionar un 'blanco' prototipo.
5.2. Recuperación de objetos
estructurados.-
También podemos consultar todos los pilotos, por supuesto.
5.2. Recuperación de objetos
estructurados.-
Ahora vamos a iniciar nuestro prototipo para especificar
todos los coches conducidos por Rubens Barrichello.
5.2.2. Nativo consultas.-
El uso de consultas nativas con las limitaciones de profundidad
objetos estructurados es sencillo, puede hacerlo al igual que lo
haría en otro código sin formato.
Vamos a limitar nuestra consulta sólo a los coches conducidos
por un piloto con un nombre específico:
5.2.3. SODA API de Consulta.-
Para utilizar SODA para consultar por un coche dado el
nombre de su piloto que tenemos que bajar dos niveles en
nuestra consulta.
5.2.3. SODA API de Consulta.-
También puede limitar el ámbito de piloto con un prototipo
para lograr el mismo resultado.
5.2.3. SODA API de Consulta.-
Hemos visto que descender a una consulta nos
proporciona otra consulta. Partiendo de una raíz de
consulta que puede descender en múltiples
direcciones. En la práctica esto es lo mismo que subir
de un niño a un padre y un descendiente a otro niño.
Podemos concluir que las consultas a su vez hace
referencia a uno-direccional en nuestros objetos en las
relaciones verdaderas. He aquí un ejemplo de que las
consultas para "un piloto que está siendo referenciado
por un coche, donde el modelo de coche es" Ferrari ":
5.2.3. SODA API de Consulta.-
5.3. Actualización de objetos
estructurados
Para actualizar los objetos estructurados en db4o,
nosotros lo llamamos simplemente # store () de nuevo.
5.3. Actualización de objetos
estructurados
Vamos a modificar el piloto, también.
5.3. Actualización de objetos
estructurados
Vamos a ver qué pasa si nos dividimos la tarea en dos
sesiones separadas db4o: En la primera, modificamos
nuestro piloto y actualizar su coche:
5.3. Actualización de objetos
estructurados
Y en el segundo, nos vuelva a comprobar nuestra
modificación:
5.3.1. Actualización de profundidad
Imagine un objeto complejo, con muchos miembros que tienen
muchos miembros de sí mismos. Al actualizar este objeto, db4o
tendría que actualizar todos sus hijos, nietos, etc.
Esto supone una reducción del rendimiento graves y no será
necesario en la mayoría de los casos.
La primera vez que hicimos la modificación, no db4o en realidad
tenía que recuperar el piloto modificado volvió el mismo que se
encontraba todavía en la memoria que hemos modificado, pero en
realidad nunca actualizó la base de datos.
Reiniciar la aplicación que muestran que el valor se mantuvo sin
cambios.
5.3.1. Actualización de profundidad
Para ser capaz de manejar este dilema lo más flexible
posible, db4o introduce el concepto de la profundidad de
actualización para el control de la profundidad del árbol
de un objeto miembro se atravesó en la actualización.
La profundidad de actualización por defecto para todos
los objetos es 1, lo que significa que sólo los miembros
primitivos y String se actualizará, pero los cambios en
los miembros del objeto no se refleja.
5.3.1. Actualización de profundidad
5.3.1. Actualización de profundidad
5.4. Eliminación de objetos
estructurados.-
Como ya hemos visto, hacemos un llamado # delete () en los
objetos para deshacerse de ellos.
5.4. Eliminación de objetos
estructurados.-
Bien, el coche se ha ido. ¿Qué pasa con los pilotos?
5.4.1. Borrado Recursivo.-
Usted ya puede sospechar que el problema del borrado
recursivo (y tal vez su solución, también) es muy similar a
nuestro problema de actualización de poco, y tienes razón.
Vamos a configurar db4o para eliminar piloto de un coche,
también, cuando el coche se elimina.
5.4.1. Borrado Recursivo.-
Una vez más: Tenga en cuenta que la configuración debe ser pasado a la llamada apertura ObjectContainer.
Recursiva eliminación revisited
Pero, un momento - ¿qué pasa si los hijos de un
objeto eliminado aún se hace referencia por otros
objetos?
Recursiva eliminación revisited
Recursiva eliminación revisited
Recursiva eliminación revisited
Houston, tenemos un problema - y no hay
solución simple a la mano. Actualmente
db4o no comprueba si los objetos a ser
eliminados se hace referencia en ningún otro
lugar, así que por favor tener mucho
cuidado al utilizar este característica.