1.Resultmap
Os arquivos XML mapeados SQL são onde todas as instruções SQL são colocadas. Você precisa definir um espaço de trabalho, que geralmente é definido como o caminho da classe de interface correspondente. Depois de escrever o arquivo de mapeamento de instrução SQL, você precisa fazer referência a ele na tag Mybatis Configuration File Mappers, por exemplo:
<pappper Resource = "com/liming/gerente/data/mappers/userMapper.xml"/> <mapper Resource = "compar/liming/gerente/data/mappers/studentmapper.xml"/> <mapper Resource = "COM/LIMING/gerenciador/data/mappers/classMapper.xml"/> <Mapper Resource = Data/mappers/ClassMapper.xml "/> <Mapper /> < /maperes>
Quando a interface Java está em um caminho relativo para o arquivo XML, ela não pode ser declarada nos mapeadores do arquivo de configuração Mybatis.
SQL mapeia alguns elementos elementares dos arquivos XML:
(1). O cache configura o cache para um determinado padrão (2). Cache-Ref refere-se a um cache de outro padrão (3). ResultMap Este é o elemento mais complexo, mas poderoso, que descreve como carregar objetos do conjunto de resultados (4). SQL Um bloco SQL que pode ser multiplexado por outras declarações (5). Insira a declaração de inserção do mapa (6). Atualizar instrução de atualização do mapa (7). Excluir declaração de deleete do mapa (8). Selecione - Map Select Declaração
1.1 ResultMap
ResultMap é o elemento mais importante e poderoso em Mybatis. Você pode economizar 90% do seu código do que os conjuntos de resultados de chamadas com o JDBC, ou pode fazer muitas coisas que o JDBC não suporta. De fato, pode levar milhares de linhas de código para escrever uma declaração complexa equivalente a um mapeamento semelhante a uma interação. O objetivo do ResultMaps é uma declaração tão simples sem o mapeamento desnecessário de resultados. Declarações mais complexas não exigem outra que não seja apenas algumas declarações absolutamente necessárias para descrever o relacionamento.
Atributo resultMap: Type é a classe de entidade Java; O ID é o identificador deste resultado.
O mapeamento que o resultado pode ser definido:
(1). O construtor é usado para refletir o resultado para um construtor de classe instanciado
a) parâmetro IDA ID; Marque o conjunto de resultados como ID para facilitar a chamada global
b) Reflexão média para o construtor
(2). Resultado da identificação, marque o conjunto de resultados como ID para facilitar a chamada global
(3). O resultado reflete os resultados normais das propriedades do Javabean
(4). associação a combinação de tipos complexos; tipos de múltiplos resultados síntese
a) Resultados aninhados Mapeamentos de vários resultados mapeiam as próprias associações aninhadas e também podem ser referenciadas uma outra
(5). Coleção Uma coleção de tipos complexos
(6). A coleção de mapeamentos de resultados aninhados também pode ser referenciada a outra
(7). O discriminador usa um valor de resultado para decidir qual resulte -map usar
a) Caso de casos casos casos do mapa de resultado de alguns valores básicos
eu. RESULTADOS ANDADOS MAPAPING UM CENAS DE CASO É O MAPO DE RESULTADO, para que também possa incluir alguns dos mesmos elementos ou referenciar um mapa de resultado externo.
1.1.1 ID, resultado
ID e resultado são os mapeamentos mais simples, o ID é o principal mapeamento de chaves; Mapas de resultado de outros campos de tabela de banco de dados básicos para atributos da classe de entidade.
O exemplo mais simples:
<resultMap type="liming.student.manager.data.model.StudentEntity" id="studentResultMap"> <id property="studentId" column="STUDENT_ID" javaType="String" jdbcType="VARCHAR"/> <result property="studentName" column="STUDENT_NAME" javaType="String" jdbctype = "varchar"/> <Result Property = "studentSex" column = "student_sex" javatype = "int" jdbctype = "inteiro"/> resulta propriedade = "StudentBirThDay" "DATATTHTATTATTATYTATTATYSTATYTYTETTETY =" DATULTHCTHDE ") javatype = "byte []" jdbctype = "blob" typeHandler = "org.apache.ibatis.type.blobtypehandler" /> < /resultmap>
Detalhes da configuração das propriedades de ID e da declaração de resultados:
propriedade | descrever | |
propriedade | O nome do atributo que precisa ser mapeado para o Javabean. | |
coluna | O nome da coluna ou alias de etiqueta da tabela de dados. | |
javatype | Um nome de classe completo ou um alias de tipo. Se você combinar um Javabean, Mybatis geralmente o detectará por si só. Então, se você estiver mapeando para um hashmap, precisará especificar o objetivo a ser alcançado pelo Javatype. | |
JDBCTYPE | Uma lista de tipos suportados pela tabela de dados. Esta propriedade é útil apenas para colunas que permitem vazias quando inserir, atualizar ou excluir. O JDBC requer isso, mas Mybatis não. Se você está codificando diretamente para o JDBC e possui colunas que permitem vazias, você deseja especificar este item. | |
TypeHandler | Use esta propriedade para substituir o processador de tipo. Este valor pode ser um nome completo de classe ou um pseudônimo de tipo. |
<ResultMap type = "StudentEntity" id = "StudentResultMap"> <Construtor> <idarg javatype = "string" column = "student_id"/> <arg javatype = "string" column = "student_name"/> <gg javatype "column =" student_sex "/> <name" </construtor> </resultMap>
Obviamente, precisamos definir o método construtor da aula de entidade da StudentEntity:
public studentEntity (String studentId, string studentName, string studentSex, data studentbirthday) {this.studentId = studentId; this.studentName = StudentName; this.studentsex = StudentSex; this.studentbirthday = studentbirthday; } 1.1.3 Associação
O elemento da União é usado para lidar com um relacionamento "individual". Você precisa especificar as propriedades da classe de entidade Java mapeada e o javatype do atributo (geralmente o mybatis o reconhecerá). O nome da coluna da tabela de banco de dados correspondente. Se você deseja substituir, retorne o valor do resultado, precisará especificar o TypeHandler.
Situações diferentes precisam dizer a Mybatis como carregar um sindicato. Mybatis pode ser carregado de duas maneiras:
(1). Selecione: Execute uma outra instrução SQL de mapeamento para retornar um tipo de entidade Java. Mais flexível;
(2). Resultados MAP: Use um mapa de resultados aninhados para processar os conjuntos de resultados de consulta através de ingressos e mapeie -os para os tipos de entidade Java.
Por exemplo, uma classe corresponde a um professor de classe.
Primeiro, defina os atributos do professor de classe na classe:
Professora privada Professora;
1.1.3.1 Use selecionar para implementar a união
Exemplo: Existe o atributo de um professor de classe na categoria de entidade de classe. Quando uma entidade de classe é obtida através de esforços conjuntos, a entidade do professor da turma é mapeada ao mesmo tempo.
Isso pode reutilizar diretamente as instruções de seleção definidas no arquivo TeacheMapper.xml para consultar o professor de acordo com seu ID. E você não precisa modificar as instruções SQL escritas, você só precisa modificar o resultante diretamente.
Parte do conteúdo do arquivo Classmapper.xml:
<ResultMap type = "ClassEntity" id = "ClassResultMap"> <ID Property = "ClassId" Column = "Class_id" /> <Result Property = "ClassName" Column = "Class_name" /> Result Property = "Classyear" Column = "Class_year" /> <Associação ("Result>" Column = "Profession" "", "," Classyear "Column =" Class_year " /> <Association) id = "getClassById" parameterType = "string" resultMap = "ClassResultMap"> selecione * de classe_tbl ct onde ct.class_id = #{classid}; </leclect>Parte do arquivo TeachmApper.xml:
<ResultMap type = "ProfessorEntity" id = "TeacherResultMap"> <id de propriedade = "professor" column = "professor_id" /> <Result Property = "Teachername" Column = "Professor_name" /> <Result Property = "TeacherSex" Column = "Professor_sex" /Result Propriedade = "ProfessorBirthday" column = "work_date"/> <result Property = "workdate" column = "work_date"/> <result Property = "Professional" Column = "Professional"/> </ResultMap> <select id = "getTeacher" parameterType = "string" resultMap = "TeacherResultMap"> select * de professor_tblt = "
1.1.3.2 Use ResultMap para alcançar a união
A mesma função que acima é consultar a classe e também consultar o professor da turma. Você precisa adicionar o ResultMap (definido no arquivo XML do professor) na associação, escrever um novo SQL (consultar a tabela de tabela de aula à esquerda para unir a tabela de professores) e não precisa de seleção do professor.
Modifique o conteúdo do arquivo Classmapper.xml:
<ResultMap type = "classentity" id = "ClassResultMap"> <ID Property = "ClassId" Column = "Class_id" /> <Result Property = "ClassName" Column = "Class_Name" /> <Result Property = "Classyear" Column = "Class_year" /> <Associação ("ProfessionMUrtity =" ProfessionSer "" Professor "" "(" >ption> (ClassyM "Column =" Class_year " /> <Association Property =" ProfessorSentity "Column =" professora "" <select id = "getClassandTEacher" parametertype = "string" resultMap = "ClassResultMap"> Selecione * de class_tbl ct de esquerda Junção professora_tbl tt em ct.teacher_id = tt.teacher_id onde ct.class_id = #{Classid};; </leclect>Para o TeacherResultMap, consulte o conteúdo acima no arquivo TeachmApper.xml.
1.1.4 Coleção
Os elementos de agregação são usados para lidar com relacionamentos "um para muitos". Você precisa especificar os atributos da classe de entidade Java de mapeamento, o javatype do atributo (geralmente a lista de Arraylist); o tipo de objeto na lista do objeto (classe de entidade java); o nome da coluna da tabela de banco de dados correspondente;
Situações diferentes precisam dizer a Mybatis como carregar uma agregação. Mybatis pode ser carregado de duas maneiras:
(1). Selecione: Execute uma outra instrução SQL de mapeamento para retornar um tipo de entidade Java. Mais flexível;
(2). Resultados MAP: Use um mapa de resultados aninhados para processar os conjuntos de resultados de consulta através de ingressos e mapeie -os para os tipos de entidade Java.
Por exemplo, uma turma tem vários alunos.
Primeiro defina os atributos da lista de estudantes na aula:
Lista privada <CudentEntity> Lista de estudantes;
1.1.4.1 Use selecionar para implementar a agregação
O uso é muito semelhante ao Union, a diferença é que isso é um para muitos, portanto, geralmente as listas mapeadas estão listadas. Então, aqui você precisa definir o Javatype como ArrayList, você também precisa definir o tipo de objeto na lista e o nome da declaração da seleção que deve ser definido (deve -se notar que a condição de instrução SELECT para o aluno da consulta aqui deve ser o Classid Key estrangeiro).
Parte do conteúdo do arquivo Classmapper.xml:
<ResultMap type = "ClassEntity" id = "ClassResultMap"> <ID Property = "ClassId" Column = "Class_id" /> <Result Property = "ClassName" Column = "Class_name" /> Result Property = "Classyear" Column = "Class_year" /> <Associação de propriedade = "Professor> acréscimo" "StrenkeErn_id" "," StrenTeart = "CLUMN_ELTELT =" Class_year " /> <Association) column = "class_id" javatype = "ArrayList" oftype = "studentEntity" select = "getStudentByClassid"/> </ResultMap> <select id = "getClassById" parametertype = "string" resultMap = "ClassResultMap"> selecione * class_tbl ct ct.ct.cl.Cl.Cl.Cl.Cl.Cl.Cl.Cl " </leclect>
Parte do arquivo studentmapper.xml:
Propriedades de Java, definição de mapeamento entre os campos da tabela de banco de dados-> <resultMap type = "StudentEntity" id = "StudentResultMap"> <id de propriedade = "studentId" column = "student_id" /> <resulte Property = "studentName" column = "student_name" /> <resultado "(" studentSex "" StudentNex "column = student_stolum_ student_ilTer_Ilstent_) Column = "student_birthday" /> < /resultMap> <!-Consulte a lista de estudantes, com base no ID da classe-> <select id = "getStudentbyclassid" parametertype = "string" resultMap = "StudentResultMap"> <Incluir RefID = "SelectStudentall" /Where St.Class_Id = #{Classin {Classind} {ClassinD {ClassinId} {ClassinId {Class. 1.1.4.2 Use ResultMap para alcançar a agregação
Usando o ResultMap, você precisa reescrever um SQL, à esquerda, junte -se à tabela de estudantes.
<ResultMap type = "ClassEntity" id = "ClassResultMap"> <id de propriedade = "ClassId" column = "Class_id" /> <Result Property = "ClassName" Column = "Class_Name" /> <Result Property = "Classyear" Column = "Class_year" /> <Association Property = "Profession (professora" = "professora" " Property = "StudentList" Column = "Class_ID" Javatype = "ArrayList" ofType = "StudentEntity" ResultMap = "StudentResultMap"/> </resulta St.Class_Id Left Join professor_tbl tt em ct.teacher_id = tt.teacher_id onde ct.class_id = #{classid}; </leclect>
Para o TeacherResultMap, consulte o conteúdo acima no arquivo TeachmApper.xml. Consulte o StudentResultmap na seção acima do arquivo studentmapper.xml.
1.1.5 Discriminador Discriminador <Br /> Às vezes, uma consulta de banco de dados separada pode retornar um conjunto de dados de resultados diferentes (mas espero que alguns correlação). O elemento discriminador foi projetado para lidar com essa situação, incluindo a hierarquia de classes da herança. O discriminador é muito fácil de entender, porque se comporta como declarações de troca em Java.
O discriminador de definição especifica propriedades da coluna e Javatype. As colunas são onde o Mybatis procura valores de comparação. O Javatype é o tipo certo a ser usado para garantir testes equivalentes (embora as cadeias sejam úteis em muitos casos).
O exemplo a seguir é que, quando o ClassID é 20000001, o atributo ClassID é mapeado.
<ResultMap type = "Liming.student.manager.data.model.studententity" id = "ResultMap_Studententity_Discriminator"> <ID Property = "StudentId" Column = "Student_id" Javatype = "String" Collum = "TOMPLOMEMENTEMENTELATE_ILT_ID" "" " jdbctype = "varchar"/> <Result Property = "studentSex" column = "student_sex" javatype = "int" jdbctype = "inteiro"/> resulta propriedade = "StudentBirThDay" "DATATTHTATTATTATYTATTATYSTATYTYTETTETY =" DATULTHCTHDE ") javatype = "byte []" jdbctype = "blob" typeHandler = "org.apache.ibatis.type.blobtypehandler" /> <resultado de propriedade = "placeId" column = "place_id" javatype = "string" jdbctyide "" varchar = "<sive_id_id" column = "string" jdbctyide "" valarchar " /> <discrint_id" jdbctype = "varchar"> <case value = "20000001" resultType = "liming.student.manager.data.model.studententity"> <resultado property = "classId" column = "class_id" javatype = "string" jdbctype/"varchar"/> </caso "
2. Adicione, exclua, modifique e verifique, parâmetros e cache
2.1 Selecione
Um elemento selecionado é muito simples. Por exemplo:
<!-consulte o aluno, de acordo com id-> <select id = "getStudent" parametertype = "string" resultMap = "StudentResultmap"> selecione ST.STUDENT_ID, St.Student_Name, St.Student_sex, St.Student_Birthday, St.Class_Id de Student_Tblt St.Student, St.Student, St.Student_Birthday, St.Class_Id de Student_TblT St.
Esta declaração é chamada 'GetStudent, possui um parâmetro de string e retorna um objeto do tipo StudentEntity.
Observe que a identificação do parâmetro é: #{StudentId}.
Selecione Detalhes da configuração do atributo de instrução:
| propriedade | descrever | Obtenha o valor | padrão |
| eu ia | Neste modo, um identificador exclusivo pode ser referenciado por outras declarações | ||
| ParameterType | O nome completo da classe ou pseudônimo para o parâmetro passado para esta afirmação | ||
| ResultType | A instrução retorna o nome ou alias inteiros do tipo de valor. Observe que, se for uma coleção, todo o nome da classe ou alias do item da coleção é preenchido aqui, em vez do nome da classe da própria coleção. (ResultType e ResultMap não podem ser usados juntos) | ||
| ResultMap | O nome de mapa resultante externo referenciado. O mapeamento do conjunto de resultados é o recurso mais poderoso no Mybatis. Muitos mapeamentos complexos podem ser facilmente resolvidos. (ResultType e ResultMap não podem ser usados juntos) | ||
| Flushcache | Se definido como true, o cache será limpo sempre que a instrução for chamada. A instrução SELECT está definida como falsa por padrão | Verdadeiro | Falso | falso |
| USECACHE | Se definido como true, o conjunto de resultados da instrução será armazenado em cache. A instrução SELECT é definida como falsa por padrão true | false false Timeout define o tempo máximo em que a unidade aguarda a resposta antes de lançar uma exceção. O padrão não é um valor e a unidade se decide. | Verdadeiro | Falso | falso |
| tempo esgotado | Defina o tempo máximo em que a unidade aguarda uma resposta antes de lançar uma exceção. O padrão deve ser definido sem um valor, e a própria unidade decide | Número inteiro positivo | Não definido |
| buscar | Após definir um valor, a unidade ficará animada para retornar após o número de conjuntos de resultados atingir esse valor. O padrão não está definido e a unidade decide. | Número inteiro positivo | Decisão de condução |
| Declaração Declaração de Declaração | declaração, declaração preparada, declaração chamada. Declarações preparadas, declarações chamáveis | DECLARAÇÃO PREPARADO Chamável | PREPARADO |
| ResultSettype | Forward_only, scroll_sensitive, scroll_insensitive Somente encaminhamento, rolando rolagem sensível e insensível ao caso | Forward_only Scroll_sensitive Scroll_insensitive | Decisão de condução |
2.2 Inserir
Uma declaração simples de inserção:
<!-inserir aluno-> <insert id = "insertStudent" parametertype = "studentEntity"> inserir em Student_tbl (student_id, student_name, student_sex, student_birthday, class_id) valores ( #{studentId}, #{ #} </insert>O Insert pode usar a política de chave primária automática suportada pelo banco de dados, definir usegeneratedkeys = "true" e definir o KeyProperty para a coluna correspondente, e isso está feito. Por exemplo, a StudentEntity acima usa gerado automaticamente para gerar uma chave primária para a coluna ID. Você também pode usar o elemento selectKey. O exemplo a seguir usa o banco de dados MySQL NextVal ('Student') como uma função personalizada para gerar uma chave.
<!-Insira a chave primária automática do aluno-> <insert id = "insertStudentAutoKey" parameterType = "StudentEntity"> <selectKey KeyProperty = "StudentId" ResultType = "String" Order = "Antes"> Selecione NextVal ('Student') </selectKey> insert in statent_tbl (Student_id, ( #{StudentId}, #{StudentName}, #{StudentSex}, #{StudentBirthday}, #{ClassEntity.classid}) </set>| propriedade | descrever | Obtenha o valor | padrão |
| eu ia | Neste modo, um identificador exclusivo pode ser referenciado por outras declarações | ||
| ParameterType | O nome completo da classe ou pseudônimo para o parâmetro passado para esta afirmação | ||
| Flushcache | Se definido como true, o cache será limpo sempre que a instrução for chamada. A instrução SELECT está definida como falsa por padrão | Verdadeiro | Falso | falso |
| USECACHE | Se definido como true, o conjunto de resultados da instrução será armazenado em cache. A instrução SELECT é definida como falsa por padrão true | false false Timeout define o tempo máximo em que a unidade aguarda a resposta antes de lançar uma exceção. O padrão não é um valor e a unidade se decide. | Verdadeiro | Falso | falso |
| tempo esgotado | Defina o tempo máximo em que a unidade aguarda uma resposta antes de lançar uma exceção. O padrão deve ser definido sem um valor, e a própria unidade decide | Número inteiro positivo | Não definido |
| buscar | Após definir um valor, a unidade ficará animada para retornar após o número de conjuntos de resultados atingir esse valor. O padrão não está definido e a unidade decide. | Número inteiro positivo | Decisão de condução |
| Declaração Declaração de Declaração | declaração, declaração preparada, declaração chamada. Declarações preparadas, declarações chamáveis | DECLARAÇÃO PREPARADO Chamável | PREPARADO |
| UseGeneratedKeys | Diga a Mybatis para usar o método GetGeneratedKeys da JDBC para obter a chave primária gerada pelo banco de dados (MySQL, SQLServer, etc. Os bancos de dados relacionais terão campos gerados automaticamente). Padrão: false | Verdadeiro | Falso | falso |
| KeyProperty | Identifique um valor a ser devolvido pela chave que é definida como Mybatis em GetGenerated Keys ou use um selectKey para a instrução Insert Sub-elementos. |
| propriedade | descrever | Obtenha o valor |
| KeyProperty | O atributo que precisa ser definido para o resultado gerado pela instrução SELECTKEY. | |
| ResultType | Gerar tipos de resultados. O MYBATIS permite o uso de tipos de dados básicos, incluindo tipos de string e int. | |
| Ordem | Pode ser definido para antes ou depois. Se estiver definido para antes, ele selecionará primeiro a chave primária, depois definirá o KeyProperty e executará a instrução Insert; Se estiver definido como depois, primeiro executará a instrução Insert e executará a instrução SELECLEKY, que geralmente é o mecanismo de sequência incorporado na instrução Insert no banco de dados de chamadas internas (como o Oracle). | ANTES DEPOIS |
| Declaração Declaração de Declaração | Como acima, os formulários Mybatis suporta os formulários de instrução preparados e chamáveis, correspondentes a respostas de instrução, estatamento preparado e callablablestatement. | DECLARAÇÃO PREPARADO Chamável |
2.3 Atualizar, excluir
Uma atualização simples:
<!-Atualizar informações do aluno-> <UPDATE ID = "UPDATESTUDENT" ParameterType = "StudentEntity"> Atualizar Student_TBl Definir Student_Tbl.student_name = #{StudentName}, Student_Tbl.student_sex = #{StudentSex}, Student_tbl.Dert_birtHda #{classentity.classid} onde estudante_tbl.student_id = #{StudentId}; </atualização>Uma exclusão simples:
<!-Excluir aluno-> <Delete id = "Deletestudent" ParameterType = "StudentEntity"> Excluir de Student_TBL onde Student_id = #{StudentId} </lete>
Atualizar e excluir Detalhes da configuração do atributo de instrução:
| propriedade | descrever | Obtenha o valor | padrão |
| eu ia | Neste modo, um identificador exclusivo pode ser referenciado por outras declarações | ||
| ParameterType | O nome completo da classe ou pseudônimo para o parâmetro passado para esta afirmação | ||
| Flushcache | Se definido como true, o cache será limpo sempre que a instrução for chamada. A instrução SELECT está definida como falsa por padrão | Verdadeiro | Falso | falso |
| USECACHE | Se definido como true, o conjunto de resultados da instrução será armazenado em cache. A instrução SELECT é definida como falsa por padrão true | false false Timeout define o tempo máximo em que a unidade aguarda a resposta antes de lançar uma exceção. O padrão não é um valor e a unidade se decide. | Verdadeiro | Falso | falso |
| tempo esgotado | Defina o tempo máximo em que a unidade aguarda uma resposta antes de lançar uma exceção. O padrão deve ser definido sem um valor, e a própria unidade decide | Número inteiro positivo | Não definido |
| buscar | Após definir um valor, a unidade ficará animada para retornar após o número de conjuntos de resultados atingir esse valor. O padrão não está definido e a unidade decide. | Número inteiro positivo | Decisão de condução |
| Declaração Declaração de Declaração | declaração, declaração preparada, declaração chamada. Declarações preparadas, declarações chamáveis | DECLARAÇÃO PREPARADO Chamável | PREPARADO |
<!-Declaração SQL multiplex para consultar todos os campos da tabela de estudantes-> <sql id = "selectStudentall"> Selecione ST.STUDENT_ID, ST.STUDENT_NAME, ST.STUDENT_SEX, ST.STUDENT_BIRTHDAY, ST.CLASS_ID DE ESTUDANT_TBL ST </SQL>
Dessa forma, você pode fazer referência e usá -lo diretamente na instrução SELECT. Altere a instrução Selecionar acima para:
<!-Consulte o aluno, de acordo com id-> <select id = "getStudent" parametertype = "string" resultmap = "StudentResultmap"> <incluir refid = "selectStudentall"/> onde s.student_id = #{studentId} </leclect> 2.5 parâmetros
Os parâmetros foram usados em muitos lugares acima, como consulta, modificação, condições de exclusão, inserção, dados modificados, etc. Os tipos de dados básicos que o Mybatis podem usar e os tipos complexos de dados de Java.
Tipos de dados básicos, string, int, data, etc.
No entanto, o uso de tipos básicos de dados pode fornecer apenas um parâmetro, portanto, você precisa usar a classe de entidade Java ou o tipo de mapa como tipo de parâmetro. Seus atributos podem ser obtidos diretamente através de #{}.
2.5.1 Parâmetros de tipo básico
Pesquise a lista de estudantes com base no tempo de admissão:
<!-Consulte a lista de estudantes, de acordo com o tempo de admissão-> <select id = "getStudentListByDate" parameterType = "date" resultmap = "StudentResultmap"> selecione * de Student_tbl ST </leclect>
Lista <DentudentEntity> StudentList = Studentmapper.getStudentListbyClassYear (Stringutil.parse ("2007-9-1")); for (estudanteEntity entityTemp: StudentList) {System.out.println (entityTemp.toString ()); } 2.5.2 Parâmetros do tipo de entidade java
Pesquise a lista de estudantes por nome e gênero. Use classes de entidade como parâmetros:
<!-Consulta Lista de estudantes, como nome, = gênero, tipo de entidade do parâmetro-> <select id = "getStudentListwarentity" parametertype = "studentEntity" resultmap = "StudentResultmap"> selecione * student_tbl st where st.student_name como concat ('e'%' #{{studentName}) #{StudentSex} </leclect> Entidade estudantil = new StudentEntity (); entity.setStudentName ("li"); entity.setStudentsex ("masculino"); Lista <DententEntity> StudentList = Studentmapper.getStudentListwarentity (entidade); for (estudanteEntity entityTemp: StudentList) {System.out.println (entityTemp.toString ()); } 2.5.3 Parâmetros MAP
Pesquise a lista de estudantes por nome e gênero. Use o mapa como parâmetros:
<!-Lista de estudantes de consulta, = gênero, mapa de parâmetros Tipo-> <select id = "getStudentListwhereMap" parametertype = "map" resultMap = "StudentResultMap"> selecione * de Student_tbl St Where St.Student_sex = #{Sex} e St.student_sex = #{sexo}} Mapa <string, string> map = new hashmap <string, string> (); map.put ("sexo", "feminino"); map.put ("nome", "li"); Lista <DentulStrity> studentList = studentmapper.getStudentlistwhereMap (mapa); for (estudanteEntity entityTemp: StudentList) {System.out.println (entityTemp.toString ()); } 2.5.4 Implementação de vários parâmetros
Se você deseja passar em vários parâmetros, precisará adicionar a anotação @param aos parâmetros da interface. Dado um exemplo:
Escrita de interface:
Lista pública <TristentEntity> getStudentListwhereparam (@param (value = "name") Nome da sequência, @param (value = "sexo") sexo de cordas, @param (value = "aniversário") date aniversário, @param (value = "classentity") classentity classentity);
Método de escrita SQL:
<!-Lista de estudantes de consulta, como nome, = gênero, = aniversário, = classe, método multi-parâmetro-> <select id = "getStudentListwhereparam" resultMap = "StudentResultMap"> selecione * #Student_tbl st <where> <se test = "nome! </if> <se test = "sexo! = nulo e sexo! = ''"> e st.student_sex = #{sex} </if> <se test = "aniversário! = #{ClassEntity.classid} </if>Faça uma consulta:
Lista <TentudentEntity> StudentList = studentmapper.getStudentListwhereparam ("," ", stringutil.parse (" 1985-05-28 "), Classmapper.getClassById (" 20000002 "); para (entidade de estudante. 2.5.5 Método de substituição de string
Por padrão, o uso da sintaxe #{} faz com que o mybatis gere a propriedade PreparedStatement e use o parâmetro preparado da estatição (=?) Para definir com segurança o valor. Tente ser rápido e seguro e também é usado com frequência. Mas às vezes você pode substituir as seqüências inalteradas em instruções SQL diretamente. Por exemplo, para ordem por, você pode usar isso: Order por $ {columnName}, mas o mybatis não modificará e contornará essa string.
Nota: Não é muito seguro receber e aplicar uma entrada do usuário em uma instrução inalterada dessa maneira. Isso permitirá que o usuário implante o código corrompido; portanto, exige que o campo não permita que o cliente entre ou você verifique diretamente sua legitimidade.
2.6 cache de cache
O Mybatis contém um mecanismo de cache poderoso, configurável e personalizável. A implementação do cache do Mybatis 3 foi aprimorada muitas vezes, o que é poderoso e mais fácil de configurar. Por padrão, o cache não está ativado. Além do cache da sessão, ele pode melhorar o desempenho e resolver dependências globais. Ligue o cache do nível 2, você só precisa adicionar uma linha simples ao arquivo de mapeamento SQL: <cache/>
A função desta frase simples é a seguinte:
(1). Todas as instruções selecionadas no arquivo de mapeamento serão armazenadas em cache.
(2). Todas as instruções de inserção, atualização e exclusão no arquivo de mapeamento limparão o cache.
(3). O cache é reciclado usando o algoritmo "raramente usado recentemente" (4). O cache não será limpo pelo tempo definido.
(5). Cada cache pode armazenar 1024 listas ou referências a objetos (independentemente do resultado da consulta).
(6). O cache será usado como um cache "Read/gravação", o que significa que o objeto recuperado não é compartilhado e é seguro para o chamador. Não haverá outras chamadas (7). ou potenciais modificações no encadeamento.
Por exemplo, crie um cache FIFO para limpar uma vez em 60 segundos, armazenar 512 resultados de objetos ou listar referências e retornar os resultados somente leitura. Porque modificá -los em tópicos não utilizados pode resultar em conflitos de referência.
<cache despettion = "fifo" flushinterval = "60000" size = "512" readonly = "true"> </cache>
Você também pode compartilhar a mesma configuração ou instância em cache em diferentes espaços para nome. Nesse caso, você pode usar o cache-ref para fazer referência a outro cache.
<cache-ref namespace = "com.liming.manager.data.studentmapper"/>
Detalhes da configuração do atributo de instrução cache:
| propriedade | ilustrar | Obtenha o valor | valor padrão |
| Despejo | Política de armazenamento em cache: LRU - Menos recentes Uso: Remova objetos que não foram usados no último longo período. Fif- Primeiro primeiro a sair: Mova o objeto anterior na fila Soft - Soft Reference: Com base em regras de referência suave, use mecanismo de coleta de lixo para remover objetos Fraco - Referência fraca: Use o mecanismo de coleta de lixo para remover com força os objetos com base em regras de referência fracas | Lru Fifi MACIO FRACO | Lru |
| FlushInterval | Representa um tempo total razoável de milissegundos. O padrão não está definido; portanto, se você usar a limpeza da UNINTRAL, poderá ligar apenas para limpar as instruções para limpá -lo. | Número inteiro positivo | Não definido |
| tamanho | O tamanho do objeto em cache | Número inteiro positivo | 1024 |
| Readonly | O cache somente leitura retornará a mesma instância a todos os chamadores. Portanto, nenhum deles pode ser modificado, o que pode melhorar bastante o desempenho. O cache gravável passará pela sequência para retornar uma cópia de um objeto em cache. Isso será mais lento, mas mais seguro. Portanto, o valor padrão é falso. | Verdadeiro | Falso | falso |