Mybatis - отличная структура слоя настойчивости, которая поддерживает простые запросы SQL, сохраненные процедуры и расширенное картирование. Mybatis устраняет ручные настройки почти всех кодов JDBC и параметров и поисковой инкапсуляции набора результатов. Mybatis может использовать простые XML или аннотации для конфигурации и оригинального отображения, отображения интерфейсов и Pojos Java (простые старые объекты Java) в записи в базе данных.
Одиночное картирование
В жизни все еще есть примеры один на один, такие как студенты и удостоверения личности, или в нашей стране, моногамия внедрена. Тогда у нас есть только одна идентификационная карта для студентов и удостоверения личности, и, конечно, есть только одна идентификационная карта для каждой идентификационной карты.
Скрипт базы данных:
- Удалить базу данных Drop Dashabase, если существует mybaits;- Создать базу данных Создать базу данных, если не существует набор символов Mybatis по умолчанию UTF8;- Выбрать базу данных Использовать mybatis;- Удалить таблицу Data Table. Создать таблицу Студента (SID INT (255), Sname Varchar (32), SCID Int (255), ограничение PK_SID Первичный ключ (SID), ограничение FK_SCID Foreign Key (SID) Карта ссылок (CID));- Добавить вставку данных в карту (CID, NUM) значения (1, '1234567890123456788'); значения (1, «ха -ха», 1);
Создать новый класс one2one.card.java
Пакет One2one; импорт java.io.serializable;/*** ID -карта*@author Administrator **/ @PuppressWarnings ("Serial") Карта открытого класса реализует сериализуемый {private Integer CID; Private String Num; {return num;} public void setnum (string num) {this.num = num;}}Создайте новый класс one2one.student.java
Пакет One2one; Import Java.io.serializable;/*** Студент*@author Administrator **/ @Puppresswarnings ("serial") Общественный класс. Студенты реализуют сериализуемые {private integer sid; private String Sname; Private Card Card; public integer getSid () {return sid;} public void setSId (integer sid) {this.sid = sid; sname;} public void setSname (String sname) {this.sname = sname;} public card getCard () {return card;} public void setCard (карта карты) {this.card = card;}}Создайте новый файл cardmapper.xml в пакете One2one
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "cardnamespace"> "raselemapace" cardnamespace "> type = "one2one.card" id = "cardmap"> <id column = "cid" property = "cid"/> <result column = "num" property = "num"/> <resultMap> </mapper>
Точно так же создайте новый файл StudentMapper.xml в пакете One2one
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "outdentnamespace" type="one2one.Student" id="studentMap"><id column="sid" property="sid"/><result column="sname" property="sname"/><!-- Don't write related fields --></resultMap><select id="findById" parameterType="integer" resultMap="studentMap">select s.sid,s.sname,c.cid,c.num from student s,card cwhere s.scid = c.cid и s.sid = #{sid} </select> </mapper>Создайте новый файл mybatis.cfg.xml в SRC и включите файлы StudentMapper.xml и cardmapper.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Конфигурация doctype public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <ponfiguration> <! default = "mysql_developer"> <!-Подключить информацию о среде MySQL-> <среда ID = "mysql_developer"> <!-Mybatis использует менеджер транзакций JDBC-> <TransactionManager Type = "jdbc"/> <!-Mybatis использует объединение для получения объектов соединения-> <DataSurce Type = "! Взаимодействие с базой данных -> <property name = "driver" value = "com.mysql.jdbc.driver"/> <name = "url" value = "jdbc: mysql: //127.0.0.1: 3306/mybatis"/> <property name = "unerame" value = "root"/> name "свойства =" ПАЛЕРС ". value = "mysqladmin"/> <dataSource> </ervenery> <!-Подключить информацию о среде Oracle-> <Environment id = "Oracle_developer"> <!-Mybatis использует JDBC Transaction Manager-> <TransactionManager = "jdbc"/> <!-Mybatis использует объединение, чтобы получить объект подключения-> <dataSource type = "! Свойства для взаимодействия с базами данных -> <property name = "Driver" value = "oracle.jdbc.driver.oracledriver"/> <name = "url" value = "jdbc: oracle: thin:@127.0.0.1: 1521: orcl"/> <name = "unserame" value = "scott"/> <name = "passward =" passward = "Password =" Passward = "Passward =" Passward = "PASSER" ". value = "tiger"/> </dataSource> </envenerition> </erviness> <!-Загрузка файла карты-> <Mappers> <mapper resource = "one2one/cardmapper.xml"/> <mapper resource = "One2one/Student.xml"/> </> </configuration>
Создайте новый класс инструментов mybatisutil.java class в пакете UTIL
пакет util; import java.io.ioexception; import java.io.reader; import java.sql.connection; import org.apache.ibatis.io.resources; импорт org.apache.ibatis.session.sqlsession; импорт org.apache.ibatis.session.sessionFactory; org.apache.ibatis.session.sqlsessionFactoryBuilder; открытый класс mybatisutil {private Static Threadlocal <SqlSession> Threadlocal = new Threadlocal <sqlSession> (); public static sqlSessionFactory sqlSessionFact src /mybatis.cfg.xmlstatic {try {Reader Reader = resources.getresourceasreader ("mybatis.cfg.xml"); sqlsessionFactory = new sqlSessionFactoryBuilder (). SqlSession* @return*/public static sqlSession getSqlSession () {// получить объект sqlSession из текущего ThreadSQlSession sqlSession = Threadlocal.get (); if (sqlSession == null) {ifssessionFact! связан с текущим ThreadThreadlocal.set (sqlSession);}} return sqlSession;}/*** закрыть sqlSession и отдельно от текущего потока*/public static void sceepSqlSession () {// Получить объект sqlSession от текущего потока sqlSession sqlSession = Threadlocal.get (); if (sqlSession! = null) {// Закрыть объект sqlSession sqlSession.Close (); // отделить взаимосвязь между текущим потоком и sqlSession threadlocal.remove ();}} // Проверка общедоступной void main (string [] args) {sqlsession sqlsession = myBatisutil sqlsession.getConnection (); System.out.println (conn! = NULL?Создайте новый класс настойчивости Stuentcarddao.java Class.
Пакет One2one; импорт org.apache.ibatis.session.sqlsession; import org.junit.test; import util.mybatisutil;/*** Стабильный слой*@author Administrator **/Public Class StudentCarddao {/*** Query Student № 1 Информация об ID*@param Id* @ @@TrOWS*/ Exception {sqlSession sqlSession = null; try {sqlSession = mybatisutil.getSqlSession (); return sqlsession.selectone ("studentnamespace.findbyid", id);} catch (Exception e) {e.printStacktrace (); Throw E;} Наконец {mybatisutil.closeSqlSession ();}} // Информация студента № 1 и идентификационных карт № 1 @TestPublic void testFindById () Thress Exception {StudentCarddao dao = new StudentCarddao (); студент -студент = dao.findbyid (1); system.out.println (student.getsid ()+":"+study.getsname ()}}В настоящее время мы можем только запросить название студента № 1, но мы не можем запросить его номер идентификации, потому что значение атрибута карты в настоящее время является нулевым, что можно увидеть из StudentMapper.xml
<SELECT ID = "findByID" parameterType = "Integer" resultMap = "StudentMap">
Когда Mybatis анализирует это предложение, оно может только инкапсулировать данные запроса в Sid и Sname, так что мне делать?
В StudentMapper.xml
<resultmap type = "one2one.card" id = "cardmap"> <id column = "cid" property = "cid"/> <result column = "num" Property = "num"/> <result column = "num"/> </resultMap>
Увеличивать
<!-Представьте информацию о картировании в свойстве файла cardmapper.xml представляет собой связанные свойства студента-> <association property = "card" resultmap = "cardnamespace.cardmap"/>
Затем полное содержание StudentMapper.xml в настоящее время выглядит следующим образом:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "outdentnamespace" type = "One2one.Student" id = "StudentMap"> <id column = "sid" property = "sid"/> <result column = "sname" property = "sname"/> <!-Внедрить информацию о картировании в файловом свойстве cardmapper.xml. id = "findById" parameterType = "integer" resultMap = "StudentMap"> Select S.Sid, S.Sname, C.Cid, C.Num от Student S, Card Cwher S.Scid = C.CID и S.SID = #{SID} </select> </mapper>Теперь вы можете проверить свой идентификационный номер студента
Изменить метод испытаний класса StuentCarddao.java класса StuentCarddao.java.
// testpublic void testfindbyid () throws exception {StudentCarddao dao = new StudentCarddao (); студент студента = dao.findbyid (1); system.out.println (student.getsid ()+":"+student.getsname ()+":"+getcard (). Getnum ();Сходным образом
Добавить метод для запроса информации о студентах и идентификационных значениях «Хаха» и идентификационных карт в классе StudentDao.java
/*** Запросить информацию и информацию об идентификационной карте «Хаха» студентов* @param name* @return* @Throws Exception*/Public FindByName (String name) Throws Exception {sqlSession sqlSession = null; try {sqlSession = mybatisutil.getsqlsession (); return sqlsession.sesession.selection ("uldentnamespace. (Исключение e) {e.printstackTrace (); бросить e;} наконец {mybatisutil.closeSqlSession ();}}И добавить методы испытаний
// testpublic void testfindbyname () Throws Exception {StudentCarddao dao = new StudentCarddao (); студент студента = dao.findbyname ("хаха"); System.out.println (Student.getsid ()+":"+student.getsname ()+":"+student.getcard ().Конечно, если вы тестируете его сейчас, вы умрете с треском, потому что вы не настраивали <SELECT> в файле StudentMapper.xml, поэтому добавьте информацию <SELECT> Конфигурацию в файл StudentMapper.xml.
<SELECT ID = "findByName" parameterType = "string" resultMap = "StudentMap"> Select S.Sid, S.Sname, C.Cid, C.Num от Student S, Card Cwhere S.Scid = C.CID и S.Sname = #{Sname} </select>Таким образом, тест будет успешным. Миссия выполнена.
Полный код заключается в следующем:
MySQL сценарии базы данных
- Удалить базу данных Drop Dashabase, если существует mybaits;- Создать базу данных Создать базу данных, если не существует набор символов Mybatis по умолчанию UTF8;- Выбрать базу данных Использовать mybatis;- Удалить таблицу Data Table. Создать таблицу Студента (SID INT (255), Sname Varchar (32), SCID Int (255), ограничение PK_SID Первичный ключ (SID), ограничение FK_SCID Foreign Key (SID) Карта ссылок (CID));- Добавить вставку данных в карту (CID, NUM) значения (1, '1234567890123456788'); значения (1, «ха -ха», 1);
Класс инструментов mybatis.java class
пакет util; import java.io.ioexception; import java.io.reader; import java.sql.connection; import org.apache.ibatis.io.resources; импорт org.apache.ibatis.session.sqlsession; импорт org.apache.ibatis.session.sessionFactory; org.apache.ibatis.session.sqlsessionFactoryBuilder; открытый класс mybatisutil {private static threadlocal <sqlSession> Threadlocal = new Threadlocal <sqlSession> (); public static sqlSessionFactory sqlSessionFact; src /mybatis.cfg.xmlstatic {try {Reader Reader = resources.getresourceasreader ("mybatis.cfg.xml"); sqlsessionFactory = new sqlSessionFactoryBuilder (). SqlSession* @return*/public static sqlSession getSqlSession () {// получить объект sqlSession из текущего ThreadSQlSession sqlSession = Threadlocal.get (); if (sqlSession == null) {ifssessionFact! связан с текущим ThreadThreadlocal.set (sqlSession);}} return sqlSession;}/*** закрыть sqlSession и отдельно от текущего потока*/public static void sceepSqlSession () {// Получить объект sqlSession от текущего потока sqlSession sqlSession = Threadlocal.get (); if (sqlSession! = null) {// Закрыть объект sqlSession sqlSession.Close (); // отделить взаимосвязь между текущим потоком и sqlSession threadlocal.remove ();}} // Проверка общедоступной void main (string [] args) {sqlsession sqlsession = myBatisutil sqlsession.getConnection (); System.out.println (conn! = NULL?mybatis.cfg.xml файл
<? xml version = "1.0" Encoding = "UTF-8"?> <! Конфигурация doctype public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <ponfiguration> <! default = "mysql_developer"> <!-Подключить информацию о среде MySQL-> <среда ID = "mysql_developer"> <!-Mybatis использует менеджер транзакций JDBC-> <TransactionManager Type = "jdbc"/> <!-Mybatis использует объединение для получения объектов соединения-> <DataSurce Type = "! Взаимодействие с базой данных -> <property name = "driver" value = "com.mysql.jdbc.driver"/> <name = "url" value = "jdbc: mysql: //127.0.0.1: 3306/mybatis"/> <property name = "unerame" value = "root"/> name "свойства =" ПАЛЕРС ". value = "mysqladmin"/> <dataSource> </ervenery> <!-Подключить информацию о среде Oracle-> <Environment id = "Oracle_developer"> <!-Mybatis использует JDBC Transaction Manager-> <TransactionManager = "jdbc"/> <!-Mybatis использует объединение, чтобы получить объект подключения-> <dataSource type = "! Свойства для взаимодействия с базами данных -> <property name = "Driver" value = "oracle.jdbc.driver.oracledriver"/> <name = "url" value = "jdbc: oracle: thin:@127.0.0.1: 1521: orcl"/> <name = "unserame" value = "scott"/> <name = "passward =" passward = "Password =" Passward = "Passward =" Passward = "PASSER" ". value = "tiger"/> </dataSource> </envenerition> </erviness> <!-Загрузка файла карты-> <Mappers> <mapper resource = "one2one/cardmapper.xml"/> <mapper resource = "One2one/Student.xml"/> </> </configuration>
Card.java и Student.java
Пакет One2one; импорт java.io.serializable;/*** ID -карта*@author Administrator **/ @PuppressWarnings ("Serial") Карта открытого класса реализует сериализуемый {private Integer CID; Private String Num; {return num;} public void setnum (string num) {this.num = num;}} упаковка One2one; импорт java.io.serializable;/*** Студент*@author Administrator **/ @Puppresswarnings ("Serial") Public Class Serializable {private integer sid; private sname; setSid (integer sid) {this.sid = sid;} public String getSname () {return sname;} public void setSname (String sname) {this.sname = sname;} public card getCard () {return card;} public void setCard (карта карты) {this.card = card;}}Карта.
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "cardnamespace"> "raselemapace" cardnamespace "> type = "one2one.card" id = "cardmap"> <id column = "cid" property = "cid"/> <result column = "num" property = "num"/> <resultMap> </mapper>
Файл отображения, соответствующий файлу Student.java Class StudentMapper.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "outdentnamespace" type = "One2one.Student" id = "StudentMap"> <id column = "sid" property = "sid"/> <result column = "sname" property = "sname"/> <!-Внедрить информацию о картировании в файловом свойстве cardmapper.xml. id = "findbyId" parameterType = "integer" resultmap = "studentmap"> select s.sid, s.sname, c.cid, c.num from student s, card cwhere s.sid = c.cid и s.sid = #{sid} </select> select id = "findbyname" parametertype = "structmap =" select " S.SID, S.Sname, C.CID, C.NUM от Student S, Card Cwhere S.Scid = C.CID и S.Sname = #{Sname} </select> </mapper>Учистка настойчивости ClassCarddao.java Class
Пакет One2one; импорт org.apache.ibatis.session.sqlsession; import org.junit.test; import util.mybatisutil;/*** Стабильный слой*@author Administrator **/Public Class StudentCarddao {/*** Query Student № 1 Информация об ID*@param Id* @ @@TrOWS*/ Exception {sqlSession sqlSession = null; try {sqlSession = mybatisutil.getSqlSession (); return sqlsession.selectone ("studentnamespace.findbyid", id);} catch (Exception e) {e.printStacktrace (); Throw E;} Наконец {mybatisutil.closeqlsession ();}}/*** Query "Haha" Информация о студенте и идентификационную карту* @param name* @return* @throhs exception*/public findbyname (name) throws exection {sqlsession sqlsession = null; try {sqlsession = mybatisil.getsessessessessed ();) sqlSession.selectone ("studentnamespace.findbyname", name);} catch (Exception e) {e.printStackTrace (); throw e;} наконец {mybatisutil.closeSqlSession ();}} // Test Query № 1 Информация № 1. StudentCarddao ();; студент студента = dao.findbyid (1); system.out.println (student.getsid ()+":"+student.getsname ()+":"+student.getcard (). Getnum ());} // test Query "Haha" informa = new StudentCarddao (); Student Student = dao.findbyName ("HAHA"); System.out.println (Student.getSid ()+":"+student.getSname ()+":"+student.getCard (). getNum ());}}Вышесказанное является первым учебником по картированию Mybatis One-To-One, представленной редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!