При обучении Wlebernate редактор подвергался воздействию различных отображений. Как работает картирование в Mybatis? В этом сообщении сегодня редактор в основном кратко представит продвинутое картирование в Mybatis, в том числе один к одному, один к многим и многим. Я надеюсь, что все больше и больше нуждающихся друзей будет полезным. Редактор в основном вводит модель данных о продукте заказа, один к одному запросу, запрос «один к многим» и «Многие ко многим.
1. Заказать модель данных о продукте
1. Сценарий выполнения базы данных выглядит следующим образом:
<span style = "font-family: comic sans ms; font-size: 18px;"> Создание элементов таблицы (id int int aul auto_increment, itemsname varchar (32) не нулевой комментарий «Название продукта», цена поплавка (10,1), а не NUL Comment 'Product Price', подробный текст Комментарий «Описание продукта», PIC VAR (64) Комментарий. Первичный ключ (ID)) по умолчанию charset = utf8; / *Структура таблицы для таблицы `orderdetail` */ create table orderdetail (id int int null auto_increment, orders_id int int null comment 'order’, items_id int not null comment' идентификатор продукта ', items_num int int default Null Comment' orders_id 'orders' orders 'orders' orders 'orders' orders 'orders' orders_id`ида `Fk_orderdetail_2` (` items_id`), ограничение `fk_orderdetail_1` Foreign Key (` orders_id`) Ссылки `orders` (` id`) о Delete No Dection при обновлении NO, ограничение `fk_orderdetail_2 'Иностранное ключ (` `` wepers `note aemble no Defeme no Defeme no Defeme nome atelete` nome atelete `nome atelete` nome atelete `nome eleale). Charset = utf8; / *Структура таблицы для таблицы `orders` */ create table orders (id int int null auto_increment, user_id int not null comment 'order’ word', number varchar (30) не нулевой комментарий «номер заказа», CreateTime dateTime не нулевой комментарий «Создать время заказа». Ограничение `fk_orders_id` Foreign Key (` user_id`) Ссылки `t_user` (` id`) при удалении без действий при обновлении без действия) по умолчанию charset = utf8; / *Структура таблицы для таблицы `t_user` */ create table t_user (id int not null auto_increment, username varchar (32) не нулевой комментарий« Имя пользователя », Дата дня рождения по умолчанию NULL Comment ', Sex char (1) по умолчанию NULL Comment' Gender’ varchar (256) Neful Null Comment 'Адрес, основной ключ (`` id') varchare) jef -alceme un haref hAk8; </span>
Тестовый код данных
<span style = "font-family: comic sans ms; font-size: 18px;">/ *Данные для таблицы `itement ' */ infly в элементы (пункты, цена, деталь, рис, creatememe) («Notebook», 6000.0, «Notebook», Хорошая производительность, хорошее качество! », Null,« 2015-07-08 13:22:57 »), (« рюкзак », 200,0,« рюкзак под брендом класса, высокая емкость и хорошее качество! », Null, '2015-07-010 13:25:02); / *Данные для таблицы `orderdetail` */ insert в` orderdetail` (`orders_id`,` items_id`, `items_num`) значения (1,1,1), (1,2,3), (2,3,4), (3,2,3); / *Данные для таблицы `Заряды (2, '1000012', '2015-07-17 14: 13: 23', NULL), (3, '1000012', '2015-07-16 18: 13: 23', NULL), (4, '1000012', '2015-07-15 19: 13: 23', NULL), (5, '1000012', '2015-07-14: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23: 23 (6, '1000012', '2015-07-13 16: 13: 23', null); / *Данные для таблицы `user` */ insert в` t_user` (`username`,` birthing`, `sex ',` address') values ('wang wu', null, '2', null), ('zhang san', '2014-07-10', '1', 'beijing'), 'zhang' 2014-07-10 Xiaming ', Null,' 1 ',' Zhengzhou, Henan '), (' Chen xiaoming ', null,' 1 ',' Zhengzhou, henan '), ("Чжан Санфенг", Нулл,' 1 ',' Zhengzhou, Henan '), (Zhang Sanfeng', nul Xiaming ', Null,' 1 ',' Zhengzhou, Henan '), (' wang wu ', null, null, nul C ',' 2015-06-27 ',' 1 ',' feijing '), (' xiao d ',' 2015-06-27 ',' 2 ',' feijing '); </span>2. Идеи анализа модели данных
(1). Содержание данных, записанное в каждой таблице: ознакомьтесь с контентом, записанным в каждой таблице в модулях, что эквивалентно процессу требований к системе обучения (функции);
(2). Важные настройки поля для каждой таблицы: непустые поля, поля иностранных ключей;
(3). Отношения между таблицами уровня базы данных и таблицами: отношения иностранного ключа;
(4). Бизнес -взаимосвязь между таблицами: при анализе деловых отношений между таблицами она должна основываться на определенной значимости бизнеса для анализа.
3. Анализ идей базы данных для моделей продуктов заказа, как показано на рисунке ниже:
2. один к одному запросу
2.1. Требования: Информация о заказе запроса и информация о ассоциированном пользователе
2.2. Результат реализация
2.2.1 Заявление SQL
Определите основную таблицу запроса: таблица заказа, определите таблицу Ассоциации запроса, таблица пользователя, код заключается в следующем:
<span style = "font-family: comic sans ms; font-size: 18px;"> select t1.*, t2.username, t2.sex, t2.adress из орденов T1, T_USER T2, где t1.user_id = t2.id </span>
2.2.2 Создайте сущность субъекта
Пользователь пользователя user.java, код выглядит следующим образом:
<span style = "font-family: comic sans ms; font-size: 18px;"> package com.mybatis.entity; импортировать java.util.date; импортировать java.util.list; / ** * @classname: user * @description: todo (пользовательский объект) * @author ahvari */ public class user {private integer id; // Имя частного имени пользователя; // гендерный частный строковый секс; // адрес частного строкового адреса; // день рождения // Пользовательский заказы // Getter и Setter ......} </span>Заказ Организации. Java
<span style = "font-family: comic sans ms; font-size: 18px;"> package com.mybatis.entity; импортировать java.util.date; импортировать java.util.list; / *** @classname: Заказы* @description: todo (Order Entity)* @author ahvari*/ public class orders {/ ** Идентификатор заказа первичного ключа*/ private integer id; / ** Заказать идентификатор пользователя*/ private Integer userId; / ** Номер заказа*/ частный строковый номер; / ** Время заказа*/ частная дата Create -Time; / ** ПРИМЕЧАНИЕ*/ Private String Note; // Информация пользователя частного пользователя; // Заказать сведения о частном списке <OrderDetail> OrderDetails; // Getter и Setter ......} </span>Продукт сущности: items.java
<span style = "font-family: comic sans ms; font-size: 18px;"> package com.mybatis.entity; импортировать java.util.date; / *** @classname: элементы* @description: todo (класс продукта)* @author ding guohua*/ public class elects {/ ** Таблица продукта Первичный идентификатор ключа*/ private integer id; / ** Название продукта*/ private String Itemsname; / ** Цена продукта*/ частная цена плавания; / ** Описание продукта*/ Подробная деталь строки; / ** изображение продукта*/ Private String Picture; / ** Дата производства*/ частная дата Create -Time; // Getter и Setter ......} </span>Заказ DETINE ENTITY ORDERDETAIL.JAVA
<span style = "font-family: comic sans ms; font-size: 18px;"> package com.mybatis.entity; / *** @classname: orderdetail* @description: todo (ordation intity)* @author ding guohua*/ public class orderdetail {/ ** main, идентификатор списка данных*/ private integer id; / ** id*/ private integer ordersId; / ** Идентификатор продукта*/ private Integer itemsId; / ** Количество покупки продукта*/ private Integer Itemsnum; // Информация о продукте, соответствующая деталям частных элементов; // Getter и Setter ......} </span>Создайте класс обертки, чтобы составить карту всей информации запроса на этот класс orderscustom.java
<span style = "font-family: comic sans ms; font-size: 18px;">/ ** * @classname: orderscustom * @description: todo (расширенный класс заказов, который отображает заказы и пользовательские результаты через этот класс, чтобы позволить этому классу унаследовать больше объектов) * @author: ding guohu Атрибуты частного имени пользователя строки; частный строковый секс; частный строковый адрес; // Getter и Setter ......} </span>
2.2.3 Создание ordersccustommapper.java, код заключается в следующем:
<span style = "font-family: comic sans ms; размер шрифта: 18px;"> пакет com.mybatis.mapper; импортировать java.util.list; Импорт com.mybatis.entity.orderscustom; / *** @classname: ordersmappercustom* @description: todo (mapper ordersmappercustom)* @author ding guohua*/ public interface orderscustompper {/ ** Заказы запроса, Ассоциальный запрос информации пользователя*/ public <orderscustom> findordersuser (); } </span>2.2.4 Создание orderscustompper.xml совпадает с соответствующим именем интерфейса на нем. При загрузке файла конфигурации через интерфейс Mapper код следующим образом:
<span style = "font-family: comic sans ms; font-size: 18px;"> <? 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"> <!-Пространство имен имен пространства имен, функция состоит в том, чтобы классифицировать управление SQL, которое понимается как SQL-изоляция. Примечание. namespace = "com.mybatis.mapper.orderscustommapper"> <!-Заказы запросов, информация об ассоциации запроса-> <select id = "findordersuser" refultype = "com.mybatis.entity.orderscustom"> Select T1. t1.user_id = t2.id </select> </mapper> </span>
2.3 Реализация ResultMap
2.3.1 Заявление SQL так же, как и выше
2.3.2 Идеи картирования картирования результата:
Используйте ResultMap, чтобы отобразить информацию о заказа в результате запроса в объект Orders, добавьте атрибут пользователя в классе заказов и сопоставьте связанную информацию пользователя запроса в атрибут пользователя в объекте Orders (он был добавлен в объекте Orders выше).
2.3.3 orderscustommapper.xml
1. Определите ResultMap, код выглядит следующим образом:
<span style = "font-family: comic sans ms; font-size: 18px;"> <!-Определите карту результата, связанного с пользователем заказа запроса, сопоставьте весь запрос результат com.mybatis.entity.orders-> <resultmap type = "com.mybatis.entity.orders" id = "ordersusul Идентификатор в столбце запроса, уникальный идентификатор в информации о заказе. Если несколько столбцов формируют уникальный идентификатор (например: в таблице словаря в общем дизайне базы данных используется совместный первичный ключ), необходимо настроить несколько идентификаторов. Столбец: Уникальный идентификационный столбец для Свойства информации о заказе: атрибут, отображенный с информацией о заказе с помощью уникального идентификационного столбца для информации о заказе (если: основной ключ в таблице заказов в бате -базе. column = "orders_id" Property = "ordersId"/>, аналогично конфигурации файла сопоставления объектов Hibernate). -> <id column = "id" Property = "id"/> <result column = "user_id" property = "userId"/> <result column = "number" property = "number"/> <result column = "createTime" properation = "createTime"/> <result column = "note" Property = "note"/> <result column = nate "/> <result column" note = nate "! Ассоциация: Информация, используемая для карты связанного запроса, свойства единого объекта: чтобы отобразить пользовательскую информацию о соответствующем запросе, на который свойство в Зарядах-> <Association Property = "user" javatype = "com.mybatis.entity.user"> <!-ID: уникальный идентификатор соответствующего запроса пользователя. <Результат Column = "username" Property = "username"/> <result column = "sex" property = "sex"/> <result column = "address" property = "address"/> </association> </resultmap> </span>
2. Определение оператора, код следующим образом:
<span style = "font-family: comic sans ms; font-size: 18px;"> <!-Заказы запросов, информация о пользователе ассоциированного запроса, используйте Resultmap для реализации-> <select id = "findordersuserresultmap" resultmap = "ordersuserResultmap"> select t1. t1.user_id = t2.id </select> </span>
3. Добавьте следующий метод в интерфейс ordercustompper.java:
<span style = "font-family: comic sans ms; font-size: 18px;">/ ** Query Заказ Ассоциации Ассоциации пользователя Информация о пользователе, используйте Reslutmap для реализации*/ public <Orders> findordersErresultmap (); </span>
4.
<span style = "font-family: comic sans ms; font-size: 18px;"> package com.mybatis.test; импортировать java.io.inputstream; импортировать java.util.list; Импорт org.apache.ibatis.io.resources; Импорт org.apache.ibatis.session.sqlsessionFactory; Импорт org.apache.ibatis.session.sqlsessionFactoryBuilder; Импорт org.junit.fore; Импорт org.junit.test; Импорт com.mybatis.entity.orders; Импорт com.mybatis.entity.orderscustom; Импорт com.mybatis.mapper.orderscustommapper; Общедоступный класс orderscustomppertest {private sqlSessionFactory sqlSessionFactory; // Этот метод состоит в том, чтобы выполнить @before public void setup () выбрасывает exection {string resource = "sqlmapconfig.xml"; InputStream inputStream = resources.getResourceasStream (ресурс); // Создать sqlSessionFcatory sqlSessionFactory = new sqlSessionFactoryBuilder (). Build (inputStream); } // Запросить заказ, связывать информацию пользователя запроса и использовать ResultType для проверки @test public void testfinderdersuser () {sqlSession sqlSession = sqlSessionFactory.opensession (); // Создать Orders OrdersCustommapper OC = SQLSession.getMapper (orderscustommapper.class); // Список методов вызова mapper <OrdersCustom> list = oc.findordersuser (); System.out.println (список); sqlsession.close (); } // Запросить заказ, связывать информацию пользователя запроса и тесты, реализованные с использованием ResultMap @Test public void testFinderserSerResultMap () {sqlSession sqlSession = sqlSessionFactory.opensession (); // Создать прокси -объект OrdersCustommapper OC = sqlSession.getMapper (orderscustommapper.class); // Список методов вызовов Mapper <Orders> list = oc.findordersuserResultmap (); System.out.println (список); sqlsession.close (); }} </span>5. ResultType и ResultMap реализовать краткое изложение запросов один на один
Реализуйте один к одному запросу:
A.ResultType: Относительно просто реализовать с помощью RestultyPe. Если имя столбца запроса не включено в POJO, вам необходимо добавить соответствующие атрибуты имени столбца, чтобы завершить отображение.
беременный Если нет особых требований для результатов запроса, рекомендуется использовать Restultype.
C.ResultMap: Результат необходимо определить отдельно, что немного хлопотно. Если есть особые требования для результатов запроса, использование ResultMap может завершить атрибуты соответствующего отображения запросов POJO.
D.ResultMap может реализовать ленивую загрузку, ResultType не может реализовать ленивую загрузку.
3. Один ко многим запрос
3.1 Требования: Заказы запросов (связанные пользователи) и данные заказа;
3.2 Добавить свойство списка <OrderDetail> Свойство OrderDetails в классе orders.java (вышеуказанная организация была добавлена). Наконец, информация о заказе будет сопоставлена с заказом, а данные заказа, соответствующие заказу, сопоставлены с свойством OrderDetails в заказе.
3.3 Добавьте следующее в orderscustompper.xml
<span style = "font-family: comic sans ms; font-size: 18px;"> <!-Пользователь запроса запроса запроса запроса и детали заказа t3.items_id, t3.items_num, t3.orders_id из заказов T1, T_USER T2, OrderDetail T3, где t1.user_id = t2.id и t3.orders_id = t1.id </select> </span>
Определение ResultMap также добавлено в orderscustompper.xml
<span style = "font-family: comic sans ms; font-size: 18px;"> <!-Resultmap для запроса заказов (связанные пользователи) и детали заказа-> <resultmap type = "com.mybatis.entity.orders" id = "ordersandorderDetailResultmap" extends = "ordersUsUlsultMap"> <!-Порядок информации! Распространение наследства, не настраивайте отображение информации о заказе и информации пользователя в нем-> <!-Связанная информация о деталях заказа. Вам необходимо использовать коллекцию картирования сбора: карта несколько записей, запрошенных в свойство ассоциации, к свойству коллекции OfType: укажите тип POJO в свойстве сбора сопоставления-> <Collection Property = "OrderDetails" oftype = "com.mybatis.entity.orderdetail"> <! <id column = "orderdetail_id" Property = "id"/> <result column = "items_id" property = "itemsid"/> <result column = "items_num" property = "itemsnum"/> <result column = "orders_id" property = "ordersId"/> </collection> </resultMap> </span>
3.4 Добавьте метод в класс интерфейса ordercustomapper.java, код заключается в следующем:
<span style = "font-family: comic sans ms; font-size: 18px;">/ ** Заказ запроса (связанные пользователи) и детали заказа*/ public list <OrderDetail> findOrdersAnderDetailResultMap (); </span>
3.5 Добавьте методы испытаний в тестовый класс JUNIT, код заключается в следующем:
<span style = "font-family: comic sans ms; font-size: 18px;"> // тест на запросы заказа (связанные пользователи) и детали заказа @test public void testfinderserders и dorderdetailresultmap () {sqlsession sqlsession = sqlSessionFactory.opensession ();); // Создать прокси -объект OrdersCustommapper OC = sqlSession.getMapper (orderscustommapper.class); // Список методов вызовов Mapper <OrderDetail> list = oc.findordersandordeDetailResultmap (); System.out.println (список); sqlsession.close (); } </span>3.6 Резюме
Mybatis использует коллекцию ResultMap для составления нескольких записей соответствующего запроса в свойство сбора списков. Реализация с использованием ResultType: сведения о заказе MAP в OrderDetails в заказах, которые необходимо обрабатывать самостоятельно, использовать двойную петлю, удалить дублирующиеся записи и разместить данные заказа в Orcondetails.
4. Многие ко многим запрос
4.1 Требования: Запросите пользователя и информацию о продукте, приобретенную пользователем
4.2 Идеи картирования
Карта пользовательской информации в пользователь, добавьте список атрибутов списка заказов <Orders> OrdersList в классе пользователя, чтобы отобразить OrdersList; Добавить список атрибутов сведений о заказах Добавьте атрибут элементов в Orcondetail, чтобы отобразить элементы, соответствующие данным заказа, с элементом.
4.3 orderscustommapper.xml добавляет следующий код:
<span style = "font-family: comic sans ms; font-size: 18px;"> <!-Resultmap для запроса информации о продукте, приобретенной пользователем-> <resultmap type = "com.mybatis.entity.user" id = "userandItemsresultmap"> <!-Информация пользователя-> <id = "user_id". property="username"/> <result column="sex" property="sex"/> <result column="address" property="address"/> <!-- Order information A user corresponds to multiple orders, using collection mapping--> <collection property="ordersList" ofType="com.mybatis.entity.Orders"> <id column="id" property="id"/> <result column="user_id" property="userid"/> <Результат Column = "number" Property = "number"/> <result column = "createTime" Propertive = "createTime"/> <result column = "note" property = "note"/> <result column = "note"/> <result column = note "property =" note "/> <!-Порядок. column="orderdetail_id" property="id"/> <result column="items_id" property="itemsId"/> <result column="items_num" property="itemsNum"/> <result column="orders_id" property="ordersId"/> <result column="items_name" property="itemsName"/> <result column="itemsName"/> <result column="itemsName"/> <result column="items" javaType="com.mybatis.entity.Items"> <id column="items_id" property="id"/> <result column="items_name" property="itemsName"/> <result column="items_name" property="itemsName"/> <result column="items_detail" property="detail"/> <result column="items_price" property="price"/> </association> </collection> </collection> </resultMap> <!-чтобы запросить информацию о продукте, приобретенную пользователями и пользователями, используйте resulamap-> <select id = "finduserandItemSresultmap" resultMap = "userandItemSresultmap"> select t1. t3.items_num, t3.orders_id, t4.itemsname items_name, t4.detail items_detail, t4.price items_price из орденов T1, T_USER T2, OrderDetail T3, элементы T4, где t1.user_id = t2.id и t3.orders_id = t1.id и t3.items_id = select> wranem and andorders_id = t1.id и t3.items_id = select>
4.4 Добавьте следующий метод в Orconcustommapper.java:
<span style = "font-family: comic sans ms; font-size: 18px;"> / ** Запрос информации о продукте, приобретенной пользователями и пользователями* / public <user> finduseranditemsresultmap (); </span>
4.5 Добавить методы испытаний в тест на JUNIT, код выглядит следующим образом:
<span style = "font-family: comic sans ms; font-size: 18px;"> // Запросить информацию о продуктах, приобретенных пользователем и пользователем @test public void testfinduseranditemsresultmap () {sqlSession sqlSession = sqlSessionFactory.opensession ();); // Создать прокси -объект OrdersCustommapper OC = sqlSession.getMapper (orderscustommapper.class); // Список методов вызова mapper <user> list = oc.finduseranditemsresultmap (); System.out.println (список); sqlsession.close (); } </span> 4.6 Результат Сводка
ResultType:
Функция: отобразить результаты запроса в имена атрибутов POJO в соответствии с именем столбца SQL.
Случай: Общее отображение подробных записей, например, когда пользователи приобретают данные о продукте и отображают всю связанную информацию о запросе на странице, вы можете напрямую использовать ResultType для картирования каждой записи в POJO и пройти список (POJO в списке) на странице фронт-конце.
ResultMap:
Использование: Ассоциация и сбор для завершения усовершенствованного картирования от одного к одному и один-один (существуют специальные требования к отображению для результатов).
Ассоциация:
Функция: отобразить связанную информацию запроса в объект POJO.
Случай: Чтобы облегчить запрос связанной информации, вы можете использовать ассоциацию для картирования связанной информации о заказе в атрибутах POJO объектов пользователей, таких как: Запрос заказов и связанная с ними информация пользователя.
Использование ResultType не может сопоставить результаты запроса с атрибутом POJO объекта POJO. Выберите, использовать ли ResultType или ResultMap в соответствии с потребностями прохождения запроса набора результатов.
Коллекция:
Функция: отобразить связанную информацию запроса в коллекцию списков.
Случай: чтобы облегчить запрос информации об ассоциации обхода, вы можете использовать сбор для составления информации об ассоциации в сборе списков. Например: запрос модуля с разрешением пользователя и меню под модулем, вы можете использовать коллекцию для составления списка модулей для составления карты атрибутов списка меню объекта модуля. Цель этого состоит в том, чтобы облегчить обход, запросив набор результатов запроса.
Если вы используете ResultType, вы не можете сопоставить результаты запроса в коллекцию списков.
Выше приведено расширенное отображение в Mybatis, представленное вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!