Neste artigo, apresentarei os princípios da estrutura do Mybatis e do programa introdutório da Mybatis para realizar a adição, exclusão, modificação e inspeção do usuário. Quais são suas vantagens e desvantagens e que relacionamento existe entre Mybatis e Hibernate. Espero que seja útil para meus amigos. Se houver alguma falha, dê -me alguns conselhos.
O que é Mybatis?
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. Migrou para o GitHub em novembro de 2013.
O Mybatis é uma excelente estrutura de camada de persistência que suporta SQL personalizada, procedimentos armazenados e mapeamento avançado. Mybatis evita quase todos os parâmetros de código JDBC e configuração manual e conjuntos de resultados dizimando. O Mybatis usa XML simples ou anotações para configurar e mapear as primitivas, o mapeamento de interfaces e os pojos java (objetos java antigos simples) em registros no banco de dados. Simplificando, Mybatis é uma estrutura de camada persistente. O Mybatis permite que o programa se concentre no SQL e gera instruções SQL de forma livre e flexível que atendem às necessidades através do método de mapeamento fornecido pelo Mybatis. Mybatis pode inserir automaticamente o mapa dos parâmetros de entrada para preparar e mapear com flexibilidade o resultado da consulta nos objetos Java.
Em seguida, vamos entender o princípio da estrutura de Mybatis através de uma foto:
Explicação da arquitetura da estrutura:
um. Carregando o arquivo de configuração: a configuração vem de dois lugares, um é o arquivo de configuração e o outro é a anotação do código Java. As informações de configuração do SQL são carregadas em objetos MappedStatement (incluindo a configuração de mapeamento de parâmetros passados, instruções SQL executadas e configuração de mapeamento de resultados) e armazenadas na memória.
b. SQL Parsing: Quando a camada de interface da API recebe a solicitação de chamada, ela receberá o ID do SLQ recebido e do objeto recebido (pode ser mapa ou tipo de dados básico). Mybatis encontrará o MappEdStatement correspondente com base no ID do SQL e, em seguida, analisará o MappedStatement com base no objeto de parâmetro recebido. Após a análise, você pode obter as instruções e parâmetros SQL a serem executados no final.
c. Execução SQL: Pegue o SQL e os parâmetros finais para o banco de dados para execução e obtenha os resultados da operação do banco de dados.
d. Mapeamento de resultados: converta os resultados do banco de dados operacional de acordo com a configuração de mapeamento, que pode ser convertida em hashmap, javabean ou tipo de dados básico e retornar o resultado final.
Análise do programa para iniciantes mybatis
Em seguida, o editor apresentará os requisitos específicos em combinação com a demonstração, e os requisitos são os seguintes:
Consulta as informações do usuário com base no ID do usuário;
Consulta Informações do usuário Fuzzyly com base no nome de usuário;
Adicione, exclua e atualize os usuários.
O primeiro passo é criar vários pacotes e classes, o diretório do projeto é o seguinte:
A segunda etapa é escrever o conteúdo em sqlmapconfig.xml e configurar o ambiente de corrida, fonte de dados, transações etc. de Mybatis. O código se parece com o seguinte:
<span style = "font-family: Comic Sans ms; font-size: 18px;"> <? xml versão = "1.0" coding = "utf-8"?> <! Doctype Configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <figuration> <!-A configuração dos ambientes será abolida após a integração da mola-> <ambientes padrão- Pool de conexão, gerenciado por mybatis -> <dataSource type = "poled"> <propriedade name = "driver" value = "$ {jdbc.driver}"/> <names name = "url" value = "$ {jdbc.url}"/> <nome do nome "{") value = "$ {jdbc.password}"/> </dataSource> </ambientes> <!-carregando o arquivo do mapa-> <palppers> resource = "sqlmap/user.xml"/> </mappers> </figuration> </span>O terceiro passo é escrever o conteúdo no user.java, como mostrado abaixo:
<span style = "font-family: Comic Sans ms; font-size: 18px;"> pacote cn.itcast.mybatis.po; importar java.util.date; /** * * <p> Título: Usuário </p> * <p> Descrição: Usuário po </p> * @author ding guohua * @date 31 de julho de 2016 15:39:04 * @version 1.0 */public class User {// O nome do atributo corresponde aos campos da tabela de dados privada int id;; Nome de usuário de String Private; // Nome do usuário Private String Sex; // Gênero Data Privada Aniversário; // Endereço de String Private de Aniversário; // Endereço public int getId () {return ID; } public void setId (int id) {this.id = id; } public string getUserName () {return userName; } public void setUserName (string userName) {this.username = nome de usuário; } public string getSex () {return Sex; } public void SetSex (sexo de string) {this.sex = sexo; } public data getBirthday () {return Birthday; } public void setbirthday (data de aniversário) {this.birthday = aniversário; } public string getAddress () {retornar endereço; } public void setAddress (endereço da string) {this.address = endereço; } @Override public string tostring () {return "user [id =" + id + ", nome de usuário =" + nome de usuário + ", sexo =" + sexo + ", aniversário =" + aniversário + ", endereço =" + endereço + "]"; }} </span>Etapa 4: para implementar a função de adicionar, excluir, modificar e pesquisar, primeiro escreva o conteúdo no user.xml, como mostrado abaixo:
<span style = "font-family: Comic Sans ms; font-size: 18px;"> <? xml versão = "1.0" coding = "utf-8"?> <! "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-O espaço para nome namespace é a função de classificar o gerenciamento do SQL e entender o isolamento do SQL Note: Usando o Método do Mapper Proxy para desenvolver, o nome do nome da SPEL "SQL NOMSP (MAPERN NOMENACE" MAPERN (MAPERN Namesp " Arquivo de mapeamento-> <!-Requisitos: Consulte os registros da tabela de usuários por meio de ID-> <!-Execute o ID da consulta do banco de dados: identifique o SQL no arquivo de mapeamento encapsular a instrução SQL em um objeto MAPPEDSTATEMENT, de modo que o ID é chamado de ID do tipo #especificar o tipo #Specy #Specy #Specy #Specy #Specy #Specy #Specy #Specy #Specty #SpectTen #SpectatEn (especificar o tipo # # # # # # # # # # # # # #the typen # #the typen # # ID representa o parâmetro que recebe a entrada e o nome do parâmetro é ID. Se o parâmetro de entrada for um tipo simples, o nome do parâmetro em #{} poderá ser arbitrário e pode ser valor ou outros nomes resultatype: especifique o tipo do objeto Java mapeado do resultado da saída do SQL e selecione Specify ResultType para representar o objeto Java mapeado para um único registro. -> <select id = "findUserById" parameterType = "int" resulttype = "cn.itcast.mybatis.po.user"> selecione * do usuário em que id =#{value}} </select> <!-especificação de informações sobre o usuário com base no nome do usuário, o número de múltiplos resultados pode ser retornado: o objeto de especificação é o que é o nome do usuário. Excreva a sequência SQL e cedendo o conteúdo dos parâmetros recebidos no SQL sem qualquer modificação. Use $ {} para unir o SQL, fazendo com que o SQL injete $ {value}: para receber o conteúdo dos parâmetros de entrada. Se o tipo de entrada for um tipo simples, você só poderá usar o valor em $ {}-> <select id = "findUserbyName" parameterType = "java.lang.string" resultype = "cn.itcast.mybatis.po.user"> selecione * do usuário onde o uso do uso de uso do uso de usuários! O tipo de parâmetro é POJO (incluindo informações do usuário) Especifique o nome do atributo do Pojo em #{}, receba o valor do atributo do objeto Pojo, mybatis obtém o valor do atributo do objeto através do OGNl-> <insert id = "insertUser" parameterType = "cn.itcast.mybatis.po.PoSer" SELECT LAST_INSERT_ID (): Obtenha o valor da chave primária gravado apenas inserido nele, o que é aplicável apenas à opção de chave primária de auto-incremento: Defina o valor da chave primária da consulta na propriedade do objeto especificado por parameterTyPe: Selecty: last_insert_id () Execution, a rendição da Inserção de Inserção. keyProperty = "id" order = "após" resultType = "java.lang.integer"> selecione LAST_INSER_ID () </selectKey> inserir no usuário (nome de usuário, aniversário, sexo, endereço) valor (#{userrame},#{{}#{sexo},#{endereço}) <! Primeiro, obtenha a chave primária por meio do UUID, defina a chave primária para o atributo ID do objeto do usuário e, em segundo lugar, quando a inserção for executada, remova o valor do atributo de identificação do objeto do usuário-> <selectKey KeyProperty = "id" Order = "Antes" ResultType = "Java.Lang.String"> select uuid () </selecty> insern> valor (#{nome de usuário},#{aniversário},#{sex},#{endereço}); </insert> <!-Para excluir o usuário para excluir o usuário com base no ID, você precisa inserir o valor de ID-> <delete id = "DeleteUser" parameterType = "java.lang.integer"> Excluir do usuário em que id =#{id} </Delete> <!-Atualizar o usuário com base no ID: Especifica o objeto do usuário, incluindo as informações de ID e atualização. Nota: O ID deve existir#{id}: Obtenha o valor do atributo ID do objeto de usuário de entrada -> <Update id = "updateUser" parameterType = "cn.itcast.mybatis.po.user"> Atualize o usuário set userName =#{username} =#{{}}, sexo = {sexo {sexo}},#{{username} =#{{},##{sexo {sexo}},}, {{{u uster </mapper> </span>Etapa 5: Escreva o método específico da seguinte maneira:
<span style = "font-family: Comic Sans ms; font-size: 18px;"> pacote cn.itcast.mybatis.first; importar java.io.ioException; importar java.io.inputStream; importar java.util.date; importar java.util.list; importar org.apache.ibatis.io.resources; importar org.apache.ibatis.session.sqlSessionFactory; importar org.apache.ibatis.session.sqlSessionFactoryBuilder; importar org.junit.test; importar cn.itcast.mybatis.po.user; classe pública MyBatisfirst {// Consulta Informações do usuário com base no ID e obtenha um resultado registro @test public void findUserByidTest () lança IoException {// mybatis Configuration file string Resource = "sqlmapConfig.xml"; // Obter fluxo de arquivo de configuração InputStream inputStream = Resources.getResourCeasStream (Resource); // Crie uma fábrica de sessão e passe nas informações do arquivo de configuração mybatis sqlsessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder () .Build (InputStream); // obtém sqlSession através da fábrica sqlSession sqlSession = sqlSessionFactory.opensssion (); // opera o banco de dados através do SQLSession // O primeiro parâmetro: o ID da instrução no arquivo do mapa é igual a = namespace+ "."+ ID da instrução // O segundo parâmetro: especifique o parâmetro do parameterType que o tipo de financamento correspondente no tipo de mapa // sqlSession.SesetCone Result Is um objeto do resultado do resultado do resultado sqlSession.SelectOne ("test.finduserbyId", 1); System.out.println (usuário); // Libere o recurso sqlSession.close (); } // Consulta difusa A lista de usuários com base no nome do usuário @test public void findUserByNameTest () lança IoException {// mybatis Configuration file string Resource = "sqlmapconfig.xml"; // Obtenha o arquivo de configuração inputStream inputStream = Resources.getResourCeasStream (Resource); // Crie uma fábrica de sessão e passe nas informações do arquivo de configuração mybatis sqlsessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (inputStream); // obtém sqlSession através da fábrica sqlSession sqlSession = sqlSessionFactory.opensssion (); // O usuário na lista na lista é o mesmo que o tipo especificado pelo alemão resulttype na lista de arquivos de mapeamento <suser> list = sqlSession.SelectList ("test.finduserbyname", "xiao ming"); System.out.println (list); sqlSession.Close (); } public void insertUsertest () lança IoException {// mybatis Configuration file string Resource = "sqlmapConfig"; // Obter fluxo de arquivo de configuração InputStream inputStream = Resources.getResourCeasStream (Resource); // Crie uma fábrica de sessão e passe nas informações do arquivo de configuração mybatis sqlsessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (inputStream); // obtém sqlSession através da fábrica sqlSession sqlSession = sqlSessionFactory.opensssion (); // Insira o usuário do usuário Usuário do Usuário = new User (); user.setUserName ("Ding Guohua"); user.setBirthday (new Date ()); user.SetSex ("1"); user.setAddress ("Anhui hefei"); // o usuário na lista e o tipo especificado pelo resultado do arquivo de mapeamento são sempre sqlsession.insert ("test.insertuser", usuário); // envia coisas sqlsession.Commit (); // fechar a sessão sqlsession.close (); } // Excluir informações do usuário com base no ID @Test public void deLeteUsertest () lança IoException {// mybatis Configuration file string Resource = "sqlmapconfig.xml"; // Obter fluxo de arquivo de configuração InputStream inputStream = Resources.getResourCeasStream (Resource); // Crie uma fábrica e passe nas informações do arquivo de configuração mybatis SQLSessionFactory SQLSessionFactory = new SQLSessionFactoryBuilder (). Build (InputStream); // obtém sqlSession através da fábrica sqlSession sqlSession = sqlSessionFactory.opensssion (); // Passando ID ID de entrada Excluir usuário sqlSession.Delete ("test.deleteUser", 39); // envia coisas sqlsession.Commit (); // fechar a sessão sqlsession.close (); } // Atualize informações do usuário @test public void updateUsertest () lança ioexception {// mybatis configuration file string Resource = "sqlmapconfig.xml"; // Obter fluxo de arquivo de configuração InputStream inputStream = Resources.getResourCeasStream (Resource); // Crie uma fábrica de sessão e passe nas informações do arquivo de configuração mybatis sqlsessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder () .Build (InputStream); // obtém sqlSession através da fábrica sqlSession sqlSession = sqlSessionFactory.opensssion (); // Atualize o usuário do usuário = novo usuário (); // Atualizar id user.setId (41); user.setUserName ("Ding Guohua"); user.setBirthday (new Date ()); user.SetSex ("2"); user.setAddress ("Anhui hefei"); sqlSession.Update ("test.updateUser", usuário); // CONMIDE transação sqlsession.Commit (); // Fechar sessão sqlsession.close (); }} </span>Prós e contras de mybatis
vantagem:
um. Fácil de começar e dominar.
b. O SQL está escrito no XML, que facilita o gerenciamento e otimização unificados.
c. Decouple SQL e código do programa.
d. Forneça tags de mapeamento para suportar o mapeamento de relacionamento de campo ORM entre objetos e bancos de dados
e. Forneça tags de mapeamento de relacionamento de objetos para apoiar a construção e manutenção de relacionamentos de objetos
f. Forneça tags XML e suporte a gravar sql dinâmico.
deficiência:
um. A carga de trabalho do SQL é muito alta, especialmente quando existem muitos campos e muitas tabelas relacionadas.
b. O SQL depende do banco de dados, resultando em baixa portabilidade do banco de dados.
c. Como o ID da tag no XML deve ser único, os métodos no DAO não suportam a sobrecarga do método.
d. A camada DAO é muito simples e a carga de trabalho da montagem de objetos é relativamente grande.
e. O uso inadequado do cache pode gerar facilmente dados sujos.
Comparação entre Mybatis e Hibernate
Similaridades: Hibernate e Mybatis podem gerar SessionFactory a partir do arquivo de configuração XML através do SessionFactoryBuilder e, em seguida, gerar sessão a partir de sessionfactroy. Finalmente, a sessão começa a executar as coisas e as instruções SQL. Os ciclos de vida de SessionFactoryBuilder, SessionFactory e Session são quase os mesmos.
Diferenças:
Mybatis: pequeno, conveniente, eficiente, simples, direto, semi-automático;
Hibernato: poderoso, conveniente, eficiente, complexo, dobras, totalmente automático;
mybatis:
um. Simples para começar, aprender e usá -lo o mais rápido possível. Ele fornece função de ligação de objetos automática para consultas de banco de dados e continua muita experiência em uso do SQL. É perfeito para projetos que não possuem requisitos de modelo de objetos tão altos.
b. A otimização SQL mais detalhada pode ser realizada e os campos de consulta podem ser reduzidos.
c. A desvantagem é que a estrutura ainda é relativamente simples e as funções ainda estão faltando. Embora o código de ligação de dados seja simplificado, toda a consulta de banco de dados subjacente realmente precisa ser gravada por si só, a carga de trabalho é relativamente grande e não é fácil de se adaptar à modificação rápida do banco de dados.
d. O mecanismo secundário de cache é ruim.
Hibernate:
um. Funções fortes, boa irrelevância do banco de dados e recursos fortes de mapeamento de O/R. Se você é bastante proficiente em Hibernate e encapsula adequadamente o hibernato, todo o código da camada de persistência do seu projeto será bastante simples, o código que precisa ser escrito é muito alto, a velocidade de desenvolvimento é muito rápida e é muito legal.
b. Há um melhor mecanismo de cache secundário e um cache de terceiros pode ser usado.
c. A desvantagem é que o limiar de aprendizado não é baixo e você deve ser proficiente nele. Como projetar o mapeamento de O/R, como equilibrar o modelo de desempenho e objeto e como usar o Hibernate Well requer sua experiência e capacidade de serem fortes.
Deixe -me dar uma metáfora vívida:
Mybatis: as ferramentas mecânicas são fáceis de usar e podem ser usadas o mais rápido possível, mas o trabalho ainda precisa ser feito por você mesmo, mas as ferramentas estão vivas; portanto, como fazê -las depende de mim.
Hibernate: Robot inteligente, mas é muito caro desenvolvê -lo (aprendizado, proficiência) e trabalho pode se livrar dele, mas apenas o que pode fazer.
Mensagem do editor: Nesta postagem do blog, o editor apresentou principalmente brevemente o conhecimento básico dos Mybatis, incluindo uma demonstração simples de adicionar, excluir, modificar e pesquisar, as vantagens e desvantagens de Mybatis e a comparação entre Hibernate e Mybatis. As semelhanças e diferenças entre eles. Mybatis é simplesmente uma estrutura de camada de persistência. O Mybatis permite que o programa se concentre no SQL e gera instruções SQL de forma livre e flexível que atendem às necessidades através do método de mapeamento fornecido pela MyBatis. O Mybatis pode inserir automaticamente os parâmetros de entrada para preparar e mapear com flexibilidade o resultado da consulta nos objetos Java.
O acima é o tutorial introdutório para a visão geral do princípio do Mybatis, introduzida pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!