Definir
Um conjunto de coleções é uma coleção Java que não contém nenhum elemento duplicado. Mais formalmente, o conjunto não contém nenhum elementos em E1 e E2, de modo que o E1.Equals (E2) e no máximo um elemento vazio. Portanto, ser adicionado a um conjunto de objetos deve implementar os métodos iguais () e hashcode () para que o Java possa determinar se dois elementos/objetos são iguais.
Os conjuntos são mapeados para <Set> elementos na tabela de mapas e são inicializados em java.util.hashset. Você pode usar as coleções definidas para ter elementos na coleção que não precisam ser repetidos ao usar a classe.
Defina a tabela RDBMS:
Considere um caso em que precisamos que nossos registros de funcionários sejam armazenados na tabela de funcionários, com a seguinte estrutura:
Criar funcionário da tabela (ID int não nulo auto_increntle, primeiro_name varchar (20) nulo padrão, last_name varchar (20) nulo padrão, nulo padrão nulo padrão, chave primária (id));
Além disso, supõe -se que cada funcionário possa ter um ou mais certificados relacionados a ele. Portanto, armazenamos as informações relevantes do certificado em uma tabela separada com a seguinte estrutura:
Criar certificado de tabela (ID int não null Auto_increment, certificado_name varchar (30) null padrão, funcionário_id int padrão nulo, chave primária (id));
Haverá um relacionamento entre um funcionário para muitos e um objeto de certificado:
Definir aula de Pojo:
Vamos implementar nossa equipe de classe Pojo será usada para manter uma coleção de objetos na tabela de funcionários e variáveis de conjunto credenciadas.
importar java.util.*; Public Class Funcionário {private int id; String privada primeiro nome; string privada stringname; salário privado int; Certificados de conjunto privado; public funcionário () {} funcionário público (string fname, string lname, int salário) {this.firstname = fname; this.LastName = lname; this.salary = salário; } public int getId () {return id; } public void setId (int id) {this.id = id; } public String getFirstName () {return FirstName; } public void setFirstName (String First_Name) {this.firstName = First_Name; } public string getLastName () {return lastName; } public void setLastName (string last_name) {this.lastName = last_name; } public int getSalary () {retornar salário; } public void SetSalary (salário int) {this.salary = salário; } public set getCertificates () {return certificados; } public void setCertificates (set certificados) {this.certificates = certificados; }} Agora vamos definir o certificado de outra classe Pojo correspondente à tabela, esse objeto de certificado pode armazenar e recuperar a tabela de certificados. Esta classe também deve implementar os métodos Equals () e HashCode () ao mesmo tempo, para que o Java possa determinar se dois elementos/objetos são iguais.
Certificado de classe pública {private int id; nome de string privado; public certificado () {} public certificado (nome da string) {this.name = name; } public int getId () {return id; } public void setId (int id) {this.id = id; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public boolean é igual (objeto obj) {if (obj == null) retorna false; if (! this.getclass (). igual a (obj.getclass ())) retorna false; Certificado obj2 = (certificado) obj; if ((this.id == obj2.getId ()) && (this.name.equals (obj2.getName ()))) {return true; } retornar false; } public int hashCode () {int tmp = 0; tmp = (id + nome) .hashcode (); retornar tmp; }} Defina o arquivo de mapeamento de hibernato:
Vamos desenvolver um arquivo de mapeamento que especifica como o Hibernate define um arquivo de mapeamento que mapeia para uma tabela de banco de dados. O elemento <Set> será usado para definir as regras usadas para definir a coleção.
<? xml versão = "1.0" coding = "utf-8"?> <! <meta attribute = "classe-descrição"> Esta classe contém os detalhes do funcionário. </meta> <id name = "id" type = "int" column = "id"> <gerator/> </id> <set name = "certificados" cascade = "all"> <key column = "funcionário_id"/> <hebro-to-many/> </Set> <names name "nome" name "=" tound = "" thenname "string/" string/> </set> <names dinames "=" column = "primeiro_name" type = " type = "string"/> <propriedade name = "salário" column = "salário" type = "int"/> </class> <classe name = "certificado" tabela = "certificado"> <meta attribute = "classe-decription"> Esta classe contém os registros do certificado. </meta> <id name = "id" type = "int" column = "id"> <gerator/> </id> <propriedade name = "name" column = "certificado_name" type = "string"/> </class> </hibernate-mapping>
O formato <SCLASSNAME> .hbm.xml no arquivo de mapeamento que deve ser salvo. Salve o arquivo FILECOLHAR.HBM.XML no arquivo de mapeamento. Já familiarizado com a maioria dos detalhes do mapeamento, mapeando todos os elementos no arquivo:
Um documento mapeado é um documento XML com <hibernate-mapping> como um elemento raiz correspondente a cada classe que contém 2 elementos <Class>.
O elemento <Stem> é usado para definir um mapeamento específico da tabela de banco de dados de uma classe Java. O nome da classe java especifica o atributo de nome do elemento de classe e o nome da tabela do banco de dados do atributo de tabela Especifica.
O elemento <mEta> é um elemento opcional que pode ser usado para criar uma descrição da classe.
O elemento <ID> mapeia o atributo de ID exclusivo na classe para a chave primária da tabela de banco de dados. O atributo de nome do elemento ID refere -se à classe do atributo e o atributo da coluna refere -se às colunas na tabela de banco de dados. O atributo de tipo salva o tipo de mapeamento de hibernato, que será convertido do tipo de dados Java para SQL.
O elemento <gerator> dentro do elemento ID é usado para gerar automaticamente o valor da chave primária. Defina o atributo de classe do elemento gerado como o original para permitir que o hibernato o pegue, seja, identidade, sequência ou algoritmo HILO para criar chaves primárias de acordo com os recursos de suporte do banco de dados subjacente.
O elemento <erpoy> é usado para mapear as propriedades de uma classe Java para colunas em uma tabela de banco de dados. O atributo de nome de um elemento refere -se à classe do atributo e ao atributo da coluna refere -se às colunas na tabela de banco de dados. O atributo de tipo salva o tipo de mapeamento de hibernato, que será convertido do tipo de dados Java para SQL.
O elemento <Set> é novo e foi introduzido para definir o relacionamento entre o certificado e a classe de funcionários. Usamos o elemento <Set> no atributo Cascade para informar ao Hibernate para salvar o objeto de certificado e o objeto do funcionário. O atributo de nome está definido para definir a variável na definição na classe pai, no nosso caso, é certificado. Para cada conjunto de variáveis, precisamos definir um conjunto separado de elementos no arquivo de mapeamento.
O elemento <Key> é o objeto pai que contém uma chave estrangeira, ou seja, a coluna na tabela de certificados. Funcionário da mesa.
O elemento <one-to-Many> indica que um objeto de funcionário envolve muitos certificados e, portanto, o objeto de certificado deve estar relacionado ao funcionário pai. Você pode usar qualquer elementos e elementos de <One-One>, <Many-to-One> ou <Many-to-Many>, conforme necessário.
Crie uma classe de aplicativo:
Por fim, criaremos o método principal () da classe de aplicativo para executar o aplicativo. Usaremos este aplicativo para salvar alguns registros de funcionários junto com as credenciais e, em seguida, solicitaremos registros na operação CRUD.
importar java.util.*; importar org.hibernate.hibernateException; importar org.hibernate.session; importar org.hibernate.transaction; importar org.hibernate.sessionFactory; importar org.hibernate.cfg.configuration; public class ManageEmployee {private Static SesstionFactory Factory; public static void main (string [] args) {try {factory = new Configuration (). Configure (). buildSessionFactory (); } Catch (ex -throwable ex) {System.err.println ("Falha ao criar o objeto SessionFactory." + Ex); lançar uma nova excepçãoininitializerError (ex); } Gerencia o empregado eu = new ManageEmployee (); / * Vamos ter um conjunto de certificados para o primeiro funcionário */ hashset set1 = new HashSet (); set1.add (novo certificado ("MCA")); set1.add (novo certificado ("MBA")); set1.add (novo certificado ("MBA")); set1.add (novo certificado ("pmp")); / * Adicionar registros de funcionários no banco de dados */ inteiro empid1 = me.addemployee ("manoj", "kumar", 4000, set1); / * Outro conjunto de certificados para o segundo funcionário */ hashset set2 = new HashSet (); set2.add (novo certificado ("BCA")); set2.add (novo certificado ("ba")); / * Adicione outro registro do funcionário no banco de dados */ inteiro empid2 = me.addemployee ("dilip", "kumar", 3000, set2); / * Liste todos os funcionários */ me.listemployee (); / * Atualize os registros salariais do funcionário */ me.UpdateEmployee (empid1, 5000); / * Exclua um funcionário do banco de dados */ me.deleteemployee (empid2); / * Liste todos os funcionários */ me.listemployee (); } / * Método para adicionar um registro de funcionários no banco de dados * / public integer addEmployee (string fname, string lname, int salário, set cert) {sessão session = factory.opensession (); Transação tx = nulo; Inteiro funcionárioID = nulo; tente {tx = session.begIntransaction (); Funcionário funcionário funcionário = novo funcionário (fname, lname, salário); Employee.SetCertificates (CERT); empregado = (inteiro) session.save (funcionário); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); E.PrintStackTrace (); } finalmente {session.close (); } retornar o funcionárioID; } / * Método para listar todos os detalhes dos funcionários * / public void listemployees () {Session Session = factory.opensssion (); Transação tx = nulo; tente {tx = session.begIntransaction (); Listar funcionários = session.createquery ("do funcionário"). List (); for (iterator iterator1 = funcionário.iterator (); iterator1.hasnext ();) {funcionário = (funcionário) iterator1.next (); System.out.print ("primeiro nome:" + funcionário.getfirstname ()); System.out.print ("Sobrenome:" + Employee.getLastName ()); System.out.println ("Salário:" + Employee.getSalary ()); Set certificados = funcionário.getCertificates (); for (iterator iterator2 = certificates.iterator (); iterator2.hasnext ();) {certificado certname = (certificado) iterator2.next (); System.out.println ("certificado:" + certname.getName ()); }} tx.commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); E.PrintStackTrace (); } finalmente {session.close (); }} / * Método para atualizar o salário para um funcionário * / public void updateEmployee (número inteiro, salário int) {sessão session = factory.openssession (); Transação tx = nulo; tente {tx = session.begIntransaction (); Funcionário funcionário funcionário = (funcionário) session.get (funcionário.class, funcionário); funcionário.SetSalary (salário); session.Update (funcionário); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); E.PrintStackTrace (); } finalmente {session.close (); }} / * Método para excluir um funcionário dos registros * / public void DeLeteemployee (Integer Funcionário) {session Session = Factory.openssession (); Transação tx = nulo; tente {tx = session.begIntransaction (); Funcionário funcionário funcionário = (funcionário) session.get (funcionário.class, funcionário); session.Delete (funcionário); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); E.PrintStackTrace (); } finalmente {session.close (); }}} Compilar e executar:
Aqui estão as etapas para compilar e executar o aplicativo acima. Verifique se o caminho e o caminho de classe estão definidos adequadamente antes de compilar e executar.
Os seguintes resultados serão obtidos na tela e os registros serão criados nas tabelas de funcionários e certificados.
$ java ManageEmployee
..... Várias mensagens de log serão exibidas aqui ......... Nome: Manoj Sobrenome: Kumar Salário: 4000Certificate: MBacertificate: PMPCertificate: McAfirst Nome: Dilip Sobrenome Kumar Salário: 3000Certificate: BCAcertificate: Bafirst Nome: Manoj Nome: KUMARRÁRIO DO MORNO: KUMARTIFICADO: 5Certificate: Bcacertificate: Bafirst Nome: Manoj Nome: KUMARRÁRIO
Se você verificar o funcionário e o formulário de certificado, registre -o:
mysql> selecione * do funcionário;
+------------------------------+----------+| id | primeiro_name | Último nome | Salário |+------------------------------------+------------+-----------+| 1 | Manoj | Kumar | 5000 |+--------------------------------+---------+1 linha no conjunto (0,00 s)
mysql> selecione * do certificado;
+----+------------------+-------------+| id | certificado_name | funcionário_id |+----+----------------+-------------+| 1 | MBA | 1 || 2 | Pmp | 1 || 3 | MCA | 1 |+----+----------------+-------------+3 linhas no conjunto (0,00 s)
mysql>
STORDEDSET
O STORDEDSET é uma coleção Java que não contém nenhum elementos e elementos duplicados que usam fornecem sua ordem natural ou são classificados por um comparador.
Um mapa de classificação, inicializado na tabela de mapeamento <Set> elemento e java.util.treeset. O atributo de classificação pode ser definido como um comparador ou ordem natural. Se a ordem natural for usada, seu iterador atravessa os elementos conjuntos dispostos em ordem crescente.
Ainda usamos a tabela RDBMS definida no exemplo acima, e haverá um relacionamento entre vários funcionários e objetos de certificado, e a classe Pojo também será definida acima.
Vamos implementar o funcionário da classe Pojo será usado para manter uma coleção de objetos na tabela de funcionários e uma variável de conjunto de classificação certificado.
Agora, vamos definir o certificado para outra classe Pojo correspondente à tabela de certificados, esse objeto de certificado pode armazenar e recuperar a tabela de certificados. Esta classe também deve implementar a interface comparável e o método Compareto será usado para definir o sort = "natural" no caso de mapeamento de arquivos (consulte os arquivos do mapa abaixo), os elementos são classificados.
Certificado de classe pública implementa comparável <Certificado> {private int id; nome de string privado; public certificado () {} public certificado (nome da string) {this.name = name; } public int getId () {return id; } public void setId (int id) {this.id = id; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public int compareto (certificado que) {final int antes = -1; final int após = 1; if (que == null) {retorna antes; } Comparável thisCertificate = this.getName (); Comparável thatCertificate = that.getName (); if (thisCertificate == null) {return após; } else if (thatCertificate == NULL) {retornar antes; } else {return thisCertificate.compareto (thatCertificate); }}} Defina o arquivo de mapeamento de hibernato:
Vamos desenvolver um arquivo de mapeamento que especifica como o Hibernate define um arquivo de mapeamento que mapeia para uma tabela de banco de dados. O elemento <Set> será usado para definir as regras para a coleção SortedSet usada.
<? xml versão = "1.0" coding = "utf-8"?> <! <meta attribute = "classe-descrição"> Esta classe contém os detalhes do funcionário. </meta> <id name = "id" type = "int" column = "id"> <gerator/> </id> <set name = "certificados" cascade = "all" sort = "myclass"> <key column = "funcionário_id"/> <hene-to-many/> </set> <name "nome" nome "" column = "/> <one-to-many/> </set> <name" "FirstName" "column ="/> colun = "last_name" type = "string"/> <propriedade name = "salário" column = "salário" type = "int"/> </class> <classe name = "certificado" tabela = "certificado"> <meta attribute = "classe-description"> Esta classe contém os registros de certificado. </meta> <id name = "id" type = "int" column = "id"> <gerator/> </id> <propriedade name = "name" column = "certificado_name" type = "string"/> </class> </hibernate-mapping>
O formato <ClassName> .hbm.xml no arquivo de mapa, salve o arquivo funcionário.hbm.xml no arquivo de mapa. Já estou familiarizado com a maioria dos detalhes do mapeamento, mas vamos ver todos os elementos no arquivo de mapeamento:
Um documento mapeado é um documento XML com <hibernate-mapping> como um elemento raiz correspondente a cada classe que contém 2 elementos <Class>.
O elemento <Stem> é usado para definir um mapeamento específico da tabela de banco de dados de uma classe Java. O nome da classe java especifica o atributo de nome do elemento de classe e o nome da tabela do banco de dados do atributo de tabela Especifica.
O elemento <mEta> é um elemento opcional que pode ser usado para criar uma descrição da classe.
O elemento <ID> mapeia o atributo de ID exclusivo na classe para a chave primária da tabela de banco de dados. O atributo de nome do elemento ID refere -se à classe do atributo e o atributo da coluna refere -se às colunas na tabela de banco de dados. O atributo de tipo salva o tipo de mapeamento de hibernato, que será convertido do tipo de dados Java para SQL.
O elemento <gerator> dentro do elemento ID é usado para gerar automaticamente o valor da chave primária. Defina o atributo de classe do elemento gerado para permitir que o hibernato colhe o algoritmo em identidade, sequência ou hilo para criar chaves primárias de acordo com os recursos de suporte do banco de dados subjacente.
O elemento <erpoy> é usado para mapear as propriedades de uma classe Java para colunas em uma tabela de banco de dados. O atributo de nome de um elemento refere -se à classe do atributo e ao atributo da coluna refere -se às colunas na tabela de banco de dados. O atributo de tipo salva o tipo de mapeamento de hibernato, que será convertido do tipo de dados Java para SQL.
O elemento <Set> é usado para definir o relacionamento entre o certificado e a classe de funcionários. Usamos o elemento <Set> no atributo Cascade para informar ao Hibernate para salvar o objeto de certificado e também para o objeto do funcionário. O atributo de nome é definido para a variável do conjunto de classificação definido na classe pai, no nosso caso, é um certificado. A propriedade de classificação pode ser definida como classificação natural, ou pode ser definida como implementação de classe personalizada como java.util.comparator. Usamos uma classe de classe que a implementa como java.util.comparator para reverter a ordem de classificação da implementação da classe de certificado.
O elemento <Key> é o objeto pai que contém uma chave estrangeira, ou seja, a coluna na tabela de certificados. Funcionário da mesa.
O elemento <one-to-Many> indica que um objeto de funcionário envolve muitos objetos de certificado e, portanto, o objeto de certificado deve estar relacionado ao funcionário pai. Você pode usar qualquer elementos e elementos de <One-One>, <Many-to-One> ou <Many-to-Many>, conforme necessário.
Se você usar a configuração Sort = "Natural", não precisará criar uma classe separada, porque a classe de certificado implementou a interface comparável e o Hibernate usará o compareto (definido como o nome do certificado de comparação na classe de certificado). No entanto, estamos usando uma classe de comparador personalizada MyClass em nosso arquivo de mapeamento, por isso devemos criar essa classe com base no algoritmo de classificação. Use esta classe para classificar em ordem decrescente.
importar java.util.comparator; classe pública MyClass implementa o comparador <Tertificate> {public int compare (certificado O1, certificado O2) {final int antes = -1; final int após = 1; / * Para reverter a ordem de classificação, múltiplo por -1 */ if (o2 == null) {retorna antes * -1; } Comparável thisCertificate = o1.getName (); Comparável thatCertificate = o2.getName (); if (thisCertificate == null) {retorna após * 1; } else if (thatCertificate == null) {retorna antes * -1; } else {return thisCertificate.compareto (thatCertificate) * -1; }}} Crie uma classe de aplicativo:
Por fim, criaremos o método principal () da classe de aplicativo para executar o aplicativo. Usaremos este aplicativo para salvar alguns registros de funcionários junto com o certificado e, em seguida, solicitaremos registros na operação CRUD.
importar java.util.*; importar org.hibernate.hibernateException; importar org.hibernate.session; importar org.hibernate.transaction; importar org.hibernate.sessionFactory; importar org.hibernate.cfg.configuration; public class ManageEmployee {private Static SesstionFactory Factory; public static void main (string [] args) {try {factory = new Configuration (). Configure (). buildSessionFactory (); } Catch (ex -throwable ex) {System.err.println ("Falha ao criar o objeto SessionFactory." + Ex); lançar uma nova excepçãoininitializerError (ex); } Gerencia o empregado eu = new ManageEmployee (); / * Vamos ter um conjunto de certificados para o primeiro funcionário */ TreeSet set1 = new TreeSet (); set1.add (novo certificado ("MCA")); set1.add (novo certificado ("MBA")); set1.add (novo certificado ("MBA")); set1.add (novo certificado ("pmp")); / * Adicionar registros de funcionários no banco de dados */ inteiro empid1 = me.addemployee ("manoj", "kumar", 4000, set1); / * Outro conjunto de certificados para o segundo funcionário */ TreeSet set2 = new TreeSet (); set2.add (novo certificado ("BCA")); set2.add (novo certificado ("ba")); / * Adicione outro registro do funcionário no banco de dados */ inteiro empid2 = me.addemployee ("dilip", "kumar", 3000, set2); / * Liste todos os funcionários */ me.listemployee (); / * Atualize os registros salariais do funcionário */ me.UpdateEmployee (empid1, 5000); / * Exclua um funcionário do banco de dados */ me.deleteemployee (empid2); / * Liste todos os funcionários */ me.listemployee (); } / * Método para adicionar um registro de funcionários no banco de dados * / public integer addEmployee (string fname, string lname, int salário, certificado de classificação) {session session = factory.openssion (); Transação tx = nulo; Inteiro funcionárioID = nulo; tente {tx = session.begIntransaction (); Funcionário funcionário funcionário = novo funcionário (fname, lname, salário); Employee.SetCertificates (CERT); empregado = (inteiro) session.save (funcionário); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); E.PrintStackTrace (); } finalmente {session.close (); } retornar o funcionárioID; } / * Método para listar todos os detalhes dos funcionários * / public void listemployees () {Session Session = factory.opensssion (); Transação tx = nulo; tente {tx = session.begIntransaction (); Listar funcionários = session.createquery ("do funcionário"). List (); for (iterator iterator1 = funcionário.iterator (); iterator1.hasnext ();) {funcionário = (funcionário) iterator1.next (); System.out.print ("primeiro nome:" + funcionário.getfirstname ()); System.out.print ("Sobrenome:" + Employee.getLastName ()); System.out.println ("Salário:" + Employee.getSalary ()); Certificados STORDEDSET = Employee.getCertificates (); for (iterator iterator2 = certificates.iterator (); iterator2.hasnext ();) {certificado certname = (certificado) iterator2.next (); System.out.println ("certificado:" + certname.getName ()); }} tx.commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); E.PrintStackTrace (); } finalmente {session.close (); }} / * Método para atualizar o salário para um funcionário * / public void updateEmployee (número inteiro, salário int) {sessão session = factory.openssession (); Transação tx = nulo; tente {tx = session.begIntransaction (); Funcionário funcionário funcionário = (funcionário) session.get (funcionário.class, funcionário); funcionário.SetSalary (salário); session.Update (funcionário); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); E.PrintStackTrace (); } finalmente {session.close (); }} / * Método para excluir um funcionário dos registros * / public void DeLeteemployee (Integer Funcionário) {session Session = Factory.openssession (); Transação tx = nulo; tente {tx = session.begIntransaction (); Funcionário funcionário funcionário = (funcionário) session.get (funcionário.class, funcionário); session.Delete (funcionário); tx.Commit (); } catch (hibernateException e) {if (tx! = null) tx.rollback (); E.PrintStackTrace (); } finalmente {session.close (); }}}Após compilar e executar, os seguintes resultados são obtidos na tela e os registros são criados nas tabelas de funcionários e certificados. Você pode ver que os certificados foram classificados na ordem oposta. Você pode tentar alterando o arquivo de mapeamento, basta definir o sort = "natural" e executar o programa e comparar os resultados.
$ java ManageEmployee
..... Várias mensagens de log serão exibidas aqui ......... Nome: Manoj Sobrenome: Kumar Salário: 4000Certificate: PMPCertificate: McAcertificate: MBAFIRST Nome: Dilip Nome Nome: Kumar Salário: 3000Certificate: Bcacertificate: Bafirst Nome: Manoj Nome: KUMARRÁRIOS SALARTÍCIOS 5
Se você verificar o funcionário e o formulário de certificado, registre -o:
mysql> selecione * do funcionário;
+------------------------------+----------+| id | primeiro_name | Último nome | Salário |+------------------------------------+------------+-----------+| 1 | Manoj | Kumar | 5000 |+--------------------------------+---------+1 linha no conjunto (0,00 s)
mysql> selecione * do certificado;
+----+------------------+-------------+| id | certificado_name | funcionário_id |+----+----------------+-------------+| 1 | MBA | 1 || 2 | Pmp | 1 || 3 | MCA | 1 |+----+----------------+-------------+3 linhas no conjunto (0,00 s)