Введение в Mybatis
Mybatis - отличная структура слоя настойчивости, которая поддерживает простые запросы SQL, сохраненные процедуры и расширенное картирование. Mybatis устраняет ручные настройки почти всех кодов JDBC и параметров и поисковой инкапсуляции набора результатов. Mybatis может использовать простые XML или аннотации для конфигурации и оригинального отображения, отображения интерфейсов и Pojos Java (простые старые объекты Java) в записи в базе данных.
Функциональная архитектура Mybatis разделена на три слоя (картина заимствована из энциклопедии Baidu):
1) Слой интерфейса API: обеспечивает интерфейсные API для внешнего использования, с помощью которого разработчики манипулируют базами данных. Как только уровень интерфейса получит запрос вызова, он вызовет уровень обработки данных, чтобы завершить конкретную обработку данных.
2) Уровень обработки данных: Отвечает за конкретный поиск SQL, анализ SQL, выполнение SQL выполнения и сопоставления результатов, и т. Д. Его основная цель - выполнить операцию базы данных на основе запроса вызова.
3) Базовый уровень поддержки: Отвечает за самую основную функциональную поддержку, включая управление соединением, управление транзакциями, загрузку конфигурации и обработку кэша. Это все общие вещи, извлекая их как самые основные компоненты. Предоставляет самую основную поддержку верхнего уровня уровня обработки данных.
При выборе отображения в mybatis тип возврата может использоваться с ResultType или ResultMap. ResultType непосредственно представляет тип возврата, в то время как ResultMap является ссылкой на внешнюю карту результата, но ResultType и ResultMap не могут существовать в одно и то же время. Когда Mybatis запрашивает отображение, на самом деле, каждый запрос атрибута помещается в соответствующую карту, где ключ - имя атрибута, а значение - его соответствующее значение. Когда предоставляемый атрибут возврата типа является ResultType, Mybatis извлечет пары значений ключей на карте и назначит их соответствующим атрибутам объекта, указанного RestultyPe. Таким образом, фактически, тип возврата каждой карты запросов Mybatis является картой результата. Однако, когда атрибут типа возврата, который мы предоставляем, является ResultType, Mybatis автоматически присваивает соответствующее значение атрибутам объекта, указанного в результате ResultType. Когда тип возврата, который мы предоставляем, является ResultMap, поскольку карта не может хорошо представлять модель домена, нам необходимо дополнительно преобразовать ее в соответствующий объект сами, что часто очень полезно в сложных запросах.
Есть такой блог.
Import java.util.list; blog Public Class {Private Int ID; титул частной строки; Commine String Content; Private String владелец; частный список <Комментарий> Комментарии; public int getId () {return id;} public void setId (int id) {this.id = id;} public String getTitle () {return title;} public void settille (string title) {this.title = stupubtle gettle = atement atement atemtle = atement atemtle =; Content;} public void setContent (String Content) {this.content = content;} public String getOwner () {return whore;} public void setOwner (строка владелец) {this.Owner = владелец;} public list <Комментарий> getComments () {return Comments;} public void setCommes (sipe> comments) {this.com -nemports =@@@@@@@@@@@@@@@@@@@@@@@@wostric stostrict@ "---------------- 博客 ----------------------/N ID:" + ID + "/n Название:" + title + "/n Content:" + Content + "/n владелец:" + владелец;}}Соответствующая таблица базы данных содержит идентификатор, заголовок, контент и атрибуты владельца. Когда мы выполняем следующее отображение запросов
<typealias alias = "blog" type = "com.tiantian.mybatis.model.blog"/> <!-Файл конфигурации из mybatis mybatis_config.xml-> <select id = "selectblog" parametertype = "int" outdetpe = "blog"> select * from t_blog, где id = #{id} </select> <! Blogmapper.xml->MyBatis автоматически создаст объект ResultMap, а затем инкапсуляет пару значений ключей на основе имени найденного атрибута. Затем вы увидите, что возвращаемый тип является объектом блога, а затем вытащите пару клавиш, соответствующую объекту блога из ResultMap, и назначьте его.
Это также очень полезно, когда тип возврата непосредственно является картой результата, которая в основном используется для сложных совместных запросов, поскольку нет необходимости проводить простые запросы. Давайте сначала посмотрим на простой запрос с результатом возврата, а затем посмотрим на использование сложных запросов.
Как написать простой запрос
<resultMap type="Blog" id="BlogResult"><id column="id" property="id"/><result column="title" property="title"/><result column="content" property="content"/><result column="owner" property="owner"/><result column="owner" property="owner"/><result column="owner" property="owner"/><result column="owner" свойство = "Владелец"/> <</resultMap> <select id = "selectblog" parametertype = "int" resultmap = "blogresult"> select * from t_blog, где id = #{id} </selet>Значение ResultMap на карте Select - это идентификатор внешней карты результата, указывающий, какой результат отображается. Атрибут типа внешней карты результата показывает, какой тип результата карты результата. Вот тип блога, поэтому Mybatis выведет его в качестве объекта блога. Для определения идентификатора объекта используется идентификатор узла дочернего узла, в то время как для определения некоторых простых свойств используется идентификатор объекта, в то время как результат дочернего узла используется для определения некоторых простых свойств. Свойство столбца представляет атрибуты, запрошенные из базы данных, и свойство представляет, какое свойство соответствующее значение запрошенного свойства назначается объекту объекта. Это как написать ResultMap для простого запроса. Затем давайте посмотрим на более сложный запрос.
Существует класс комментариев, который имеет ссылку на блог, указывающий, для чего он предназначен. При запросе комментариев мы также должны узнать соответствующий блог и назначить его атрибуту блога.
Import java.util.date; Public Class Comment {private Int Id; Private String Content; частная дата CommentDate = new Date (); Public Blog Blog; public int getId () {return id;} public void setId (int id) {this.id = id;} public String getContent () {return Content;} public void setContent (String Content) {this.content () {etrate atemptant wet -wet -wet -at -deftent atemptent = eTectATENTENTENTENTENTENT (). {return CommentDate;} public void setCommentDate (Date CommentDate) {this.commentDate = commentDate;} public Blog getBlog () {return Blog;} public void setBlog (блог блог) {this.blog = blog;} public String toString () {return Blog + "/n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- "/n CommentDate:" + CommentDate;}}Это написано так
<!-из файла commentmapper.xml-> <resultmap type = "comment" id = "commentresult"> <ocmpoyt property = "blog" select = "selectblog" column = "blog" javatype = "blog"/> </resultmap> <select id = "selectcomment" parametertype = "int" resultmap = "commerptult"> select * complysult * complysult "> select * compl #{id} </select> <select id = "selectblog" parametertype = "int" resultype = "blog"> select * from t_comment, где id = #{id} </select> <select id = "selectblog" parametertype = "int" outdetpe = "blog"> select * from t_blog, где id = #{id} <//select> </select> <//select> <//id} <//select> </id} <//selectСитуация доступа такая. Сначала вы запросите карту выбора с идентификатором SelectComment, а затем вы получаете объект ResultMap с идентификатором комментариев. Мы можем видеть, что возвращаемый тип соответствующей карты результата - это объект комментариев, который имеет только один узел ассоциации, и нет идентификатора и результата дочернего узла, соответствующего простому запросу, упомянутому выше, но он все равно будет назначать соответствующий идентификатор и другие атрибуты объекту комментария. Это то, что MyB упоминал ранее. ATIS имеет автоматическую функцию инкапсуляции. Пока вы предоставляете тип возврата, Mybatis будет использовать результаты запроса, чтобы инкапсулировать соответствующий объект в соответствии с его собственным суждением. Следовательно, в простом запросе выше, если вы не четко указываете, какое поле соответствует идентификатору, а какое поле соответствует заголованию в Resultmap, Mybatis также будет инкапсулировать его в соответствии с его собственным суждением. Собственное суждение Mybatis состоит в том, чтобы сравнить поле запроса или его соответствующий псевдоним с атрибутами объекта возврата. Если он соответствует, а тип также соответствует, Mybatis назначит его. Атрибут блога связан с соответствующей картой результата выше, и его соответствующий тип Java - это блог. В приведенном выше методе написания связанный объект связан с помощью подразделений, и, конечно, он также может быть связан непосредственно с помощью запроса ассоциации. В приведенной выше узел детского узела атрибут свойства указывает, какое соответствующее свойство является типом возврата ResultMap. Для примера выше, атрибут блога управлял комментарием; Выбрать Указывает, какой выберите MAP, чтобы отобразить соответствующий связанный атрибут, то есть он запросит карту выбора со значением, соответствующим для выбора, чтобы запросить связанный объект атрибута; В столбце указывается пара клавиш, соответствующую карте результата с ID CommentResult. Эта пара ключевых значений будет использоваться в качестве параметра для подразделения связанного объекта, то есть значение запроса атрибута блога в SelectComment передается в качестве параметра в подраздел блога связанного объекта в подбору блога связанных объектов; Javatype указывает, какой тип текущего связанного объекта находится на Java.
Вышеуказанное вводит запрос о отношениях от одного к одному или одному-млн. В случае с одним к человеку. В реальных приложениях есть еще одно приложение, которое использует чаще. Необходимо выяснить соответствующие больше сторон через одну сторону. Принимая больше сторон, одна сторона также должна быть связана с одной стороной. То есть, в приведенном выше примере при выходе объекта блога все соответствующие комментарии вынуждены. Принимая комментарий, он все еще должен взять соответствующий блог. Это снимается по запросу в Java. Метод написания следующим образом:
<!-- From BlogMapper.xml file--><resultMap type="Blog" id="BlogResult"><id column="id" property="id"/><collection property="comments" select="selectCommentsByBlog" column="id" ofType="Comment"></collection></resultMap><resultMap type="Comment" id="CommentResult"><association property="blog" javatype = "blog" column = "blog" select = "selectblog"/> </resultmap> <select id = "selectblog" parametertype = "int" resultmap = "blogresult"> select * from t_blog, где id = #{id} </select> <!-Найти комментарий от блога-> <select = "select 'selectbyblog" parametertype = "in in in in int." int int. "int int." resultMap = "Комментарий"> выберите * из t_comment, где blog = #{blogid} </select>Запись приведенного выше запроса - это карта Select с ID SelectBlog, а результат возврата - результат с помощью ID Blogresult. Тип Blogresult - это блог, который указывает атрибуты и поля ID. Указание ID будет иметь большое влияние на внутреннюю конструкцию Mybatis. Это связано с объектом комментариев. Поскольку в блоге может быть много комментариев, которые являются коллекцией, поэтому он сопоставлен с коллекцией коллекции. Выбор по -прежнему указывает, какой подзадатель выполняется для запроса соответствующих комментариев. Столбец означает, какое значение поля, найденное выше, передается в подпрограмму в качестве параметра. ofType также представляет тип возврата. Возвратный тип здесь - тип внутри коллекции. Причина, по которой Thitype используется вместо типа, заключается в том, что он используется в Mybatis, чтобы отличить его от ассоциации.
Тестовый код:
@Testpublic void selectcommentsbyblogtest () {sqlsession session = util.getSqlSessionFactory (). OpenSession (); CommentMapper CommentMapper = session.getMapper (commentmapper.class); список <Comment> Комментарии = Комментарий. Selectcommentsbyblog (6); Комментарии) system.out.println (comment); session.close ();}/*** Запросить одну запись*/@testpublic void testselectone () {sqlsession session = util.getsqlsessionFactory (). OpenSession () Blogmapper blogmapper = session.getmapper (blogmapper.class); blogmapper.selectblog (6); list <Comment> comments = blog.getcomments (); if (comments! = null) {System.out.println ("-------------- Комментарии Размер ------------" + КомментарииВыше приведено краткий обзор карты результата в Mybatis, представленной вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!