Introdução a 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 termo ibatis vem da combinação de "Internet" e "Abatis", e é uma estrutura de camada de persistência baseada em Java. Ibatis fornece estruturas de camada de persistência, incluindo mapas SQL e objetos de acesso a dados (DAO)
1. Pacote de jar exigido
Aqui discutimos o uso de Mybatis separadamente, basta colocar o pacote mybatis-xxxjar.
Se você usa o Maven para criar um projeto, precisará colocar a seguinte configuração na dependência do pom.xml:
<Depencency> <voupid> org.mybatis </roupidId> mybatis </artifactId> <versão> 3.2.2 </versão> </dependency>
Atualmente, a empresa usa 3.2.2 e você pode colocar o número da versão de acordo com o seu próprio pacote JAR.
Se você estiver se integrando à estrutura correspondente, precisará colocar o pacote de integração. Por exemplo, nossa empresa usa o Mybatis para se integrar à primavera.
Você também precisa adicionar o pacote mybatis-spring-xxx.jar e decidir com base na situação real. Obviamente, os pacotes de jar driver de banco de dados também são indispensáveis.
2. Construa SQLSessionFactory a partir de XML
Cada aplicativo baseado em Mybatis está centrado em uma instância do SQLSessionFactory.
Uma instância do SQLSessionFactory pode ser obtida através do SQLSessionFactoryBuilder.
O SQLSessionFactoryBuilder pode criar uma instância do SQLSessionFactory a partir de um arquivo de configuração XML ou de uma instância de configuração pré-customizada.
É muito simples criar uma instância do SQLSessionFactory a partir de um arquivo XML. Recomenda -se usar o arquivo de recursos no caminho de classe para configuração.
No entanto, ele também pode ser configurado usando qualquer instância do InputStream, incluindo um caminho de arquivo na forma de uma string ou um caminho de arquivo na forma de um arquivo: // URL.
O Mybatis contém uma classe de ferramentas chamada Recursos, que contém alguns métodos práticos que facilitam o carregamento de arquivos de recursos do ClassPath ou de outros locais.
Por exemplo:
String Resource = "mybatis-config.xml"; inputStream IS = Resources.GetResourceasStream (Resource); SQLSessionFactory SQLSessionFactory = new SQLSessionFactoryBuilder (). Build (IS);
O arquivo de configuração XML (Configuration XML) contém as configurações principais do sistema MyBatis, incluindo a fonte de dados para obter a instância de conexão do banco de dados (DataSource)
e um gerenciador de transações (TransactionManager) que determina o modo de escopo e controle das transações. O arquivo de configuração será discutido em detalhes posteriormente.
Por exemplo:
<!--?xml version="1.0" encoding="UTF-8" ?--><configuration><environments default="development"><environment id="development"><transactionmanager type="JDBC"><datasource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"><property name="url" value = "jdbc: mysql: //192.168.200.12: 3306/test_mybatis"> <propriedade name = "username" value = "root"> <names = "senha" value = "root123"> </propriedade> <///////////dataSource> </transmanger- UserMainmapper.xml Arquivo. UserMainmapper.xml está localizado no pacote com.lanhuigu.mybatis.map, portanto, o recurso é escrito como com/lanhuigu/mybatis/map/userMainmapper.xml-> <Mapper Resource = "coma/lanhugu>/MyBatis//usermainMainMlaPer.xerces.xperce =" com com complicado>/MyBatis//usermainMaMPRESPRUCE = SPRESSTRUCE = "com complicado>/MyBatis/MyBatis/UsermainMaMlapper.xperce = slige =/lanhugu>
O corpo do elemento ambiente contém a configuração do gerenciamento de transações e do pool de conexões. O elemento Mappers contém um conjunto de mapeadores de mapeadores (os arquivos XML desses mapeadores contêm código SQL e informações de definição de mapeamento).
3. Obtenha sqlSession da SQLSessionFactory
Agora que temos o SQLSessionFactory, podemos obter uma instância de SQLSession. O SQLSession contém totalmente todos os métodos necessários para executar comandos SQL em um banco de dados.
Você pode executar diretamente as instruções SQL mapeadas através da instância do SQLSession. Por exemplo:
SqlSessionFactory sqlSessionFactory = null; // xml Build sqlSessionFactory Factory Instância de fábrica SQLSession Session = null; // Obtenha o objeto SQLSession do sqlSessionFactory Factory Instuly Try {String Resource = "MyBatis-Config.xml (stringStream) = Recursos.TenstStream = Recursos. SqlSessionFactoryBuilder (). Build (is); session = sqlSessionFactory.opensssion (); usuário do usuário = session.SelectOne ("com.lanhuigu.mybatis.map.UsermainMapper.QueryUserMainByIr", 1); System.out.PrintLn (User.getSapSaMaNaNa (); Não há problema em executar o mapeamento dessa maneira, também podemos executar o mapeamento de uma maneira mais concisa.
Use uma interface que possa descrever razoavelmente parâmetros e retornar valores para uma determinada declaração (por exemplo, UserMainMapper.class),
Você não apenas pode executar o código mais claro e seguro de tipo agora, mas não precisa se preocupar com literais e elencos de cordas propensas a erros. Por exemplo:
SQLSession Session = sqlSessionFactory.opensssion (); UserMainMapper UserMainMapper = session.GetMapper (UserMainMapper.class); Usuário UserMainMapper .QueryUserMainById (1);
4. Exemplo
É fácil ficar confuso apenas lendo, mas não praticando. Veja os exemplos e volte para ler o documento, talvez o efeito seja melhor.
Prepare o pacote JAR:
mybatis-3.2.2.jar (mybatis)
MySQL-Connector-Java-5.1.21.jar (driver de banco de dados)
Junit-4.4.Jar (teste, não quero usar este JUNIT, você pode usar o método principal para testá-lo)
Estrutura do projeto:
banco de dados:
Crie a tabela `t_user_main` (` f_id` int (11) não nula, `f_username` varchar (20) nulo padrão,` f_age` int (3) nulo padrão, chave primária (`f_id`)) Engine = myisam default = latin1; insert em t_er_man)
Configuração XML do Mybatis-mybatis-config.xml:
<!--?xml version="1.0" encoding="UTF-8" ?--><configuration><environments default="development"><environment id="development"><transactionmanager type="JDBC"><datasource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"><property name="url" value = "jdbc: mysql: //192.168.200.12: 3306/test_mybatis"> <propriedade name = "username" value = "root"> <names = "senha" value = "root123"> </propriedade> <///////////dataSource> </transmanger- UserMainmapper.xml Arquivo. UserMainmapper.xml está localizado no pacote com.lanhuigu.mybatis.map, portanto, o recurso é escrito como com/lanhuigu/mybatis/map/userMainmapper.xml-> <Mapper Resource = "coma/lanhugu>/MyBatis//usermainMainMlaPer.xerces.xperce =" com com complicado>/MyBatis//usermainMaMPRESPRUCE = SPRESSTRUCE = "com complicado>/MyBatis/MyBatis/UsermainMaMlapper.xperce = slige =/lanhugu>
User.java:
pacote com.lanhuigu.mybatis.entity; importar java.io.Serializable; public class User implementa serializável {private estático final serialversionUid = -34120680973487599984l; private Id; id) {this.id = id;} public string getUserName () {return userName;} public void setUserName (string userName) {this.username = username;} public integer getage () {retorna idade;UserMainmapper.xml:
<!-? xml versão = "1.0" coding = "utf-8"?-> <!-Especifique um espaço para nome exclusivo para este mapeador. O valor do espaço para nome está convencionalmente definido como o nome do pacote + remova o nome do arquivo do sufixo do arquivo de mapa SQL. Isso pode garantir que o valor do espaço para nome seja único. Por exemplo, Namespace = "com.lanhuigu.mybatis.map.usermainmapper" é com.lanhuigu.mybatis.map (nome do pacote) + userMainmapper (usaMainMapper.xml é removido)-> <Mapper Samesace = "com.lanHuguat.mymB.Mybat.Mybuat.MyMB)-> <Mappper Samespace =" com.lanHugulas Instrução SQL Na tag Selecionar, defina o atributo ID da tag Selecionar como QueryUserMainById, o valor do atributo de identificação deve ser exclusivo e o atributo ParameterType não pode ser reutilizado para indicar o tipo de parâmetro usado na consulta. O atributo ResultType indica o tipo de conjunto de resultados retornado pela consulta resulttype = "com.lanhuigu.mybatis.entity.user" significa encapsular o resultado da consulta em um objeto da classe de usuário retorna à classe de usuário, que é a classe de entidade correspondente à tabela de usuários-> <select id = "querymiDyby" ResultType = "com.lanhuigu.mybatis.entity.User"> Selecione f_id ID, f_username nome de usuário, idade f_age de t_user_main onde f_id = #{id} </select> </mapper>Código de teste mybatistest.java:
pacote com.lanhuigu.mybatis; importar java.io.ioException; importar java.io.inputStream; importar org.apache.ibatis.io.resources; importar org.apache.ibatis.session.sqlSession; importação org.apache.ibatis.sqlso org.apache.ibatis.session.sqlSessionFactoryBuilder; importar org.junit.test; importar com.lanhuigu.mybatis.entity.user; classe pública mybatistest {@Testpublic void testmybatis () thons ioException {sqSlssFumss; SQLSessionFactory Factory Instância SQLSession Sessão = null; // Obtenha o objeto SQLSession Try {//1.mybatis Caminho do arquivo de configuração, que é colocado em ClassPath, que é equivalente a String Resource = "mybatis-config.xml"; // 2. Leia o arquivo de configuração Mybatis e crie a instância do SQLSessionFactory Factory // ====== 2.1 Use o carregador de classe para carregar o arquivo de configuração Mybatis (ele também carrega o arquivo de mapeamento associado) // inputStream é = mybatistest.class.getClassLoader (). GetResSourEasTream (ResourceSt.Class.Class). Factory // sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (IS); // ====== 2.2 Use a classe Recursos fornecida pela MyBatis para carregar o arquivo de configuração do mybatis (também carrega o arquivo de mapeamento associado) // leitor = Resources.GeRESOURCREADER (Resista); // Construa a fábrica sqlSessionFactory // sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (leitor); // ===== 2.3 Use a classe Recursos fornecidos pelo MyBatis para carregar o arquivo de configuração do mybatis // BUSTRAMENTSTRAMENT. SQLSessionFactoryBuilder (). Build (IS); // 3. Crie uma sqlSessionSession que possa executar o SQL no arquivo de mapeamento = sqlSessionFactory.opensssion ();/*** A sequência de identificação para mapear o SQL:* com.lanhuigu.mybatis.maper.Mermapper é o valor do atributo namespace do tags da mapa no número de tags. Valor da tag Selecionar do arquivo UserMainMapper.xml. Através do valor do atributo de ID da tag Selecionar, * o SQL a ser executado pode ser encontrado através da combinação desses dois. */// Execute a consulta e retorne um objeto de usuário exclusivo. Nota: "com.lanhuigu.mybatis.map.usermainmapper.QueryUserMainById" é a sequência de identificação que mapeia o SQL. Usuário Usuário = session.SelectOne ("com.lanhuigu.mybatis.map.usermainmapper.QueryUserMainById", 1); System.out.println (user.getUserName ());} finalmente {session.close ();}}}}}Saída do console:
Para o exemplo acima, no código de teste:
Usuário do usuário = session.SelectOne ("com.lanhuigu.mybatis.map.usermainmapper.quererMainById", 1); System.out.println (user.getUserName ());Este código é muito desagradável de usar? Dissemos que há uma maneira mais direta:
Adicione uma interface de mapeamento ao mapa da estrutura do projeto:
pacote com.lanhuigu.mybatis.map; import com.lanhuigu.mybatis.entity.user; interface pública UserMainMapper {public user queryusermainbyId (int id);}Ao mesmo tempo, modifique o código de teste da seguinte forma:
pacote com.lanhuigu.mybatis; importar java.io.ioException; importar java.io.inputStream; importar org.apache.ibatis.io.resources; importar org.apache.ibatis.session.sqlSession; importação org.apache.ibatis.sqlso org.apache.ibatis.session.sqlSessionFactoryBuilder; importar org.junit.test; importar com.lanhuigu.mybatis.entity.user; importar.lanhuigu.mybatis.mape.serMaper; {SqlSessionFactory sqlSessionFactory = null; // xml Build sqlSessionFactory Factory Instância de fábrica SQLSession Session = null; // Obtenha o objeto SQLSession Try {//1.mybatis Configuration Path, que é colocado em ClassPath, que é equivalente a String = " Leia o arquivo de configuração Mybatis e crie a instância do SQLSessionFactory Factory // ====== 2.1 Use o carregador de classe para carregar o arquivo de configuração Mybatis (ele também carrega o arquivo de mapeamento associado) // inputStream é = mybatistest.class.getClassLoader (). GetResSourEasTream (ResourceSt.Class.Class). Factory // sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (IS); // ====== 2.2 Use a classe Recursos fornecida pela MyBatis para carregar o arquivo de configuração do mybatis (também carrega o arquivo de mapeamento associado) // leitor = Resources.GeRESOURCREADER (Resista); // Construa a fábrica sqlSessionFactory // sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (leitor); // ===== 2.3 Use a classe Recursos fornecidos pelo MyBatis para carregar o arquivo de configuração do mybatis // BUSTRAMENTSTRAMENT. SQLSessionFactoryBuilder (). Build (IS); // 3. Crie uma sqlSessionSession que possa executar o SQL no arquivo de mapeamento = sqlSessionFactory.opensssion ();/*** A sequência de identificação para mapear o SQL:* com.lanhuigu.mybatis.maper.Mermapper é o valor do atributo namespace do tags da mapa no número de tags. Valor da tag Selecionar do arquivo UserMainMapper.xml. Através do valor do atributo de ID da tag Selecionar, * o SQL a ser executado pode ser encontrado através da combinação desses dois. */// Execute a consulta e retorne um objeto de usuário exclusivo. Nota: "com.lanhuigu.mybatis.map.usermainmapper.QueryUserMainById" é a sequência de identificação que mapeia sql/*user user = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.QuerMainByid", 1); system.out.println (user.getUserName ());*/userMainmapper userMainMapper = session.getMapper (userMainMapper.class); usuário user = useMainmapper.QueryUserMainByid (1); System.out.println (user.getUMEName ()); Modifique a parte da consulta anterior para:
UserMainMapper UserMainMapper = session.GetMapper (UserMainMapper.class); Usuário = UserMainMapper.QueryUserMainById (1);
Use uma interface que possa descrever razoavelmente parâmetros e retornar valores para uma determinada declaração (por exemplo, UserMainMapper.class),
Você não apenas pode executar o código mais claro e seguro de tipo agora, mas não precisa se preocupar com literais e elencos de cordas propensas a erros.
Execute o código de teste e o efeito é o mesmo.
UserMainmapper Interface Localização:
Como adicionamos a interface, o mybatis-config.xml pode alterar a configuração da parte do mapeador e mapear diretamente o arquivo de pacote em que a interface UserMainMapper está localizada:
Isto é
Modificar para
A configuração completa é a seguinte e você pode verificá -la executando o código de teste. Essa prática é mais fácil de manter e gerenciar mapas de maneira unificada:
<!--?xml version="1.0" encoding="UTF-8" ?--><configuration><environments default="development"><environment id="development"><transactionmanager type="JDBC"><datasource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"><property name="url" value = "jdbc: mysql: //192.168.200.12: 3306/test_mybatis"> <propriedade name = "username" value = "root"> <names = "senha" value = "root123"> </propriedade> <///////////dataSource> </transmanger- UserMainmapper.xml Arquivo. UserMainmapper.xml está localizado no pacote com.lanhuigu.mybatis.map, portanto, o recurso é escrito como com/lanhuigu/mybatis/map/usermainmapper.xpper-> <!-<papper Resource = "com/lanhuigu/myBatis> name = "com.lanhuigu.mybatis.map"> </package> </mappers> </figuration>
Como acima, podemos ver que, não importa como tocamos, o SQL ainda é mapeado em userMainmapper.xml?
Esta implementação é única? Eu tenho que usar xml?
Claro que não. Se o seu código acima for modificado e testado com sucesso, vamos fazer a última modificação.
Em vez de usar o userMainMapper.xml para implementar o mapeamento, usamos as anotações Java para implementar o mapeamento.
A principal modificação é a interface UserMainMapper.java, adicionando um novo método QueryUserMainByidNew e usando anotações para implementar o mapeamento
Mybatis auto-resolução de mapeamento de interface.
Interface Modificada UserMainMapper.java:
pacote com.lanhuigu.mybatis.map; importar org.apache.ibatis.annotações.param; importar org.apache.ibatis.annotações.select; import com.lanhuigu.mybatis.entity.user; anotação*/@Select ("Selecione f_id ID, f_username nome de usuário, idade f_age de t_user_main onde f_id = $ {id}") public user queryusermainbyidnew (@param ("id") int id);} O código de teste modificado, execute -o das seguintes maneiras:
pacote com.lanhuigu.mybatis; importar java.io.ioException; importar java.io.inputStream; importar org.apache.ibatis.io.resources; importar org.apache.ibatis.session.sqlSession; importação org.apache.ibatis.sqlso org.apache.ibatis.session.sqlSessionFactoryBuilder; importar org.junit.test; importar com.lanhuigu.mybatis.entity.user; importar.lanhuigu.mybatis.mape.serMaper; {SqlSessionFactory sqlSessionFactory = null; // xml Build sqlSessionFactory Factory Instância de fábrica SQLSession Session = null; // Obtenha o objeto SQLSession Try {//1.mybatis Configuration Path, que é colocado em ClassPath, que é equivalente a String = " Leia o arquivo de configuração Mybatis e crie a instância do SQLSessionFactory Factory // ====== 2.1 Use o carregador de classe para carregar o arquivo de configuração Mybatis (ele também carrega o arquivo de mapeamento associado) // inputStream é = mybatistest.class.getClassLoader (). GetResSourEasTream (ResourceSt.Class.Class). Factory // sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (IS); // ====== 2.2 Use a classe Recursos fornecida pela MyBatis para carregar o arquivo de configuração do mybatis (também carrega o arquivo de mapeamento associado) // leitor = Resources.GeRESOURCREADER (Resista); // Construa a fábrica sqlSessionFactory // sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (leitor); // ===== 2.3 Use a classe Recursos fornecidos pelo MyBatis para carregar o arquivo de configuração do mybatis // BUSTRAMENTSTRAMENT. SQLSessionFactoryBuilder (). Build (IS); // 3. Crie uma sqlSessionSession que possa executar o SQL no arquivo de mapeamento = sqlSessionFactory.opensssion ();/*** A sequência de identificação para mapear o SQL:* com.lanhuigu.mybatis.maper.Mermapper é o valor do atributo namespace do tags da mapa no número de tags. Valor da tag Selecionar do arquivo UserMainMapper.xml. Através do valor do atributo de ID da tag Selecionar, * o SQL a ser executado pode ser encontrado através da combinação desses dois. */// Execute a consulta e retorne um objeto de usuário exclusivo. Nota: "com.lanhuigu.mybatis.map.usermainmapper.QueryUserMainById" é a sequência de identificação que mapeia sql/*user user = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.QuerMainByid", 1); system.out.println (user.getUserName ());*//*userMainMapper userMainMapper = session.getMapper (userMainMapper.class); usuário user = usemainmapper.QueryUserMainById (1); System.out.println (user.GetUSERNAME ()); session.getMapper (userMainMapper.class); usuário do usuário = userMainMapper.QueryUserMainByIdNew (1); System.out.println (user.getUserName ());} finalmente {session.close ();}}}O exposto acima é a coleção completa de Introdução Mybatis (2) apresentada a você pelo editor. 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!