1. Mapeo de combinación
La combinación es un caso especial de relaciones de asociación y una relación con el más alto grado de acoplamiento. El objeto principal y el subobjeto de la combinación tienen el mismo ciclo de vida. Si el objeto principal muere, el subobjeto también morirá. Aquí usamos empleadores y usuarios como ejemplos. Tanto los usuarios como los empleadores tienen atributos de información de contacto. Si piensa desde la perspectiva de un objeto, a menudo dibujará el modelo de objeto en un método de combinación para abstraer una clase de información de contacto común. Luego, las dos personas incluyen objetos de información de contacto correspondientes. Al enfrentar el modelo de objeto correspondiente, su ejemplo de objeto se muestra en la figura a continuación:
Después de que el modelo de objeto combinado genera el modelo de relación correspondiente, la subclase correspondiente se incluirá en la tabla principal, por lo que la estructura de la tabla correspondiente generará los atributos correspondientes en la tabla correspondiente. La estructura de la tabla correspondiente es la siguiente:
1.1 Clase de empleados y archivos de mapeo
En el modelo de objetos, existe una relación de inclusión entre el empleado y el contacto. Al escribir código, debe incluir el objeto de contacto en el empleado. El archivo de mapeo correspondiente también debe tener una asignación de objetos de contacto. La etiqueta <componente> debe usarse para indicar los objetos combinados y agregar las propiedades del objeto a la etiqueta de objeto.
Listado: Empleado.java. Además de las propiedades básicas, el archivo de clase también debe empaquetarse con objetos de contacto porque hay una capa de relación de inclusión entre ellos.
paquete com.src.Hibernate; Empleado de clase pública {// número de identificación privada int id; public int getId () {return id; } public void setid (int id) {this.id = id; } // nombre Nombre de cadena privada; public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } // Contacto Objeto Privado Contacto UserContact; Public Contact getUserContact () {return UserContact; } public void setUserContact (Contact UserContact) {this.Usercontact = UserContact; }}Listado 2: Empleado.hbm.xml, agregue el archivo de asignación correspondiente. Los objetos combinados mapeados deben marcarse con <componente> y agregar los atributos del objeto correspondiente a la etiqueta. El código específico es el siguiente:
<? xml versión = "1.0"?> < table = "T_Employee"> <id name = "id"> <generador/> </id> <propiedad name = "name"/> <component name = "empleadoeContact"> <propiedad name = "email"/> <Property name = "dirección"/> <propiedad name = "zipcode"/> <name de propiedad = "contacttel"/> </ componente> </ssice> </shiSbernate-mappeando "
1.2 Clase de usuario y archivos de configuración
Listado 3: user.java, su estructura de contenido es la misma que la de Employee.java. No diré mucho sobre los demás, mira el código:
paquete com.src.Hibernate; Usuario de clase pública {// Número de identificación INT INT ID; public int getId () {return id; } public void setid (int id) {this.id = id; } // nombre Nombre de cadena privada; public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } // Contacto Objeto Privado Contacto UserContact; Public Contact getUserContact () {return UserContact; } public void setUserContact (Contact UserContact) {this.Usercontact = UserContact; }}Listado 4: user.hbm.xml, su estructura de contenido es la misma que la de Employee.hbm.xml, y se usa principalmente para el uso de la etiqueta <Componente>. Es muy simple, y el código es el siguiente:
<? xml versión = "1.0"?> < table = "t_user"> <id name = "id"> <generador/generador/> </id> <propiedad name = "name"/> <component name = "Usercontact"> <Property name = "email"/> <Property Name = "Dirección"/> <Property Name = "ZipCode"/> <Property Name = "ContactTel"/> </ Component> </ssice> </hibercio
1.3 Contacto. Java Clase
No hay nada a quien prestar atención en este archivo de clase. Puede agregar propiedades básicas y no necesita configurar las asignaciones correspondientes para esta clase, por lo que su contenido es bastante simple.
paquete com.src.Hibernate; Contacto de clase pública {// Dirección de correo electrónico Cadena de cadena privada Correo electrónico; public String getEmail () {return email; } public void setEmail (correo electrónico de cadena) {this.email = correo electrónico; } // Dirección de la dirección de cadena privada; public String getAddress () {Dirección de retorno; } public void setAddress (dirección de cadena) {this.address = dirección; } // Código postal de cadena privada zipcode; public String getZipCode () {return zipcode; } public void setzipcode (string zipcode) {this.zipcode = zipcode; } // Número de contacto Cadena privada ContactTel; public String getContactTel () {return ContactTel; } public void setContactTel (String ContactTel) {this.contactTel = ContactTel; }} 1.4 Generar resultados
Después de la configuración del archivo anterior, se puede generar la estructura de la tabla de base de datos correspondiente. La declaración SQL generada es la siguiente:
Tabla de caída si existe T_EMPloyee Tabla de caída si existe T_USER Crear tabla T_Employee (ID Integer no NULL AUTO_INCRENT Varchar (255), correo electrónico VARCHAR (255), Dirección Varchar (255), ZipCode Varchar (255), ContactTel Varchar (255), Clave primaria (ID))
La estructura de la tabla de la base de datos generada es la siguiente:
2. Operación de datos
La estructura de la tabla obtenida mediante la combinación de mapeo es una tabla completa, por lo que el método más original se puede implementar al escribir y leer datos. Aquí también utilizamos los métodos de prueba utilizados en los artículos anteriores para escribir y leer datos, que son el uso de métodos de guardado y carga, consulte a continuación operaciones específicas.
2.1 Insertar datos
Aquí, el usuario se usa como ejemplo, y la operación de escritura del empleado es la misma que la del usuario. Al escribir datos, se deben crear dos objetos, uno es el objeto de contacto y el otro es el objeto de usuario. Al guardar, solo se debe guardar el objeto de usuario, y el objeto de contacto correspondiente se guardará juntos.
public void testSave1 () {// Declarar la sesión de la sesión del objeto de sesión = null; Pruebe {// Obtenga la sesión del objeto de sesión = HibernateUtils.getSession (); // Abra la sesión Session.BeGinTransaction (); // Crear el objeto de conexión Contacto UserContact = new Contact (); UserContact.SetAddress ("Beijing"); UserContact.setContactTel ("1243435"); UserContact.SetEmail ("[email protected]"); UserContact.SetZipCode ("Zipcode"); // Crear el usuario del objeto de usuario user = new User (); user.setName ("Zhangsan"); user.setUserContact (UserContact); session.save (usuario); // Enviar sesión Session.getTransaction (). Commit (); } catch (Exception e) {E.PrintStackTrace (); session.getTransaction (). Rollback (); } finalmente {hibernateUtils.clossessession (sesión); }} Declaración SQL generada:
Insertar en T_user (nombre, correo electrónico, dirección, ZipCode, ContactTel) Valores (?,?,?,?,?)
Verifique la estructura de la tabla de la siguiente manera:
2.2 Operación de lectura
También utilizando el usuario como ejemplo, las operaciones de los empleados son las mismas que el objeto de usuario. La operación de lectura es bastante simple, el código es el siguiente:
public void testLoad1 () {// Declarar la sesión del objeto de sesión = nulo; Pruebe {// Obtenga la sesión del objeto de sesión = HibernateUtils.getSession (); // Abra la sesión Session.BeGinTransaction (); // Obtener el objeto de usuario usuario user = (usuario) session.load (user.class, 1); System.out.println ("Nombre de usuario:"+user.getName ()); // Enviar la sesión Session.GetTransaction (). Commit (); } catch (Exception e) {E.PrintStackTrace (); session.getTransaction (). Rollback (); } finalmente {hibernateUtils.clossessession (sesión); }}Los resultados correspondientes se generan de la siguiente manera:
Hibernate: seleccione USER0_.ID AS ID0_0_, user0_.name as name0_0_, user0_.email como correo electrónico0_0_, user0_.address como dirección0_0_, user0_.zipcode como zipCode0_0_, user0_.contactTel como contacttel0_0_ de t_user user0_ donde user0_.id =? Nombre de usuario: Zhangsan
Iii. Ejemplos completos
Cuenta:
La cuenta de clase pública implementa serializable {private int id; Doble dinero privado; dirección de dirección privada; public int getId () {return id; } public void setid (int id) {this.id = id; } public Double GetMoney () {return Money; } public void setMoney (doble dinero) {this.money = dinero; } dirección pública getAddress () {Dirección de retorno; } public void setAddress (dirección de dirección) {this.address = dirección; }} DIRECCIÓN:
La dirección de clase pública implementa serializable {Código de cadena privada; Ciudad de cadena privada; Provincia de cuerda privada; public String getCode () {código de retorno; } public void setCode (código de cadena) {this.code = code; } public String getCity () {return City; } public void setCity (String City) {this.city = City; } public String getProvince () {provincia de retorno; } public void setProvince (provincia de cadenas) {this.province = provincia; }} Cuenta.hbm.xml:
<? xml versión = "1.0" encoding = "utf-8"?> <! DOCTYPE Hibernate-Mapping público "-// Hibernate/Hibernate Mapping Dtd 3.0 // en" "http://hibernate.source.net/hibernate-mapping-3.0.dtd"> <! Herramientas-> <hibernate-mapping paquete = "pojo"> <class name = "cuenta" table = "t_acCount"> <id name = "id"> <columna name = "id"> </ column> <generator> </generator> </did> <name de propiedad = "dinero"> <columna name = "dinero"> </columna> </aught name de componente = "dirección"> <nombre de propiedad = "Código" columna = <columna = "dinero"> </ column> </aught </spropetent> <name de componente = "dirección"> <nombre de propiedad = "Código" columna = <columna = "dinero"> </ columna> </aught </spropetent> <name de componente = "dirección"> <nombre de propiedad = "Código" columna = <columna = "dinero"> </ column> </aught </spropell name = "Code"> </column> </Property> <Property Name = "City"> <column name = "City"> </lolle> </propiedad> <Property Name = "Province"> <columna name = "provincia"> </ columna> </propiedad> </componente> </sclass> </bernate-mapping>