Введение: Что такое Mybatis?
(Ранее Ибатис) Mybatis - это структура упорства, которая может настроить SQL, хранимые процедуры и расширенные отображения. Mybatis устраняет ручную настройку почти всех кодов JDBC и параметров, а также поиск набора результатов. Mybatis может использовать простые XML или аннотации для конфигурации и оригинального отображения, отображения интерфейсов и Pojos Java (простые старые объекты Java) в записи в базе данных.
1. Параметр слоя Mapper является MAP, а уровень обслуживания отвечает за перегрузку.
Из -за задач механизма карта не может быть перегружена. Параметры, как правило, устанавливаются на карту, но это сделает параметры размытыми. Если вы хотите прояснить код, вы можете достичь цели перегрузки через уровень обслуживания. Сервисный уровень, предоставляемый снаружи, перегружен, но эти перегруженные методы обслуживания фактически для настройки одного и того же картера, но соответствующие параметры не являются согласованными.
Может быть, некоторые люди могут задаться вопросом, почему бы не установить его на карту в сервисном слое? Я лично не рекомендую это. Хотя я принял этот метод в своих предыдущих проектах для удобства, он, очевидно, вызовет проблемы для будущих работ по техническому обслуживанию. Потому что это заставит весь ваш MVC полагаться на модель карты. Эта модель на самом деле очень хорошая и удобная для создания структуры, но есть проблема: просто взглянуть на подпись метода, вы не знаете число, тип и значение каждого параметра, представленного картой.
Представьте себе, что если вы только измените уровень обслуживания или слой DAO, вам необходимо прояснить параметры, передаваемые картой во всем процессе. Если вы не комментируете или не имеете хорошей документации, вы должны четко понять код каждого уровня, прежде чем вы узнаете, какие параметры передаются. Для простого MVC это нормально, но если уровень сложный, код станет чрезвычайно сложным, и если я добавлю параметр, мне нужно добавить комментарии для каждого уровня. По сравнению с комментариями, более целесообразно использовать подписи метода, чтобы обеспечить управляемость этого кода, поскольку комментарии могут быть устаревшими, но подписи метода, как правило, вряд ли будут устаревшими.
2. Попробуйте использовать, если выбор и другие заявления как можно меньше, чтобы уменьшить сложность технического обслуживания.
При настройке SQL в Mybatis попробуйте использовать меньше метки, таких как, если выберите. Если SQL можно использовать для определения суждения, попробуйте использовать SQL (случай, когда, декодирование и т. Д.) Для последующего обслуживания. В противном случае, как только SQL раздувается, это очень тошнотворно. Если вам нужно отладить SQL в Mybatis, вам нужно удалить большое количество высказываний, что очень хлопотно. С другой стороны, большое количество суждений приведет к тому, что сгенерированный SQL содержит большое количество пробелов, что увеличит время передачи сети, что также нежелательно.
Кроме того, большое количество операторов, если вы выбираете, неизбежно, сгенерированный SQL будет несовместимы каждый раз, что приведет к большому количеству жесткого анализа Oracle, что также не рекомендуется.
Давайте посмотрим на SQL, как это:
<code style = "Padding: 0,5em; Margin: 0px; дисплей: блок; Цвет: RGB (101,123,131); Oupflow-X: Auto; фон: RGB (253,246,227)"> <Span Style = "Padding: 0px; Margin: 0px"> <span = "Padding: 0px; 0PX; Цвет: RGB (133,153,0) "> Select </span> * <span Style =" Padding: 0px; Style = "Padding: 0px; Margin: 0px; цвет: RGB (42,161,152)"> 1 </span> = <span style = "Padding: 0px; Margin: 0px; цвет: Rgb (42,161,152)"> 1 </span> <<span style = "Padding: 0px; Marrin: 0px; Цвет: RGB (133,153,0) "> 1 </span> <<span Style =" Padding: 0px; Style = "Padding: 0px; Margin: 0px; Color: RGB (42,161,152)"> "StartDate! = NULL и StartDate! #{startDate} <span style = "padding: 0px; поля: 0px; Цвет: rgb (133,153,0) "> и </ span> publishtime <= #{endDate} </ <span style =" padding: 0px; поля: 0px; Цвет: rgb (133,153,0) "> если </span> <shene> <span style =" padding: 0px; поля: 0px; Цвет: RGB (133,153,0) "> и </span> publishtime> = <span style =" padding: 0px; поля: 0px; Цвет: RGB (133,153,0) "> sysdate </span> - <span style =" padding: 0px; поля: 0px; Цвет: RGB (42,161,152) "> 7 </span> <span style =" padding: 0px; поля: 0px; Цвет: RGB (133,153,0) "> и </span> publishtime <= <span style =" padding: 0px; поля: 0px; Цвет: RGB (133,153,0) "> sysdate </span> </ights> </<span style =" padding: 0px; поля: 0px; Цвет: RGB (133,153,0) "> sysdate </span> </ights> </<span style =" padding: 0px; поля: 0px; Цвет: RGB (133,153,0) "> выберите </span >> </span>Такова, если суждение на самом деле совершенно не нужно. Мы можем просто использовать декодирование для решения проблемы значения по умолчанию:
<code style = "Padding: 0,5em; Margin: 0px; дисплей: блок; Цвет: RGB (101,123,131); Oupflow-X: Auto; фон: RGB (253,246,227)"> <Span Style = "Padding: 0px; Margin: 0px"> <span = "Padding: 0px; 0PX; Цвет: RGB (133,153,0) "> Select </span> * <span Style =" Padding: 0px; <span style = "Padding: 0px; Margin: 0px; Color: Rgb (133,153,0)"> Декодировать </span> (#{startDate}, <span style = "padding: 0px; margin: 0px"> null </span>, <span style = "padding: 0px; margin: 0px; Цвет: RGB (133,153,0) "> Sysdate </span>-<span Style =" Padding: 0px; Цвет: RGB (133,153,0) "> и </span> publichtime <= <span Style =" Padding: 0px; Покрас: 0px "> null </span>, <span style =" padding: 0px; поля: 0px; поля: 0px; Цвет: rgb (133,153,0) "> sysdate </span>,#{enddate}) </span> </code>Конечно, некоторые люди могут подумать, что введение случая, когда и декодирование потребует анализа функций Oracle, что замедлит время выполнения SQL. Заинтересованные студенты могут вернуться и сделать тест, чтобы увидеть, будет ли большое влияние. Что касается личного опыта, я не нашел никакого замедления в SQL из -за анализа функций. Как правило, такие операции, как Join, Order By, Comply, Paritition By и т. Д., Которые, как правило, тесно связаны с конструкцией структуры таблицы. По сравнению со степенью воздействия на это эффективность этого влияния функционального анализа на скорость выполнения SQL должно быть незначительным.
Другой момент заключается в том, что для некоторых назначений значений по умолчанию, таких как SQL выше, по умолчанию в текущую дату и т. Д. Вы можете полностью упомянуть уровень обслуживания или уровень контроллера для обработки. Эти суждения должны использоваться меньше в Mybatis. Потому что, в этом случае, трудно кэшировать обработку. Если StartDate пуст и использует динамический SysDate на SQL, невозможно определить, каким должен быть ключ даты запуска кэша. Следовательно, лучше всего обрабатывать параметры перед передачей в Mybatis, чтобы слой Mybatis также мог уменьшить некоторые операторы, если вы выберите, и также удобно для обработки кэша.
Конечно, это не абсолютно не использовать, если выберите. Иногда для оптимизации SQL, если нужно решить, например, как высказывания. Конечно, как обычно не рекомендуется. Однако, если есть сценарии для использования, удаляйте, как и в случае, когда вам не нужно его использовать, например, запрос заголовка статьи для повышения эффективности запросов. Лучший способ-использовать поисковые системы, такие как Lucence, для решения этой проблемы полнотекстовой индексации.
В общем, если и решите судить, что ветвь невозможно полностью удалить, но рекомендуется использовать нативный метод SQL для решения некоторых динамических проблем, а не полностью полагаться на Mybatis для завершения суждения динамических ветвей, потому что ветвь суждения слишком сложна и трудно поддерживать.
3. Замените SQL комментарии на XML -комментарии.
Постарайтесь не сохранять комментарии Mybatis Central SQL. Комментарии вызовут некоторые проблемы. Если вам нужно использовать комментарии, вы можете использовать <!--> в XML, чтобы аннотировать, чтобы убедиться, что в создании SQL не будет аннотаций SQL, что снижает возможность проблем. Еще одним преимуществом этого является то, что он может четко отличить аннотации от SQL в IDE.
Теперь давайте поговорим о проблемах, вызванных комментариями. В проекте, над которым я работаю, компонент страниц основан на Mybatis. Он поместит еще один слой избранных счетов (*) rownum_ из (......) за пределами сценария SQL, который вы написали для расчета общего количества записей. В то же время есть еще один вложенный выбор * от (...), где Rownum> 10 и Ronnum <10 * 2 генерируют информацию о пейджинге. Если в вашем скрипте есть комментарий к последней строке, дополнительная часть станет частью комментария, и будет сообщена ошибка. Кроме того, некоторые условия могут также привести к игнорированию некоторых условий, таких как следующие:
<code style = "padding: 0.5em; маржа: 0px; дисплей: блок; цвет: RGB (101,123,131); overflow-x: auto; фон: RGB (253,246,227)"> <span Style = "Padding: 0px; маржа: 0px; color: rgb (133,153 </span> * span> * span>. Style = "Padding: 0px; Margin: 0px; цвет: RGB (133,153,0)"> из </span> test <span style = "padding: 0px; маржа: 0px; цвет: Rgb (133,153,0)"> где </span> col1> <span style = "padding: 0px; margin: 0px; Цвет: rgb (42,161,152) A! = '' </span >> <span style = "Padding: 0px; '' </span >> <Span Style = "Padding: 0px; Маржа: 0px "> if </span >> </span> </code>
Даже если есть соответствующие параметры в падебных параметрах, фактически не будет никакого эффекта, поскольку следующее содержание фактически полностью прокомментировано. Этот вид ошибок трудно обнаружить без строгого тестирования. Вообще говоря, комментарии XML могут полностью заменить комментарии SQL, поэтому это поведение должно быть запрещено.
4. Используйте #{}, когда это возможно, а не $ {}.
Постарайтесь не использовать $ {} в Mybatis. Это очень удобно сделать это. Тем не менее, существует проблема, что большое количество использования приведет к жесткому анализу Oracle, замедляя производительность базы данных. Чем дольше будет производительность базы данных, тем хуже будет производительность базы данных. Для общей обработки нескольких строковых INS вы можете обратиться к следующему решению: http://www.myexception.cn/sql/849573.html, которая может в основном решить большую часть $ {}.
Что касается $ {}, это похоже на другое неправильное использование. У меня здесь есть еще один случай: например, некоторые меню деревьев, узлы будут разработаны как «01», «0101», и двухбитные узлы используются для различения иерархий. В настоящее время, если вам нужно запросить все узлы под узлом 01, самый простой SQL: выберите * из дерева, где идентификатор, как «01%». Этот вид SQL на самом деле понятен, потому что он также может использовать индексы, поэтому он не требует специальной обработки, просто используйте его напрямую. Но если это название статьи, вам нужно обратить дополнительное внимание: выберите * из T_NEWS_TEXT, где заголовок, как «%OFC%», это не способ использовать индексацию. Как упомянуто выше, лучше всего использовать полный текстовый поиск. Но если вы не можете обойтись без подобного, вам нужно обратить внимание на метод использования: ID, как #{id} || «%'вместо идентификатора, как' $ {id}%», чтобы уменьшить возможность жесткого анализа.
Некоторые люди думают, что использование || увеличит время для обработки Oracle. Я думаю, не берите Oracle слишком глупо. Хотя иногда это действительно глупо, вы можете подвести итог глупости, а не мусора, когда у вас есть время, но после небольшого теста вы узнаете, что этот метод соединения должен быть очень тонким для анализа и выполнения всего SQL.
Конечно, есть некоторые особые случаи, которые не могут быть обработаны, такие как динамическая инъекция названий столбцов, названий таблиц и т. Д. Для этих ситуаций это сложно, и не найдено более удобных средств. Поскольку эта ситуация с меньшей вероятностью возникнет, использование $ {} не окажет большого влияния. Конечно, если у вас есть заболеваемость кода, вы можете использовать динамический механизм выполнения Oracle SQL, чтобы выполнить немедленное, чтобы вы могли полностью избежать возможности $ {}. Это введет более сложные модели, и в настоящее время вам нужно сделать выбор.
В ответ на задачи, вызванные динамическим SQL выше, наиболее радикальным способом является использование хранимых процедур и решать их нативным способом базы данных для облегчения развития и отладки. Конечно, это также вызовет проблемы: будут более высокие требования для разработчиков, управление хранимыми процедурами и т. Д. Мой проект не принял этот метод, поэтому я не буду расширять здесь больше.
5. Простое использование Mybatis.
Функция Mybatis относительно слаба, и ей не хватает много необходимых вспомогательных библиотек, обработки строк и т. Д., И ее также трудно расширить, поэтому обычно можно обработать некоторые возвраты. Следовательно, лучше всего использовать его в качестве простого файла конфигурации SQL и простой структуры ORM. Не пытайтесь сделать слишком много динамического SQL в Mybatis, в противном случае это приведет к тому, что последующее техническое обслуживание будет очень отвратительным.
Выше приведено резюме Mybatis Learning, которое редактор представил вам. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!