Mybatis é um projeto de código aberto do Apache. Em 2010, este projeto foi transferido da Apache Software Foundation para o Google Code e foi renomeado Mybatis. A seguir, é apresentado o mapeamento avançado do Mybatis, o SQL dinâmico e obter o conteúdo da chave primária de incrementos automáticos. Para detalhes, consulte este artigo.
1. SQL dinâmico
Acredito que todos sempre encontrarão um problema ao usar o Mybatis para operar o banco de dados. Se agora tivermos um autor da Lista sobre o autor, precisamos consultar as informações do blog do autor correspondente no banco de dados com base nas informações do autor existente na Autorlist. Então, a maneira mais fácil de pensar é atravessar a lista do autor e obter as informações correspondentes para consultar o banco de dados.
for (int i = 0; i <autorlist.size (); i ++) {… // Query Database Code // Selecione * no blog Where Author =#{Autor, JDBCType = Varchar}}Pense nisso, se o comprimento do autor é n, precisamos consultar o banco de dados N vezes. Se usarmos esse método, a sobrecarga do programa não é apenas sobre consulta, mas também sobre a elaboração da instância de conexão do pool de conexão do banco de dados, estabelecendo uma conexão com o banco de dados e retornando a instância do banco de dados ao pool de conexão do banco de dados. Suponha que essas três ações levem um total de 0,001 segundos. Então, se você usar métodos de travessia para consultar, levará 0,001n segundos a mais. Se você precisar consultar 1.000 vezes, será mais 1 segundo. Isso é insuportável para os programadores, porque essa é apenas uma consulta circular e não contando como outro código comercial.
Então, existe uma maneira melhor? A resposta é sim, uma das quais é SQL dinâmica:
Primeiro, envie o código:
<select id = "DynamicForEachtest" resultType = "com.blog.blog" parameterType = "java.util.list"> selecione * no blog onde autor em <foreach collection = "list" index = "Índice" item "item" ("(" separador = "," close = ")">#{}}O TEM representa o alias quando cada elemento no conjunto é iterado.
O índice especifica um nome para representar a posição na qual cada iteração é atingida durante o processo de iteração.
aberto significa onde a declaração começa,
O separador indica qual símbolo é usado como separador entre cada iteração.
O fechamento indica o que termina com o valor de retorno pode ser aceito usando a lista <olg>.
No entanto, a declaração foreach no SQL dinâmico usa a coisa mais real em declarações de inserção e geralmente é usada nas cláusulas.
2. Mapeamento avançado
Ao usar o mybatis, a classe ResultType = com.blog.author entidade é geralmente usada para aceitar resultados de consulta.
Ou use resultType = java.util.map para retornar o nome da coluna do banco de dados como chave e o valor de registro como valor.
Mas desta vez, é necessário o resultante, o que permite uma combinação gratuita de valores de retorno para lidar com consultas mais complexas.
Ou basta fazer o upload do código primeiro:
SQL:
<select id = "getBlogs" resultmap = "blogs" parametertype = "map"> selecione A.Authorid, A.UThorname, B.Blogid, B.BLOGNAMEFROM AUTOR A LENTAR Blog B no a. autorID = b. autorid onde a. AutorID = #{AuthorId, JDBCType = Integer} </leclect>Configuração mybatis:
<resultMap id="blogs" type="com.bloh.Blog"><id property="authorID" column="authorID"><result property="authorName" column="authorName"><collection property="postsList" ofType="com.bolg.Post"><id property="blogID" column="blogID"/><result property="blogName" Column = "Blogname"/> <Result Property = "Blogname"/> </ResultMap>
Classe de entidade do blog
Classe pública Bolg {private Integer AuthorId; Private String Authorname; Private List <Post> PostList; // Setter Getter}Classe de entidade post
Public class Post {private Integer BlogId; Private String Blogname; // Setter Getter}Isso permite que você aceite uma consulta complexa com uma entidade.
A seguir, a função de cada atributo:
Não vou entrar em detalhes sobre outras propriedades e configurações das consultas comuns do Mybatis.
ResultMap é usado em vez de resultado, indicando o formato retornado pelo resultado da consulta
O ID no ResultMap possui duas funções principais:
Índices semelhantes para melhorar o desempenho da consulta
Distinguir resultados diferentes
Portanto, é melhor não omitir ID. Se não houver chave primária, use um campo que possa distinguir exclusivamente os registros.
Resultado é o nome da variável definido na classe de entidade, e a coluna é o nome da coluna do banco de dados
A coleção é uma coleção de listas, mapas, etc.
PostList é o nome da variável da lista definido na classe de entidade do blog
OFTYPE é a classe de entidade do objeto na lista de objetos.
3. Obtenha o ID auto-acrescente:
Se houver a seguinte situação, depois de inserir o registro do banco de dados, você deseja obter a chave primária do registro de inserção e usar o código comercial subsequente
Em seguida, o Mybatis também fornece suporte correspondente para esta situação (a inserção em lote não é suportada):
O MySQL é o som de incêndio autônomo original; Supondo
<insert id = "insert" useGeneratedKeys = "true" keyProperty = "id" parameterType = "user"> inserir em <incluir refid = "tabela_name" /> (nome, idade) valores ( #{name}, #{idade}) < /insert>Existem mais dois atributos do que a inserção comum usegeneratedkeys = "true", o que significa que ele retorna o ID de auto-incremento quando ativado.
keyProperty = "ID" significa o nome da chave primária de retorno.
Em seguida, você pode usar as seguintes declarações para recebê -lo no código comercial:
Suponha que a classe de entidade seja usuário
UserNew do usuário = UserMApper.insert (Usuário);
UserNew.getId // é o ID de incrementado automaticamente após a inserção
De fato, a chave primária de incremento automático do MySQL pode ser obtida por select last_insert_id ();
Então, há outra maneira de escrever:
<inserir id = "insert" parameterType = "user"> <selectKey resultType = "int" order = "After" keyProperty = "id"> selecione Last_insert_id () como id </selectKey> inserir no nome, AgeValues ( #{name}, #{Age}) </insert>É exatamente o oposto do método do MySQL de obter teclas primárias. O MySQL é a tabela que aloca o valor de auto-crescimento após a execução da inserção, enquanto o Oracle obtém o valor de auto-crescimento antes de executar o Inserir SQL. Antes de executar o Insert SQL, um valor de chave primária deve ser especificado no registro a ser inserido. Portanto, você precisa obter a sequência de auto-crescimento em "Antes" e injetá-la no mapa de parâmetros por selectKey. Assuma a auto-crescimento ou id
<insert id=" insert " useGeneratedKeys="true" keyProperty="id" parameterType="xxxx" ><selectKey resultType="int" order="BEFORE" keyProperty="id">SELECT SEQ_TABLE.NEXTVAL FROM dual</selectKey>INSERT INTO id,name,ageVALUES(#{id} #{name}, #{age} ) </insert>O ID aqui é o ID de incremento automático obtido pelo SelectKey.
O método de recepção é o mesmo que MySQL. Ao obter a chave primária de incremento automático, é melhor usar a recepção da entidade.
O exposto acima é o mapeamento avançado do Mybatis, o SQL dinâmico e a obtenção de teclas primárias auto-amadas apresentadas a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!