Для тех, кто не очень четко понял основы Mybatis, пожалуйста, обратитесь к этой статье: Mybatis Envingure Learning Rutorial (i) - Mybatis быстрое введение.
Познакомьтесь с Mybatis
Mybatis - это проект с открытым исходным кодом Apache. В 2010 году этот проект был перенесен от Apache Software Foundation в Google Code и был переименован в Mybatis. Мигрировал в GitHub в ноябре 2013 года.
Термин ibatis происходит из комбинации «Интернета» и «Abatis», и является основой на базирующейся на основе стойки на основе Java. Ибатис обеспечивает структуры уровня стойкости, включая карты SQL и объекты доступа к данным (DAO)
Mybatis Picture Album
Введение
Я упоминал простые запросы базы данных и запрос управления ранее. В требованиях к разработке есть какое-то какое-то одно к одному, от одного ко многим и многим ко многим требованиям. Например, при разработке корзин для покупок заказы и пользователи являются один на один, пользователи и заказы являются от одного до многих, а пользователи и продукты-много-то. Они также распространены в разработке Hibernate. Они реализованы посредством отображения данных в Hibernate, и в Mybatis они реализованы посредством отображения данных в файлах конфигурации.
Один к одному запросу
Если мы хотим запросить информацию о заказа и информацию о том, что пользователь запросов для создания заказов, то это типичный запрос один на один. Есть два способа реализации запроса один на один: используйте Restultype и ResultMap. ResultType требует дополнительного определения POJO, а затем поля запроса соответствуют недавно определенному POJO один за другим. ResultMap должен реализовать корреляцию один на один между двумя POJO с помощью файлов конфигурации. Давайте реализуем эти два метода отдельно ниже.
ResultType:
1. Создайте POJO и добавьте новые атрибуты, которые должны быть нанесены на карту с новым POJO.
public class ordercustom extends orders {// Добавить информацию пользователя Private String username; частный строковый секс; частный строковый адрес; public String getUsername () {return username; } public void setUsername (string username) {this.username = username; } public String getSex () {return Sex; } public void setsex (строка Sex) {this.sex = sex; } public String getAddress () {return Adder; } public void setAddress (строковый адрес) {this.address = address; }}2. Картирование файлов:
<select id = "findorderUser" resultType = "com.luchao.mybatis.first.po.ordercustom"> Select Orders.*, user.username, user.sex, user.address из заказов, пользователь, где orders.user_id = user.id </select>
3. Реализация интерфейса Mapper:
// Запрос заказа и информация пользователя публичный список <ordercustom> findorderuser () бросает исключение;
4. Тестовый код:
public void findordersuser () выбрасывает исключение {// Получить объект sqlSession sqlSession sqlSession = sqlSessionFactory.opensession (); // Создать объект OrderMapper, MyBatis автоматически генерирует Mapper Proxy OrderMapper OrderMapper = sqlSession.getMapper (ordermapper.class); // Вызовите метод OrderMapper, чтобы запросить заказ и список информации пользователя System.out.println (ordercustoms.size ()); }Реализация ResultMap:
ResultMap отображает информацию о заказа в результате запроса в объект Orders, добавляет атрибут пользователя в классе заказов и отображает связанную информацию пользователя пользователя с атрибутом пользователя в объекте Orders.
1. Создайте POJO и добавьте атрибут пользователя в класс заказа.
Общедоступные заказы {Private Integer ID; частное целое число пользователей; частный строковый номер; частная дата создания времени; Приватная струнная примечание; // Информация пользователя частного пользователя; // Заказ вход в частный список <OrderDetail> OrderDetails; public integer getId () {return id; } public void setId (Integer id) {this.id = id; } public integer getUserid () {return userId; } public void setUserid (integer userId) {this.UserId = userId; } public String getNumber () {return №; } public void setNumber (строка номера) {this.number = number == null? null: number.trim (); } public date getCreatetime () {return createTime; } public void setCreatetime (дата CreateTime) {this.createTime = createTime; } public String getNote () {return Note; } public void setNote (string note) {this.note = note == null? null: note.trim (); } public user getUser () {return user; } public void setUser (пользователь пользователя) {this.user = user; } public List <OrderDetail> getOrderDetails () {return OrderDetails; } public void SetOrderDetails (List <OrderDetail> OrderDetails) {this.orderDetails = OrderDetails; }}2. Картирование файлов:
<!-- Order query the resultMap of the associated user, map the entire query result to orders--> <resultMap type="com.luchao.mybatis.first.po.Orders" id="ordersUserResultMap"> <id column="id" property="id" /> <result column="user_id" property="userId" /> <result column="number" property="number" /> <result Column = "createTime" Property = "createTime" /> <result column = "note" Property = "note" /> <!-Настройте связанную информацию пользователя о картировании-> <!-Ассоциация: используется для карты информации для соответствующего запроса. <!-- id: Unique ID of the associated query user column: Specify the column that uniquely identifies user information javaType: Which property of the user map to --> <id column="user_id" property="id" /> <result column="username" property="username" /> <result column="sex" property="sex" /> <result column="address" property="address" /> </association> </resultMap> <select id = "findorderUsermap" resultMap = "ordersUserResultMap"> выберите заказы.*, user.username, user.sex, user.address из заказов, пользователь, где orders.user_id = user.id </select>
Ассоциация: используется для отображения информации об ассоциированном запросе отдельного объекта, свойство: какое свойство в заказе для отображения пользовательской информации соответствующего запроса.
3. Интерфейс Mapper
// Запрос заказа и информацию пользователя через публичный список ResultMap <Заказы> FindorderUsermap () выбрасывает исключение;
4. Тестовый код:
public void findordersuserMap () бросает исключение {// Получить объект sqlSession sqlSession sqlSession = sqlSessionFactory.opensession (); // Создать объект OrderMapper, mybatis автоматически генерирует Mapper Proxy OrderMapper OrderMapper = sqlSession.getMapper (ordermapper.class); // Вызовите метод OrderMapper, чтобы запросить заказ и список информации пользователя <Orders> orders = ordermapper.findorderuseRermap (); System.out.println (orders.size ()); }ResultType и ResultMap реализовать резюме запроса один на один:
ResultType: Относительно просто реализовать с помощью ResultType. Если имя столбца запроса не включено в POJO, вам необходимо добавить соответствующие атрибуты имени столбца, чтобы завершить отображение. Если нет особых требований для результатов запроса, рекомендуется использовать Restultype.
Результат -карта: карта результата должна быть определена отдельно, что немного хлопотно. Если есть особые требования для результатов запроса, использование ResultMap может завершить атрибуты соответствующего отображения запросов POJO. ResultMap может реализовать ленивую загрузку, ResultType не может реализовать ленивую загрузку.
Один ко многим запрос
Если вам нужно запросить данные о заказе и заказа, то это требование от одного ко многим запросам.
1. Pojo - это то же самое, что и Pojo порядка в карте результата выше. Установите данные заказа, чтобы указать в качестве атрибута заказа.
2. Картирование файлов:
<!-Карта для заказа и информации о заказе и информация пользователя Использование наследования не нужно настраивать информацию о заказе и пользователе-> <resultmap type = "com.luchao.mybatis.first.po.orders" id = "ordersorderdetailresultmap" extends = "ordersuserresultmap"> <collectionDetails " ofType="com.luchao.mybatis.first.po.Orderdetail"> <result 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> <select id = "findorderDorderDetailMap" resultMap = "ordersorderDetailResultMap"> выберите Orders.*, user.usernam user.id и orderdetail.orders_id = orders.id </select>
Результат карты заказов и данных заказа унаследована с использованием Extends, и нет необходимости настраивать отображение информации о заказе и информации пользователя.
Сборник: Карта несколько записей в объект коллекции для запроса ассоциации, свойство: карта несколько записей в свойство Orders.
OfType: указывает тип, который отображает для POJO в атрибуте коллекции списка. Обратите внимание, что все еще существует разница между Thitype и One-to-One.
3. Интерфейс Mapper:
// запрос на заказы, данные заказа и информацию пользователя через карту результата
Общественный список <Заказы> FindorderDorderDetailMap () бросает исключение;
4. Тестовый код:
public void findorderdorderDetailMap () выбрасывает Exception {// Получить объект sqlSession sqlSession sqlSession = sqlSessionFactory.Opensession (); // Создать объект OrderMapper, mybatis автоматически генерирует Mapper Proxy OrderMapper OrderMapper = sqlSession.getMapper (ordermapper.class); // Позвоните в метод OrderMapper для запроса заказа и список информации пользователя <Orders> Orders = Ordermapper.findorderDorderDetailMap (); System.out.println (orders.get (). GetorderDetails (). Size ()); System.out.println (orders.size ()); }Одно ко многим резюме:
Mybatis использует коллекцию ResultMap для составления нескольких записей соответствующего запроса в свойство сбора списков.
Реализация с использованием ResultType:
Сопоставление информации о заказе в OrderDetails В заказе вам нужно обрабатывать его самостоятельно, использовать двойной цикл для прохождения, удаления дублирующих записей и разместить данные заказа в Orcondetails. Это будет более хлопотно.
Многие ко многим
Если мы запросим информацию о покупке продукта пользователей и пользователей, это много-то, что можно, и вы можете использовать картирование Mybatis от многих-человека.
Карта пользовательской информации в пользователь. Добавьте список атрибутов списка заказов <Orders> OrdersList в классе пользователя, отобразите заказ, созданный пользователем в OrdersList, добавьте список атрибутов сведений о заказах
1. Pojo
открытый класс orderdetail {private Integer Id; частное целое число OrdersId; частный целый electionId; частные целочисленные элементы; // Информация о продукте частные пункты; public integer getId () {return id; } public void setId (Integer id) {this.id = id; } public integer getordersId () {return ordersId; } public void setorderSID (Integer ordersId) {this.ordersId = ordersId; } public integer getItemsId () {return itemsId; } public void setIteMsId (Integer emitsId) {this.ItemsId = itemsId; } public integer getItemsnum () {return itemsnum; } public void setIteMsnum (Integer emitsnum) {this.Itemsnum = itemsnum; } публичные элементы getItems () {return items; } public void setItems (элементы элементы) {this.Items = items; } @Override public String toString () {return "orderDetail [id =" + id + ", ordersId =" + ordersId + ", itemsId =" + itemsId + ", itemsnum =" + itemsnum + "]"; }}2. Картирование файлов:
<!-Запросите пользователя и приобретенные продукты-> <resultmap type = "com.luchao.mybatis.first.po.user" id = "ordersitemsresultmap"> <!-Информация пользователя-> <id column = "user_id" property = "id" /> <result column = "username" property = "username" /> <Slust "=" Секс = "result". Property = "Adder" /> <!-Информация о заказе пользователь соответствует нескольким порядкам, используйте картирование сбора-> <collection property = "orderslist" oftype = "com.luchao.mybatis.first.po.orders"> <id Column = "id" Property = "id" /> <result column = "user_id" property = "userId" /> <result column " /" № "=" № " /" number " /" № "=" /" /" № "=" /"№" = " /" № "=" /"№" = " /" /"". Column = "createTime" Property = "createTime" /> <result column = "Note" Property = "note" /> <!-Подробная информация о заказе Один заказ включает в себя несколько деталей-> <Collection Property = "OrderDetails" ofType = "com.luchao.mybatis.first.po.orderdetail"> <id = "id" property = "ID" /> <result "= stective" /stoct " /resurete" /result " /result" /result " /resurete" /resurete " /resurete" /resuret " /resurete" /resurete " /resuretail" column = "items_num" Property = "itemsnum" /> <result column = "orders_id" property = "ordersId" /> <!-Информация о продукте Один подробный характер соответствует одному продукту-> <Association Property = "items" javatype = "com.luchao.mybatis.first.po.items"> <id Column = "itember_id" = "ID" /"stopmaMe =" ID " /" stopmaMe = "stopmaMe =" ID "=" stopmaMe = "IDAME =" stopmAme = "IDAME". /> <result column = "itember_detail" property = "detail"/> <result column = "items_price" property = "price"/> </association> </collection> </collection> </resultmap> <select id = "findorderandItemmap" resultmap = "ordersitemresultmap"> select orders. orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id, items.id items_id, items.name items_name, items.detail items_detail, items.price items_price from orders,user,orderdetail,items where orders.user_id = user.id and orderdetail.orders_id = orders.id AND orderdetail.items_id = item.id </select>
Видно, что многие-многие-это в основном комбинация от одного ко многим и один к одному. Все сложные проблемы - это в основном комбинации простых проблем. Пока вы тщательно их анализируете, вы можете понять принципы.
3. Интерфейс Mapper:
// Заказ запроса, данные заказа и информацию пользователя через публичный список ResultMap <uster> findorderAnditemmap () выбрасывает исключение;
4. Тестовый код:
public void findorderAnditemmap () бросает исключение {// получить объект sqlSession sqlSession sqlSession = sqlSessionFactory.opensession (); // Создать объект OrderMapper, mybatis автоматически генерирует Mapper Proxy OrderMapper OrderMapper = sqlSession.getMapper (ordermapper.class); // Вызовите метод OrderMapper, чтобы запросить заказ и список пользователей <user> users = ordermapper.findorderanditemmap (); System.out.println (users.get (). Getorderslist (). Get () .getorderDetails (). Get (). GetId ()); // System.out.println (orders.size ()); }Краткое изложение запросов многих ко многим:
Приведенные выше требования используют ResultType для сопоставления запрошенных записей в расширенный POJO, который очень прост в реализации функции подробного списка, но это не может достичь отложенной загрузки. Используйте ResultMap, чтобы отобразить подробный список элементов, приобретенных пользователями, на объект, который позволяет ленивый загрузка. Использование ResultMap предназначена для тех функций, которые имеют особые требования для отображения результатов запроса, такие как отображение специальных требований в списки, включая несколько списков.
Результат Сводка
1. РЕЗУЛЬТАЦИИ:
эффект:
Карту запроса результаты в Pojo в соответствии с названием столбца SQL POJO ATTRIBUT
повод:
Общее отображение подробных записей, например, когда пользователи приобретают данные о продукте и отображают всю связанную информацию запроса на странице, вы можете напрямую использовать ResultType для картирования каждой записи в POJO и пройти список (POJO в списке) на линейной странице.
2. ResultMap:
Используйте ассоциацию и коллекцию, чтобы завершить усовершенствованное картирование от одного к одному и один-один (существуют специальные требования к отображению для результатов).
Ассоциация:
эффект:
Сопоставьте связанную информацию запроса в объект POJO.
повод:
Чтобы облегчить запрос связанной информации, вы можете использовать ассоциацию для карты связанной информации о заказе в атрибутах POJO объектов пользователей, таких как: запросы заказов и связанная с ними информация пользователя.
Использование ResultType не может сопоставить результаты запроса с атрибутом POJO объекта POJO. Выберите, использовать ли ResultType или ResultMap в соответствии с потребностями прохождения запроса набора результатов.
Коллекция:
эффект:
Сопоставьте связанную информацию запроса в коллекцию списков.
повод:
Чтобы облегчить запрос информации об ассоциации обхода, вы можете использовать сбор для составления информации об ассоциации в сборе списков. Например: запрос модуля с разрешением пользователя и меню под модулем, вы можете использовать коллекцию для составления списка модулей для составления карты атрибутов списка меню объекта модуля. Цель этого состоит в том, чтобы облегчить обход, запросив набор результатов запроса.
Если вы используете ResultType, вы не можете сопоставить результаты запроса в коллекцию списков.
Приведенный выше контент - это учебник Mybatis Advanced Mapping Learning, представленный вам редактором. Я надеюсь, что это будет полезно для вас. Если вы хотите узнать больше, обратите внимание на веб -сайт wulin.com!