Mybatis é uma excelente estrutura de camada de persistência que suporta consultas SQL simples, procedimentos armazenados e mapeamento avançado. O MYBATIS elimina as configurações manuais de quase todo o código e parâmetros JDBC e o encapsulamento de pesquisa do conjunto de resultados. O Mybatis pode usar XML simples ou anotações para configuração e mapeamento original, interfaces de mapeamento e POJOS de Java (objetos Java antigos simples) para registros no banco de dados.
Mapeamento individual
Na vida, ainda existem exemplos individuais, como estudantes e cartões de identificação, ou em nosso país, o sistema de monogamia é implementado. Depois, temos apenas um cartão de identificação para estudantes e cartões de identificação e, é claro, há apenas um cartão de identificação para cada cartão de identificação.
Script de banco de dados:
- Exclua o banco de dados do banco de dados, se existir MyBaits;- Crie um banco de dados Criar banco de dados Se não existir Mybatis Definir de caracteres UTF8;- Selecione o banco de dados Use MyBatis;- Excluir tabela de dados Tabela de solteira se existe para o aluno; Criar um aluno da tabela (Sid Int (255), SNAME VARCHAR (32), SCID INT (255), Restrição PK_SID Primária Chave (SID), restrição FK_SCID Chave estranha (SID) Referências Cartão (CID));- Adicionar inserção de dados de teste em valores de cartão (CID, NUM) (1, '12345778901234576767, valores de cartão (CID) (1,' 123457789012345677777767777777, scr) (cid); valores (1, 'haha', 1);
Crie uma nova classe One2One.card.java
pacote um2One; importar java.io.Serializable;/*** CARTÃO DE ID*@Author Administrator **/ @supressorwarnings ("serial") cartão público implementa serializável {private Integer cid; {return num;} public void setNum (string num) {this.num = num;}}Crie uma nova classe One2One.student.java
pacote um2one; importar java.io.Serializable;/*** aluno*@author Administrator **/ @supressão ("serial") classe pública o aluno implementa serizable {private integer sid; string private string; cartão privado; snome;} public void SetsName (string sname) {this.sname = sname;} public Card getcard () {return Card;} public void setCard (cartão de cartão) {this.card = card;}}}Crie um novo arquivo Cardmapper.xml no pacote One2One
<? xml versão = "1.0" coding = "utf-8"?> <! type = "One2one.card" id = "cardMap"> <id column = "cid" propriedade = "cid"/> <resultado column = "num" propriedade = "num"/> <sultmap> <//Mapper>
Da mesma forma, crie um novo arquivo studentmapper.xml no pacote One2One
<? xml versão = "1.0" coding = "utf-8"?> <! type = "One2One.student" id = "studentMap"> <id column = "sid" propriedade = "sid"/> <resultado column = "sname" propriedade "sname"/> <!-não escreva campos relacionados-> </resultmap> <select id = "findbyid" parametertype = "integerghemp = s.IrtEnMap "MAP>" S, Card Cwhere s.scid = c.cid e s.sid = #{sid} </leclect> </mapper>Crie um novo arquivo mybatis.cfg.xml no SRC e inclua os arquivos Studentmapper.xml e Cardmapper.xml
<? xml versão = "1.0" coding = "utf-8"?> <! Doctype Configuration public "-// mybatis.org//dtd Config 3.0 // pt" "http://mybatis.org/dtd/mybatis-3-config.dtddtddming"> default = "mysql_developer"> <!-conectar informações do ambiente do mySQL-> <ambiente id = "mysql_developer"> <!-mybatis usa JDBC Transaction Manager-> <transactionManager type = "jdbc"/> <! Interagindo com o banco de dados -> <propriedade name = "driver" value = "com.mysql.jdbc.driver"/> <propriedade name = "url" value = "jdbc: mysql: //127.0.0.1: 3306/mybatis"/name da propriedade = "username") value = "mySqladmin"/> <DataSource> </ambiente> <!-conectar informações do ambiente Oracle-> <ambiente id = "oracle_developer"> <!-mybatis usa JDBC Transaction Manager-> <transactionManager Type = "JDBC"/> <!-MyBatis usa pool de conexão com conexão " Propriedades para interagir com bancos de dados -> <propriedade name = "driver" value = "oracle.jdbc.driver.oracledriver"/> <propriedade name = "url" value = "jdbc: oracle: fin:@127.0.1: 1521: oucl/> <nome da propriedade =" USERNAME "") value = "tiger"/> </DataSource> </ambiente> </ambientes> <!-Carregando o arquivo do mapa-> <Mappers> <Mapper Resource = "One2One/Cardmapper.xml"/> <Mapper Resource = "One2one/studentmapper.xml"/> </Mappers> </configative>
Crie uma nova classe de ferramentas mybatisutil.java aula sob o pacote Util
pacote util; importar java.io.ioException; importar java.io.Reader; importar java.sql.connection; importar org.apache.ibatis.io.resources; importar org.apache.ibatis.session.sqlSession; import org.apache.ibatis.sess.sqlSting org.apache.ibatis.session.sqlSessionFactoryBuilder; Public Class Mybatisutil {private Static Threadlocal <SqlSession> threadlocal = new Threadlocal <SqlSession> () (private mybatIl); src /mybatis.cfg.xmlstatic {try {Reader Reader = Resources.getResourCeasReader ("mybatis.cfg.xml"); sqlsessionFactory = new SQLSessionFactoryBuilder (). SqlSession* @return*/public static sqlSession getSqlSession () {// Obtenha objeto SQLSession do atual ThreadSqlSession sqlSession = threadlocal.get (); if (sqlSession == null) {if (sqlSessionFator! está ligado ao atual ThreadThreadLocal.set (sqlSession);}} retorna sqlSession;}/*** Feche o sqlSession e separado do fio atual*/public static void fecheSqlSession () {// obtenha objeto sqlSession do encadeamento atual sqlSession sqlsess = {// obtenha sqlsession sqlSession/sqlsess = sqlSession/// objeto sqlSession; if(sqlSession != null){//Close SqlSession object sqlSession.close();//Separate the relationship between the current thread and SqlSession threadLocal.remove();}}//Test public static void main(String[] args) {SqlSession sqlSession = MyBatisUtil.getSqlSession();Connection conn= sqlSession.getConnection (); System.out.println (Conn! = Null? "Conexão bem -sucedida": "Falha na conexão");}}Crie uma nova classe de persistência da camada stuentcarddao.java aula
Pacote um2One; importar org.apache.ibatis.session.sqlSession; importar org.junit.test; importar util.mybatisutil;/*** camada de persistência*@author administrador **/public class @Return @Return @Return @Return @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT** Exceção {sqlSession sqlSession = null; try {sqlSession = mybatisutil.getSqlSession (); return sqlSession.Selectone ("StudentNamespace.findbyid", id);} catch (exceção e) {e.printstacktrace (); Finalmente {mybatisutil.clossesqlSession ();}} // Teste Informações de informações e cartão de identificação do aluno de teste nº 1 @testpublic void testFindbyId () lança exceção {StudentCarddao dao = novo StudentCarddao (); aluno do aluno = Dao.findbyId (1); System.out.println (Student.getsid ()+":"+Student.getSname ()}}Neste momento, só podemos consultar o nome do aluno nº 1, mas não podemos consultar seu número de identidade, porque o valor do atributo de cartão neste momento é nulo, o que pode ser visto no Studentmapper.xml
<select id = "findById" parameterType = "integer" resultmap = "studentmap">
Quando o Mybatis analisa essa frase, ela só pode encapsular os dados da consulta em Sid e Sname, então o que devo fazer?
Em Studentmapper.xml
<ResultMap type = "One2one.card" id = "CardMap"> <id column = "cid" propriedade = "cid"/> <resultado column = "num" Property = "num"/> <resultado column = "num"/> </resultMap>
Aumentar
<!-Introduzir informações de mapeamento na propriedade do arquivo cardmapper.xml representa as propriedades associadas do aluno-> <Association Property = "Card" ResultMap = "CardNamespace.Cardmap"/>
Em seguida, o conteúdo completo do Studentmapper.xml neste momento é o seguinte:
<? xml versão = "1.0" coding = "utf-8"?> <! type = "One2One.student" id = "studentmap"> <id column = "sid" propriedade = "sid"/> <resultado colun = "sname" propriedade "sname"/> <!-Introduzir informações de mapeamento em cardmappper.xml Propriedade Representa as propriedades associadas do aluno-> <Association) id = "findById" parameterType = "integer" resultmap = "studentMap"> select s.sid, s.sname, c.cid, c.num do aluno s, cartão chere s.scid = c.cid e s.sid = #{sid} </leclect> <//Mapper>Agora você pode testar o número de identificação do seu aluno
Alterar o método de teste da classe de persistência da camada stuentcarddao.java
// Testpublic void testFindById () lança exceção {StudentCarddao Dao = new StudentCarddao (); Student Student = dao.findbyid (1); System.out.println (Student.getSid ()+":" Student.getsname ()+":"+student.getcard ().De forma similar
Adicione um método para consultar informações do aluno "haha" e informações do cartão de identificação na aula do Studentdao.java
/*** Consulta as informações das informações e do cartão de identificação dos alunos "haha"* @param nome* @return* @throws exceção*/public student findbyname (nome da string) lança exceção {sqlSession sqlSession = null; try {sqlSession = mybatisutil.getSqlSession (); (Exceção e) {E.PrintStackTrace (); arremesso e;} finalmente {mybatisutil.closhesqlsession ();}}E adicione métodos de teste
// TestPublic void testFindByName () lança exceção {StudentCarddao Dao = new StudentCarddao (); Student Student = dao.findbyName ("haha"); system.out.println (student.getsid ()+":" student.getname ()+":" "+student.getsid ()+": "student.getname ()+" ""+student.getsid ()+":" Student.getname ()+"" "+student.Obviamente, se você o testar agora, você morrerá miseravelmente porque não configurou <select> no arquivo studentmapper.xml, então adicione informações de configuração <select> ao arquivo studentmapper.xml.
<select id = "findByName" parameterType = "string" resultmap = "studentMap"> select s.sid, s.sname, c.cid, c.num do aluno s, cartão cwhere s.scid = c.cid e s.sname = #{sname} </leclect>Dessa forma, o teste será bem -sucedido. A missão é feita.
O código completo é o seguinte:
Scripts de banco de dados MySQL
- Exclua o banco de dados do banco de dados, se existir MyBaits;- Crie um banco de dados Criar banco de dados Se não existir Mybatis Definir de caracteres UTF8;- Selecione o banco de dados Use MyBatis;- Excluir tabela de dados Tabela de solteira se existe para o aluno; Criar um aluno da tabela (Sid Int (255), SNAME VARCHAR (32), SCID INT (255), Restrição PK_SID Primária Chave (SID), restrição FK_SCID Chave estranha (SID) Referências Cartão (CID));- Adicionar inserção de dados de teste em valores de cartão (CID, NUM) (1, '12345778901234576767, valores de cartão (CID) (1,' 123457789012345677777767777777, scr) (cid); valores (1, 'haha', 1);
Classe de ferramentas mybatis.java aula
pacote util; importar java.io.ioException; importar java.io.Reader; importar java.sql.connection; importar org.apache.ibatis.io.resources; importar org.apache.ibatis.session.sqlSession; import org.apache.ibatis.sess.sqlSting org.apache.ibatis.session.sqlSessionFactoryBuilder; Public Class Mybatisutil {private Static Threadlocal <SqlSession> threadlocal = new Threadlocal <SqlSession> () (private mybatIl); src /mybatis.cfg.xmlstatic {try {Reader Reader = Resources.getResourCeasReader ("mybatis.cfg.xml"); sqlsessionFactory = new SQLSessionFactoryBuilder (). SqlSession* @return*/public static sqlSession getSqlSession () {// Obtenha objeto SQLSession do atual ThreadSqlSession sqlSession = threadlocal.get (); if (sqlSession == null) {if (sqlSessionFator! está ligado ao atual ThreadThreadLocal.set (sqlSession);}} retorna sqlSession;}/*** Feche o sqlSession e separado do fio atual*/public static void fecheSqlSession () {// obtenha objeto sqlSession do encadeamento atual sqlSession sqlsess = {// obtenha sqlsession sqlSession/sqlsess = sqlSession/// objeto sqlSession; if(sqlSession != null){//Close SqlSession object sqlSession.close();//Separate the relationship between the current thread and SqlSession threadLocal.remove();}}//Test public static void main(String[] args) {SqlSession sqlSession = MyBatisUtil.getSqlSession();Connection conn= sqlSession.getConnection (); System.out.println (Conn! = Null? "Conexão bem -sucedida": "Falha na conexão");}}arquivo mybatis.cfg.xml
<? xml versão = "1.0" coding = "utf-8"?> <! Doctype Configuration public "-// mybatis.org//dtd Config 3.0 // pt" "http://mybatis.org/dtd/mybatis-3-config.dtddtddming"> default = "mysql_developer"> <!-conectar informações do ambiente do mySQL-> <ambiente id = "mysql_developer"> <!-mybatis usa JDBC Transaction Manager-> <transactionManager type = "jdbc"/> <! Interagindo com o banco de dados -> <propriedade name = "driver" value = "com.mysql.jdbc.driver"/> <propriedade name = "url" value = "jdbc: mysql: //127.0.0.1: 3306/mybatis"/name da propriedade = "username") value = "mySqladmin"/> <DataSource> </ambiente> <!-conectar informações do ambiente Oracle-> <ambiente id = "oracle_developer"> <!-mybatis usa JDBC Transaction Manager-> <transactionManager Type = "JDBC"/> <!-MyBatis usa pool de conexão com conexão " Propriedades para interagir com bancos de dados -> <propriedade name = "driver" value = "oracle.jdbc.driver.oracledriver"/> <propriedade name = "url" value = "jdbc: oracle: fin:@127.0.1: 1521: oucl/> <nome da propriedade =" USERNAME "") value = "tiger"/> </DataSource> </ambiente> </ambientes> <!-Carregando o arquivo do mapa-> <Mappers> <Mapper Resource = "One2One/Cardmapper.xml"/> <Mapper Resource = "One2one/studentmapper.xml"/> </Mappers> </configative>
Card.java e Student.java
pacote um2One; importar java.io.Serializable;/*** CARTÃO DE ID*@Author Administrator **/ @supressorwarnings ("serial") cartão público implementa serializável {private Integer cid; {return num;} public void setNum (string num) {this.num = num;}} pacote um2one; importar java.io.Serializable;/*** estudante*@author administrador **/ @suprimedwarnings ("serial") public class Student; setsid (inteiro sid) {this.sid = sid;} public string getsName () {return snide;} public void setsName (string sname) {this.sname = sname;} public Card getcard () {return Card;} public void SetCard (cartão do cartão) {this.card =;Card.java Mapping File Cardmapper.xml Arquivo
<? xml versão = "1.0" coding = "utf-8"?> <! type = "One2one.card" id = "cardMap"> <id column = "cid" propriedade = "cid"/> <resultado column = "num" propriedade = "num"/> <sultmap> <//Mapper>
O arquivo de mapeamento correspondente ao arquivo Student.java Class Studentmapper.xml
<? xml versão = "1.0" coding = "utf-8"?> <! type = "One2One.student" id = "studentmap"> <id column = "sid" propriedade = "sid"/> <resultado colun = "sname" propriedade "sname"/> <!-Introduzir informações de mapeamento em cardmappper.xml Propriedade Representa as propriedades associadas do aluno-> <Association) id = "findById" parameterType = "integer" resultmap = "studentMap"> selecione s.sid, s.sname, c.cid, c.num do aluno s, cartão chere s.sid = c.cid e s.sid = #{sid} </leclect> <select Id = findbyname "parameterType =" S.SID, S.Sname, C.Cid, C.Num From Student S, Card Chere S.Scid = C.Cid e S.Sname = #{SNAME} </select> </papper>Classe de persistência Classe StudentCarddao.java Classe
Pacote um2One; importar org.apache.ibatis.session.sqlSession; importar org.junit.test; importar util.mybatisutil;/*** camada de persistência*@author administrador **/public class @Return @Return @Return @Return @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT* @RELLURT** Exceção {sqlSession sqlSession = null; try {sqlSession = mybatisutil.getSqlSession (); return sqlSession.Selectone ("StudentNamespace.findbyid", id);} catch (exceção e) {e.printstacktrace (); Finalmente {mybatisutil.clossesqlSession ();}}/*** consulta "haha" informações sobre o aluno e informações do cartão de identificação* @param nome* @return* @throws exceção*/public student findbyName (nome da string) lança excepção {sqlSession sqlsession = null; tentativa {sqlsess = myBatisil {sqlSession sqlSession.SelectOne ("StudentNamespace.findbyname", nome);} catch (Exceção e) {e.printStackTrace (); throw e;} finalmente {mybatisutil.closhesqlSession ();} // Teste o aluno do aluno nº 1 da informação e do cartão de identificação @tholeTestpublic VOIr. StudentCarddao (); Student = Dao.findbyId (1); System.out.println (Student.getSid ()+":"+student.getsname ()+":"+student.getcard (). GetNum ());} // teste "Haha" Informações do aluno e informação de identificação @testestpublic le = new StudentCarddao (); Student = Dao.findbyName ("haha"); System.out.println (Student.getsid ()+":"+student.getsname ()+":"+Student.getCard (). getNum ());}}}}}}}}O exposto acima é o primeiro tutorial sobre o mapeamento individual de Mybatis introduzido 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!