Использование Mybatis здесь не рассматривается. Друзья, которые не знают, как им пользоваться, могут нажать
woohoo. не добавил elevate.org/ не добавил elevate-3/ в…
Учебники здесь очень подробные, включая настройку XML, сопоставление и динамический SQL, которые можно изучить и использовать.Эта серия статей даст вам более глубокое понимание MyBatis.
1. Введение в ORM
ORM (Object Relational Mapping) структура объектно-реляционного сопоставления, основная функция ORM заключается в завершении сопоставления данных между объектной моделью и реляционной моделью в соответствии с файлом конфигурации сопоставления.
1.1 Общие рамки ORM
1.1.1 Hibernate
Hibernate поддерживает отношение сопоставления между классом Java и таблицей базы данных через файл сопоставления hbm.xml.Благодаря сопоставлению Hibernate разработчики Java могут просматривать строки данных в таблице базы данных с точки зрения объектов Java.Многие таблицы в базе данных передают hbm После отображения файла конфигурации .xml он соответствует классу Java.
1.1.2 JPA
JPA (Java Persistence API) — это спецификация части сохраняемости в EJB 3.0. Его можно использовать как спецификацию сохраняемости отдельно от системы EJB.
1.1.3 Spring JDBC
Строго говоря, Spring JDBC не является инфраструктурой ORM. Он просто инкапсулирует собственный JDBC в очень тонком слое с использованием метода шаблона. Использование Spring JDBC может помочь разработчикам защитить создание объектов подключения к базе данных, объектов операторов, обработки исключений и дублирующего кода для транзакций. управления для повышения эффективности разработки.
1.1.4 MyBatis
Как и структура персистентности, описанная выше, MyBatis может помочь разработчикам защитить базовый повторяющийся собственный код JDBC. сложную логику, а также может реализовывать сопоставление «один к одному», «один ко многим», «многие ко многим» и двунаправленное отображение. По сравнению с Hibemate он легче и более управляем.
2. Общая архитектура MyBatis
MyBatis в целом разделен на три уровня, а именно уровень базовой поддержки, уровень основной обработки и уровень интерфейса, как показано на рисунке.
2.1 Уровень базовой поддержки
Базовый уровень поддержки содержит основные модули всего MyBatis. Эти модули обеспечивают хорошую поддержку функций основного уровня обработки. Ниже приводится краткое описание каждого модуля.
2.1.1 Модуль источника данных
Источник данных является одним из часто используемых компонентов в фактической разработке.Теперь источники данных с открытым исходным кодом предоставляют богатые функции, такие как функция пула соединений, определение статуса ссылки и т. д. Выбор компонентов источника данных с отличной производительностью может улучшить структуру ORM и даже всего приложения. Производительность очень важна. Сам MyBatis предоставляет соответствующую реализацию источника данных. Конечно, MyBatis также предоставляет интерфейс для интеграции со сторонними источниками данных интерфейса, и эти функции находятся в модуле источника данных.
2.1.2 Модуль управления транзакциями
MyBatis абстрагирует транзакции в базе данных и сам предоставляет соответствующий интерфейс транзакций и простую реализацию.Во многих сценариях MyBatis будет интегрироваться с инфраструктурой Spring, а инфраструктура Spring будет управлять конфигурацией, связанной с транзакциями.
2.1.3 Кэш-модуль
При оптимизации производительности системы оптимизация производительности базы данных является очень важной частью, а добавление кеша является одним из наиболее эффективных средств при оптимизации базы данных. Правильное и разумное использование кеша может перехватить некоторые запросы к базе данных на уровне кеша, что может снизить нагрузку на значительную часть базы данных.
MyBatis предоставляет кеш первого уровня и кеш второго уровня, и эти два уровня кешей зависят от реализации модуля кеша в базовом уровне поддержки Читатель должен обратить внимание на двухуровневый кеш, который поставляется с MyBatis. и все приложение выполняется в В JVM разделяется часть кучи памяти.Если объем данных в двух уровнях кэша велик, это может повлиять на работу других функций в системе.Поэтому, когда необходимо кэшировать большой объем данных, приоритет следует отдавать использованию Redis, Mongodb, Memcache и других продуктов кэширования.
2.1.4 Модуль привязки
При вызове соответствующего метода SqISession для выполнения операций с базой данных необходимо указать узел SQL, определенный в файле сопоставления.Если есть орфографическая ошибка, мы можем найти соответствующее исключение только во время выполнения. Для того, чтобы найти такую ошибку как можно раньше, MyBatis связывает определяемый пользователем интерфейс Mapper с файлом конфигурации сопоставления через модуль Binding, и система может завершить операцию базы данных, вызвав метод в пользовательском интерфейсе Mapper для выполнения. соответствующий оператор SQL, тем самым избегая вышеуказанных проблем. Стоит отметить, что разработчику не нужно писать реализацию кастомного интерфейса Mapper, MyBatis автоматически создаст для него динамический прокси-объект. В некоторых сценариях пользовательский интерфейс Mapper может полностью заменить файл конфигурации сопоставления, но более удобно записать определение некоторых правил сопоставления и операторов SQL в файл конфигурации сопоставления, например определение динамических операторов SQL.
2.1.5 Модуль отражения
Хотя функция отражения в Java является мощной, большинству разработчиков по-прежнему сложно писать высококачественный код отражения. В MyBatis специально предусмотрен модуль отражения, который выполняет ряд оптимизаций собственного отражения Java, таких как кэширование метаданных класса и повышение производительности отражения.
2.1.6 Модуль преобразования типов
MyBatis предоставляет механизм псевдонимов для упрощения конфигурационных файлов, что является одной из основных функций модуля преобразования типов. Другая функция модуля преобразования типов заключается в реализации преобразования между типами JDBC и типами Java, которое участвует в связывании фактических параметров для операторов SQL и отображении наборов результатов запроса. При связывании фактических параметров для оператора SQL данные преобразуются из типа Java в тип JDBC; при отображении набора результатов данные преобразуются из типа JDBC в тип Java.
2.1.7 Модуль журнала
В тестовой среде разработки или в производственной онлайн-среде очень важно состояние журнала во всей системе. Хорошая функция журнала может помочь разработчикам и тестировщикам быстро найти коды ошибок, а также может помочь эксплуатационному и обслуживающему персоналу быстро найти узкие места в производительности и т. д. В современном мире Java существует множество отличных фреймворков ведения журналов, таких как Log4j, Log4j2, slf4j и т. д. Как хорошо спроектированная среда, MyBatis не только предоставляет подробную информацию о выводе журнала, но также может интегрировать несколько сред журналов.Одной из основных функций его модуля журнала является интеграция сторонних сред журналов.
2.1.8 Модуль загрузки ресурсов
Модуль загрузки ресурсов в основном инкапсулирует загрузчик классов, определяет порядок использования классов и обеспечивает функцию загрузки файлов классов и других файлов ресурсов.
2.1.9 Модуль парсера
Модуль синтаксического анализатора в основном выполняет две функции: одна функция заключается в инкапсуляции XPath и обеспечивает поддержку разбора файла конфигурации mybatis-config.xml и сопоставления файла конфигурации при инициализации MyBatis; другая функция заключается в обработке символов-заполнителей в динамических операторах SQL. служба поддержки.
2.2 Базовый уровень обработки
Основной поток обработки MyBatis реализован на уровне базовой обработки MyBatis, включая инициализацию MyBatis и весь процесс завершения операции с базой данных, которые реализуются на основе базового уровня поддержки.
2.2.1 Разрешение конфигурации
Во время инициализации MyBatis будут загружены файл конфигурации mybatis-config.xml, файл конфигурации сопоставления и информация аннотации в интерфейсе Mapper, а проанализированная информация конфигурации сформирует соответствующий объект и сохранит его в объекте конфигурации. Например, узлы (т. е. правила отображения ResultSet) будут разобраны на объекты ResultMap, а определенные узлы (т. е. сопоставления атрибутов) будут разобраны на объекты ResultMapping. После этого используйте объект Configuration для создания объекта SqlSessionFactor. После инициализации MyBatis разработчики могут получить SqlSessionFactory посредством инициализации для создания объектов SqlSession и выполнения операций с базой данных.
2.2.2 Отображение параметров — анализ SQL
Соединение SQL-операторов воедино — громоздкий и подверженный ошибкам процесс.Чтобы избавить разработчиков от этой скучной работы, MyBatis реализует функцию динамических SQL-операторов и предоставляет различные узлы, соответствующие динамическим SQL-операторам, например, узлы, узел, узел, и т.п. Благодаря комбинированному использованию этих узлов разработчики могут писать динамические операторы SQL, удовлетворяющие практически всем потребностям. Модуль сценариев в MyBatis будет анализировать узел динамического SQL, определенный в файле сопоставления, в соответствии с фактическими параметрами, переданными пользователем, и формировать исполняемый оператор SQL для базы данных. После этого заполнители в операторе SQL будут обработаны, а фактические параметры, переданные пользователем, будут привязаны.
2.2.3 Выполнение SQL
Выполнение операторов SQL включает несколько компонентов, наиболее важными из которых являются Executor, StatementHandler, ParameterHandler и ResultSetHandler. Executor в основном отвечает за обслуживание кеша первого уровня и кеша второго уровня, а также предоставляет соответствующие операции для управления транзакциями. StatementHandler сначала выполняет привязку фактического параметра оператора SQL через ParamHandler, затем выполняет оператор SQL через объект java.sql.Statement и получает набор результатов и, наконец, завершает сопоставление набора результатов с помощью ResultSetHandler, получает объект результата. и возвращает его. На рисунке показан процесс выполнения sql:
2.2.4 Плагины
Хотя Mybatis обладает мощными функциями, он не может идеально подходить для всех сценариев применения, поэтому MyBatis предоставляет интерфейс подключаемых модулей, и мы можем расширять MyBatis, добавляя определяемые пользователем подключаемые модули. Пользовательские плагины также могут изменить поведение Mybatis по умолчанию, например, мы можем перехватывать операторы SQL и переписывать их. Поскольку определяемые пользователем подключаемые модули будут влиять на основное поведение MyBatis, перед использованием пользовательских подключаемых модулей разработчикам необходимо понять внутренние принципы MyBatis, чтобы создавать безопасные и эффективные подключаемые модули.
3. Введение в основной класс MyBatis
SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所需要的参数,
ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
TypeHandler 负责java数据类型和jdbc数据类型之间的映射和转换
MappedStatement MappedStatement维护了一条<select|update|delete|insert>节点的封装,
SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
BoundSql 表示动态生成的SQL语句以及相应的参数信息
Configuration MyBatis所有的配置信息都维持在Configuration对象之中。