1. Associação individual
1.1. Propor requisitos
Informações da aula de consulta com base no ID da classe (informações com professor)
1.2. Crie tabelas e dados
Crie uma tabela de professores e uma tabela de aula. Aqui, assumimos que um professor é responsável apenas por ensinar uma aula, então o relacionamento entre o professor e a turma é um relacionamento individual.
Criar professor de tabela (t_id int primário chave automaticamente, t_name varchar ()); Criar classe de tabela (c_id int primária chave automaticamente, c_name varchar (), professor_id int); ALTER TABLE CLASS ADICIONAR RECTRAINT FK_TEACHER_ID CHAVE DO ESTRAGENS (Professor_ID) Referências Professor (T_ID); Inserir em valores do professor (t_name) ('professor'); Inserir em valores do professor (t_name) ('professor'); Insira na classe (c_name, professor_id) valores ('classe_a',); Inserir na classe (c_name, professor_id) valores ('class_b', 2); A relação entre as tabelas é a seguinte:
1.3. Definir classes de entidade
1. Aula de professores, aula de professores é a aula de entidade correspondente à mesa do professor.
pacote me.gacl.Domain; /*** @Author Gacl* Defina a classe de entidade correspondente à tabela do professor*/Public Class Professor {// Defina os atributos da classe de entidade, correspondendo aos campos na tabela de professores Private Int ID; // id ===> t_id private string nome; // nome ===> t_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; } @Override public string tostring () {return "professor [id =" + id + ", name =" + name + "]"; }}2 Classes Class, aula de aulas é a classe de entidade correspondente à tabela de classe
pacote me.gacl.Domain; /*** @Author Gacl* Defina a classe de entidade correspondente à classe Tabela*/Classes de classe pública {// Defina os atributos da classe de entidade, correspondendo aos campos na tabela de classe private Int ID; // id ===> c_id private string nome; // nome ===> c_name /** * Existe um campo professor_id na tabela de aula; portanto, um atributo do professor é definido na aula das aulas, * é usado para manter o relacionamento individual entre professor e classe. Através deste atributo de professor, você pode saber qual professor é responsável por esta classe*/ professor particular professor; 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; } Professor público getTeacher () {Return professor; } public void SettheAcher (professor) {this.teacher = professor; } @Override public String tostring () {return "Classes [id =" + id + ", nome =" + nome + ", professor =" + professor + "]"; }} 1.4. Defina o arquivo de mapeamento SQL Classmapper.xml
<? xml versão = "." Encoding = "utf-"?> <! O valor do espaço para nome é convencionalmente definido como o nome do pacote + o nome do arquivo de mapeamento SQL, para que o valor do espaço para nome possa ser garantido para ser exclusivo. Por exemplo, namespace = "me.gacl.mapping.classmapper" é me.gacl.mapping (nome do pacote) + ClassMapper (sufixo de remoção de arquivos de classMapper.xml)-> <mapeador namespace = "me.gacl.mapping.classpapper"> <!-Quary Information Information Basey Id (com o professor de informações) #. Consulta da tabela conjunta Selecionar * da classe C, professor t onde c.teacher_id = t.t_id e c.c_id =; ##. Execute duas consultas selecione * da classe onde C_ID =; // professor_id = selecione * do professor onde t_id =; // use o professor_id obtido acima-> <!-Método 1: Resultados aninhados: use o mapa de resultados aninhados para processar o subconjunto de resultados da junta duplicados para encapsular os dados da tabela articular (remover dados duplicar) selecionar * da classe c, professor t where c.TEAther_Id = t.t_id (T.Id (Remover Duplicate Data) Selecionar * da classe C, professor t where c.TEAther_Id = t.t_id (T.Id (Remover Duplicate) Selecionar * da classe C, professor t where c.TEAther_Id = t.t_id (T.Id (Remover Duplicate) Selecione * da classe C, ParameterType = "int" resultMap = "ClassResultMap"> Selecione * da classe C, Professor T onde C.TEACHER_ID = T.T_ID e C.C_ID =#{ID} </select> <!-Use ResultMap para mapear a correspondência individual entre as classes de entidade e os fields-> <resultado) "MAP). <id de propriedade = "id" column = "c_id"/> <resultado de propriedade = "name" column = "c_name"/> <associação property = "professor" javatype = "me.gacl.domain.teacher"> <id de propriedade = "id" column = "t_id"/<resulte Propriedade = "name" column = "t_name =" t_name = "" Retorne o tipo de complexo esperado executando outra instrução SQL Mapping Select * da classe onde C_ID =; Selecione * do professor em que t_id = // é o valor de professor_id obtido na consulta anterior-> <select id = "getClass" parametertype = "int" resultmap = "classResultmap"> selecione * da classe onde c_id =#{id} </select> <! type = "me.gacl.domain.classes" id = "classResultMap"> <id de propriedade = "id" column = "c_id"/> <resultado de propriedade = "name" column = "c_name"/> <associação (result = "professor" column = "professor_id" select = "getTear"/> </resultado = "professor" ResultType = "me.gacl.domain.teacher"> selecione T_ID ID, T_NAME NOME DO PROFESSO WHERE T_ID =#{ID} </select> </Mapper> Registre Classmapper.xml no arquivo conf.xml
<Mappers> <!- Registre o arquivo Classmapper.xml. Classmapper.xml está localizado no pacote me.gacl.mapping, portanto o recurso é escrito como eu/gacl/mapping/classmapper.xml-> <mapper Resource = "me/gacl/mapping/classmapper.xml"/> </mappers>
1.5. Escreva o código de teste da unidade
pacote me.gacl.test; importar me.gacl.domain.classes; importar me.gacl.util.mybatisutil; importar org.apache.ibatis.session.SQLSession; importar org.junit.test; public class Test {@Test public void testGetClass () {sqlSession sqlSession = mybatisutil.getSqlSession (); /** * Map SQL Identification String, * me.gacl.mapping.classmapper é o valor do atributo namespace da tag de mapeador no arquivo Classmapper.xml, * getClass é o valor do atributo de identificação da tag Selecionar. O SQL a ser executado pode ser encontrado através do valor do atributo de ID da tag selecionada */String declaration = "me.gacl.mapping.classmapper.getclass"; // mapeando a sequência de identificação do SQL // execute a operação de consulta e encapsula automaticamente o resultado da consulta em um objeto de classe e as classes de retorno = sqlsel.set.set.set. tabela // depois de executar o SQL usando o SQLSession sqlSession.Close (); System.out.println (clazz); // Resultado de impressão: classes [id =, name = class_a, professor = professor [id =, nome = professor]]} @test public void testGetclass () {sqlSession sqlSession = mybatisutil.getSqlSession (); /** * Map SQL Identification String, * me.gacl.mapping.classmapper é o valor do atributo namespace da tag de mapeador no arquivo Classmapper.xml, * getClass é o valor do atributo de identificação da tag Selecionar. O SQL a ser executado pode ser encontrado através do valor do atributo de ID da tag selecionada */String declaration = "me.gacl.mapping.classmapper.getclass"; // mapeando o string de identificação do SQL // Executa operações de consulta e encapsula automaticamente os resultados da consulta nas aulas de retorno do objeto de classe SQLSession Para executar o SQL, você precisa fechar o SQLSession sqlSession.Close (); System.out.println (clazz); // Resultado de impressão: classes [id =, nome = classe_a, professor = professor [id =, nome = professor]]}} 1.6. Resumo da consulta de associação individual mybatis
Mybatis usa a tag de associação para resolver consultas de associação individuais. As propriedades disponíveis para a etiqueta da associação são as seguintes:
• Propriedade: o nome da propriedade do objeto
• Javatype: o tipo de atributo de objeto
• Coluna: o nome do campo de chave estrangeira correspondente
• Selecione: use outra consulta para encapsular o resultado
2. Associação única
2.1. Propor requisitos
Consulte as informações de classe correspondentes de acordo com a Classid, incluindo alunos e professores
2.2. Crie tabelas e dados
Na demonstração de consulta de correlação individual acima, criamos a tabela de aula e a tabela de professores, então aqui criamos outra tabela de estudantes
Crie a tabela aluno (s_id int primário Auto_increment, s_name varchar (20), class_id int); inserir no aluno (s_name, classe_id) valores ('student_a', 1); insert no aluno (s_name, classe) Class_Id) valores ('student_d', 2); inserir no aluno (s_name, class_id) valores ('student_e', 2); inserir no aluno (s_name, classe_id) valores ('student_f', 2); 2.3. Definir classes de entidade
1. Aula de estudante
pacote me.gacl.Domain; /*** @Author Gacl* Defina a classe de entidade correspondente à tabela do aluno*/Public Class Student {// Defina os atributos, correspondendo aos campos na tabela de estudantes private Int ID; // id ===> S_ID String private Nome; // nome ===> s_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; } @Override public string tostring () {return "Student [id =" + id + ", name =" + name + "]"; }} 2. Modifique a aula das aulas, adicione uma lista <estudante> Atributo dos alunos e use um atributo de coleção de uma lista para representar os alunos de propriedade da turma, como segue:
pacote me.gacl.Domain; importar java.util.list; /*** @Author Gacl* Defina a classe de entidade correspondente à classe Tabela*/Classes de classe pública {// Defina os atributos da classe de entidade, correspondendo aos campos na tabela de classe private Int ID; // id ===> c_id private string nome; // nome ===> c_name /** * Existe um campo professor_id na tabela de aula; portanto, um atributo do professor é definido na aula das aulas, * é usado para manter o relacionamento individual entre professor e classe. Através deste atributo de professor, você pode saber qual professor é responsável por esta classe*/ professor particular professor; // Use um atributo de coleção de uma lista <estudante> para representar estudantes de propriedade da Lista Privada da Classe <Student> Alunos; 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; } Professor público getTeacher () {Return professor; } public void SettheAcher (professor) {this.teacher = professor; } public void SettheAcher (professor) {this.teacher = professor; } Lista pública <very Student> getStudents () {return Students; } public void SetStudents (lista <estudante> alunos) {this.students = estudantes; } @Override public String tostring () {return "Classes [id =" + id + ", nome =" + nome + ", professor =" + professor + ", alunos =" + alunos + "]"; }} 2.4. Modifique o arquivo de mapeamento SQL Classmapper.xml
Adicione as seguintes informações de mapeamento SQL
Consulte as informações de classe correspondentes de acordo com o ClassID, incluindo alunos e professores-> <!-Método 1: Resultados aninhados: Use o mapa de resultados aninhados para processar um subconjunto de resultados repetidos selecionados * da classe C, Professor T, Student s onde C.TEacher_id = T.T_ID e C.C_ID = S.Class_Id e C.C_ID =-> <SELENT = IDS = " ResultMap = "ClassResultMap"> Selecione * da classe C, Professor T, Student S Where C.TEacher_Id = T.T_ID e C.C_ID = S.Class_ID e C.C_ID =#{ID} </select> <ResultMap Type = "ME.Gacl.Domain.Classses" ID = "ClassResmap"> Propriedade = "Nome" Column = "C_ID"/> <Result Property = "Name" Column = "C_Name"/> <Association Property = "Professor" Column = "Profession_id" Javatype = "Me.gacl.dominAin.teacher"> <Id Property = "Id" column = "Tame"/> <bils> "Nome"> " Tipo de objeto na coleção de alunos-> <coleta de propriedade = "estudantes" oftype = "me.gacl.domain.student"> <id de propriedade = "id" column = "s_id"/> <result Property = "name" column = "s_name"/> </coletor> </resultMap> <!-Método 2: Return: MAPID: MAPIDO: Retorno esperado "/> </coleção> <! Selecione * do professor em que t_id = // é o valor de professor_id obtido pela consulta anterior Selecionar * do aluno onde class_id = // é o valor do campo c_id obtido pela primeira consulta -> <select id = "getClass" parameterType = "int" resultmap = "ClassResultMap"> select * de Class When C_ID type = "me.gacl.domain.classes" id = "classResultMap"> <id de propriedade = "id" column = "c_id"/> <resultado de propriedade = "name" column = "c_name"/> <associação de propriedade = "professora" "selet" select = "teattatype =" me.gacl.doman.Teather " ofType="me.gacl.domain.Student" column="c_id" select="getStudent"></collection> </resultMap> <select id="getTeacher" parameterType="int" resultType="me.gacl.domain.Teacher"> SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id} </select> <select id = "getStudent" parameterType = "int" resultype = "me.gacl.domain.student"> select s_id id, s_name nome do aluno onde class_id =#{id} </leclect> 2.5. Escreva o código de teste da unidade
pacote me.gacl.test; importar me.gacl.domain.classes; importar me.gacl.util.mybatisutil; importar org.apache.ibatis.session.SQLSession; importar org.junit.test; public class Test {@Test public void testGetClass () {sqlSession sqlSession = mybatisutil.getSqlSession (); /** * Map SQL Identification String, * me.gacl.mapping.classmapper é o valor do atributo namespace da tag de mapeador no arquivo Classmapper.xml, * getClass é o valor do atributo de identificação da tag Selecionar. O SQL a ser executado pode ser encontrado através do valor do atributo de ID da tag selecionada */String declaration = "me.gacl.mapping.classmapper.getclass"; // mapeando a sequência de identificação do SQL // execute a operação de consulta e encapsula automaticamente o resultado da consulta em um objeto de classe e as classes de retorno = sqlsel.set.set.set. tabela // depois de executar o SQL usando o SQLSession sqlSession.Close (); // imprima o resultado: aulas [id =, nome = classe_a, professor = professor [id =, nome = professor], alunos = [estudante [id =, nome = student_a], aluno [id =, name = student_b], aluno [id =, name = student_c]] system.out.println (clazz); } @Test public void testGetClass () {sqlSession sqlSession = mybatisutil.getSqlSession (); /** * Map SQL Identification String, * me.gacl.mapping.classmapper é o valor do atributo namespace da tag de mapeador no arquivo Classmapper.xml, * getClass é o valor do atributo de identificação da tag Selecionar. O SQL a ser executado pode ser encontrado através do valor do atributo de ID da tag selecionada */String declaration = "me.gacl.mapping.classmapper.getclass"; // mapeando a sequência de identificação do SQL // execute a operação de consulta e encapsula automaticamente o resultado da consulta em um objeto de classe e as classes de retorno = sqlsel.set.set.set. tabela // depois de executar o SQL usando o SQLSession sqlSession.Close (); // imprima o resultado: aulas [id =, nome = classe_a, professor = professor [id =, nome = professor], alunos = [estudante [id =, nome = student_a], aluno [id =, name = student_b], aluno [id =, name = student_c]] system.out.println (clazz); }} 2.6. Resumo da consulta da Associação Mybatis
O Mybatis usa a tag de coleção para resolver consultas de associação individual, e o atributo oftype especifica o tipo de objeto de elementos na coleção.
Sobre o Mybatis Learning Tutorial (V) - Apresentarei muito a você sobre a implementação da consulta de tabela de associação, espero que seja útil para você!