Нелегко быть специалистом по инструментам, по крайней мере, как настроить MyBatis!

Java
Нелегко быть специалистом по инструментам, по крайней мере, как настроить MyBatis!

Привет всем, я Сяо Цай, Сяо Цай, который хочет быть Цай Буцаем в интернет-индустрии. Она может быть мягкой или жесткой, как она мягкая, а белая проституция жесткая!Черт~ Не забудьте поставить мне тройку после прочтения!

Эта статья в основном знакомитMyBatis中的配置详解

При необходимости вы можете обратиться к

Если это поможет, не забудьтекак

Официальный аккаунт WeChat открыт,Хорошая еда, студенты, которые не обратили внимания, не забудьте обратить внимание!

Справочная литература: [Объяснение технических принципов MyBatis и реального боя]

MyBatis стал самой популярной инфраструктурой уровня персистентности Java в Интернете с характеристиками меньшей инкапсуляции, высокой производительностью, оптимизацией и высокой гибкостью.

закуска

JDBC-программирование

Раньше программы на Java подключались через JDBC (Java Data Base Connectivity). Затем мы можем запрограммировать базу данных через SQL.

пример:

Основные шаги:

  • Зарегистрировать информацию о драйвере и базе данных
  • Управляйте соединением и откройте объект оператора.
  • Выполнить SQL через оператор и вернуть результат объекту Result.
  • Используйте ResultSet для чтения данных, а затем преобразуйте их в определенные объекты POJO с помощью кода.
  • закрыть ресурс подключения к базе данных

Так много сложных кодов, я считаю, что мы терпели в течение многих лет, не только увеличили нашу нагрузку, но и нам нужно работатьConnection,StatementиResultSetи другие предметы, и точно закройте его.

ORM-модель

так какJDBCПрограммирование всех неприятных, умных программистов скоро с некоторыми новыми методами на замену, так чтоORMмодель программирования появляется, но всеORMмодели основаны наJDBCинкапсулированный, разныйORMпара моделейJDBCПрочность пакета не одинакова.

ORM (Object Relational Mapping) объектно-реляционное сопоставлениеКороче говоря, это модель отношения сопоставления между таблицами базы данных и простыми объектами Java (POJO), которая в основном решает взаимное сопоставление между данными базы данных и объектами POJO, а затем мы можем легко и быстро преобразовать таблицы базы данных через этот уровень отношения сопоставления. , Данные преобразуются в POJO, чтобы программистам было легче понимать и применять Java-программы.

Hibernate

HibernateКак только он вышла, он стал предпочтительной моделью ORM в мире Java, которая основана на прямых сопоставленных отношениях между моделями Pojos и баз данных.

HibernateОн основан на сопоставлении нескольких POJO с таблицами базы данных с помощью правил, предоставляемых XML-файлами сопоставления (или аннотациями). Мы можем напрямую манипулировать данными базы данных через POJO, который обеспечивает полную модель отображения таблиц. пройти черезHibernateфайл конфигурации, нам больше не нужно писать язык SQL, нам нужно только использоватьHQL(Hibernate Query Language) подойдет.

hbm.xml:

Этот XML-файл описывает отношение сопоставления между объектами POJO и таблицами базы данных. Благодаря этому конфигурационному файлу мы можем работать с записями базы данных практически без написания SQL. Вы довольны?

Каждому POJO соответствует hbm.xml , а затем мы передаем глобальный файл конфигурацииcfg.xmlрегистр.

hibernate.cfg.xml:

Через этот файл конфигурации создается фабричный объект Hibernate (SessionFactory), который используется как глобальный объект для создания интерфейса сеанса, после чего можно управлять базой данных.

HibernateUtil.class:

HibernateDemo.class:

Хорошая новость в том, что нам удалось получить результат, а объем кода уже не тотJDBCНастолько много, преимущества, принесенные нам, также очевидны:

  • Устраняет правила отображения для кода, все это разделено наXMLилианнотацияЗайти внутрь конфигурации

  • Больше не нужно управлять соединениями с базой данных, это также настраивается вXMLв

  • На сеансе не используйте несколько объектов, просто работайтеSessionобъект

  • Для закрытия ресурса нужно закрыть только одинSessionможет

После настройки файла сопоставления и файла подключения к базе данных Hibernate может работать через сеанс, избавляться от большого количества кода, повышать эффективность программирования и быть счастливым программистом.

но! Все не идеально, люди непостоянны, и вам это через долгое время надоест, правда? В самом делеотморозок. После его использования мы обнаружили, что Hibernate Shields SQL и может только сопоставить всю таблицу. Было бы хорошо, если в таблице не так много, но если таблица имеет десятки до сотен полей (Какие?不可能有这么多!不好意思,那是你没见过~), и вам нужно получить только два или три поля этой таблицы, не принесет ли это много хлопот, если это большая система веб-сайтов, вы так сильно тратите пропускную способность, разве это не круто?

Таким образом, если обобщить недостатки Hibernate, то они следующие:

  • Неудобство, вызванное полным сопоставлением таблиц
  • Невозможно собрать другой SQL на основе разных условий
  • Плохая поддержка многотабличных ассоциаций и сложных SQL-запросов, вам нужно написать свой собственный SQL, а после возврата вам нужно самостоятельно собрать данные в POJO.
  • Не может эффективно поддерживать хранимые процедуры
  • Хотя HQL также поддерживается, производительность низкая, а SQL невозможно оптимизировать.

Легко ли быть портировщиком разработки?Наконец-то я обнаружил, что Hibernate может заменить JDBC.Не ожидал, что столько минусов! Это не выход Mybatis

MyBatis

Наконец добрался до сегодняшнего главного героя,MyBatis. Чтобы устранить недостатки Hibernate, была создана полуавтоматическая структура картирования Mybatis. Причина, по которой он является полуавтоматическим, заключается в том, что он требует ручного сопоставления для предоставления POJO, SQL и отношений сопоставления, в то время как Hibernate для полного сопоставления таблиц должен предоставлять только POJO и отношения сопоставления. Добавление отношений сопоставления SQL не означает, что оно усложняется, наоборот, оно становится намного более гибким.

вводить

Предшественником MyBatis является iBatis, проект Apache с открытым исходным кодом, который в 2010 году был перенесен на google.code фондом программного обеспечения apache и переименован в Mybatis. Мигрировал на Github в ноябре 2013 года, поэтому Mybatis в настоящее время поддерживается Github.

MyBatisВключает в себя три части:

  • SQL
  • Сопоставление правил
  • POJO

Мы можем написать свой собственный SQL (динамическая конфигурация), определить правила сопоставления SQL через конфигурацию, а также поддерживать хранимые процедуры, что более удобно для некоторых сложных SQL-запросов, требующих оптимизированной производительности. MyBatis может делать почти все, что может JDBC, и MyBatis имеет функцию автоматического сопоставления.

Mybatis 和 ORM 映射模型

демо

student.xml:

mybatis_config.xml:

MybatisUtil.class:

MybatisDemo:

Это завершает использование MyBatis, SQL и правила сопоставления выполняются в отдельном XML внутри, более гибком, мы можем свободно писать SQL, определять правила сопоставления.

Базовый состав Mybatis

  • SqlSessionFactoryBuilder(Конструктор): он будет генерировать SqlSessionFactory (заводской интерфейс) на основе информации о конфигурации или кода.
  • SqlSessionFactory: полагаться на фабрику для создания SqlSession (сеанса)
  • SqlSession: это интерфейс, который может либо отправлять SQL для выполнения и возвращать результаты, либо получать Mapper
  • SQL Mapper: он состоит из интерфейса Java и XML-файла (или аннотации), который должен предоставить соответствующий SQL и отношения отображения, и отвечает за отправку SQL для выполнения и возврат результата.

Подробное объяснение файла конфигурации жестких овощей

Все вышеперечисленные теги являются элементами конфигурации MyBatis.

1. Метка свойств

propertiesэто элемент атрибута конфигурации, который мы можем использовать в контексте файла конфигурации

Поддержка MyBatis3Методы настройки:

  • дочерний элемент свойства
  • файл конфигурации свойств
  • Передача параметров программы

1. дочерний элемент свойства

<properties type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
</properties>

выше${driber},${url }Эти значения мы можем передатьpropertiesФайл конфигурации используется для настройки значения атрибута, чтобы его можно было повторно использовать и было удобно изменять его единообразно.

2. файл jdbc.properties

#mysql驱动
jdbc.driver=com.mysql.cj.jdbc.Driver
#数据库地址
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
#用户名
jdbc.username=root
#密码
jdbc.password=123456

потомjdbc.propertiesФайлresourceкаталог, а затем импортируйте его с помощью следующей конфигурации

<properties resource="jdbc.properties"/>

3. Передача параметров программы

В реальной разработке мы иногдаusernameиpasswordШифрование, то перед созданием SqlSessionFactory нам нужно преобразовать его в открытый текст следующим образом:

InputStream cfgIs = Resources.getResourceAsStream("mybatis_config.xml");
Reader cfgRd = new InputStreamReader(cfgIs);
Properties properties = new Properties();
properties.load(cfgRd);
//解密
properties.setProperty("username",decode(properties.getProperty("username")));
properties.setProperty("password",decode(properties.getProperty("password")));

Существует приоритет между тремя методами настройки:

  1. Свойства, указанные в теле элемента properties, считываются первыми.
  2. Затем прочитайте файл конфигурации, прочитанный в каталоге ресурсов, перезаписав свойство чтения с тем же именем.
  3. Наконец, прочитайте свойство, переданное как параметр метода, перезаписав свойство чтения с тем же именем.

Итак, приоритеты следующие:

Передача параметров программы > файл конфигурации свойств > вложенный элемент свойства

2. Вкладка настроек

Настройка (Settings) самая сложная в конфигурации MyBatis, даже если не утилизировать, может работать MyBatis

Вот некоторые общие настройки

Настройка параметров описывать По умолчанию
pecacheEnabled Глобальный переключатель кэша, влияющий на все сопоставления, настроенные в true
lazyLoadingEnabled Глобальный переключатель для отложенной загрузки. Если этот параметр включен, все связанные объекты будут загружаться отложенно. В определенной ассоциации состояние переключателя элемента можно переопределить с помощью атрибута fetchType. false
aggressiveLazyLoading Когда включено, вызовы произвольных ленивых свойств вызывают полную загрузку объектов с ленивыми свойствами, в противном случае каждое свойство загружается по запросу. true
userColumnLabel Используйте метку столбца вместо имени столбца true
useGeneratedKeys Разрешить поддержку JDBC автоматически создавать первичные ключи, если установлено значение true, этот параметр вынужден автоматически генерировать первичные ключи true
autoMappingBehavior Укажите, как MyBatis должен автоматически сопоставлять столбцы с полями или свойствами;

NONE означает отмену автоматического сопоставления;

PARTIAL будет автоматически отображать только наборы результатов, которые не определяют сопоставления вложенных наборов результатов;

FULL автоматически отображает произвольно сложные наборы результатов (вложенные или нет)
PARTIAL
defaultExecutorType Настройте исполнителя по умолчанию

SIMPLE — обычный исполнитель;

Исполнитель повторного использования повторно использует подготовленные заявления

Исполнитель BATCH повторно использует операторы и выполняет пакетные обновления.
SIMPLE
safeRowBoundsEnabled Разрешить подкачку во вложенных операторах (RowBounds) false
mapUnderscoreToCamelCase Включить ли автоматическое сопоставление правил именования регистров верблюдов false
logPrefix Указывает префикс, который MyBatis добавляет к имени журнала. нет настройки
logImpl Укажите конкретную реализацию журнала, используемого MyBatis. Если не указано, он автоматически найдет (SLF4J, LOG4J, LOG4J2...) нет настройки
proxyFactory Укажите прокси-инструмент (CGLIB, JAVASSIST), используемый MyBatis для создания объектов с возможностью отложенной загрузки. JAVASSIST выше версии 3.3.0, иначе CGLIB

Вперемежку с моментами куриного супа:

Варка хорошего вина занимает годы, приготовление пищи требует времени, подождите немного, больше вкусностей и больше удовольствия.

​ --- Меню ресторана Antoine в Новом Орлеане

Три, Teaseialiase этикетки

Псевдоним (typeAliases) — это заданное имя.Когда мы сталкиваемся с классом, полное имя которого слишком длинное, мы можем обратиться к нему с помощью короткого имени, которое мы можем использовать в контексте MyBatis.

<typeAliases>
    <typeAlias type="cbuc.ssm.entity.Student" alias="student"/>
    <!-- 通过自动扫描包自定义别名-->
    <!--<package name="cbuc.ssm.entity"/>-->
</typeAliases>

Используя сканирование пакетов для настройки использования псевдонимов, мы можем использовать@AliasАннотировать пользовательские псевдонимы

@Alias("student")
public class Student {}

Настроенный путь сканирования пакета, без аннотаций@AliasMyBatis также будет загружен, просто сказав, что он превратит первую букву имени вашего класса в нижний регистр, как псевдоним MyBatis, обратите внимание на одноименную сцену!

В-четвертых, тег typeHandler

Они определяются системой MyBatis и могут применяться к большинству сценариев.Если вы сталкиваетесь с типами, которые невозможно обработать, MyBatis также поддерживает настройку. нам просто нужно реализоватьTypeHandlerинтерфейс или наследованиеBaseTypeHandlerкласс, который имеет4Нам также необходимо реализовать эти четыре абстрактных метода, среди которых:

  • setParameter: параметр объекта PreparedStatement, который позволяет нам самим устанавливать правила трансформации
  • getResult: он разделен на ResultSet для использования имени столбца (columnName) или использования нижнего индекса столбца (columnIndex) для получения данных результата, что также включает использование CallableStatement (хранимая процедура) для получения результата.

Пример использования:

MyStringHandler.class

Прописать в конфигурационном файле:

<typeHandlers>
    <typeHandler javaType="string" jdbcType="VARCHAR" handler="cbuc.ssm.custom.MyStringTypeHandler"/>
</typeHandlers>

Когда параметр java имеет тип String, мы можем использоватьMyStringTypeHandlerдля обработки, а затем мы должны сами сказать MyBatis, что нам не нужен ваш typeHander, нам нужно использовать свой собственный typeHandler. существуетstudent.xmlизменено следующим образом:

student.xml:

выходной результат

мы представилиresultMap, который предоставляет правила сопоставления, которые мы можем использовать через 3 сопоставленияtypeHandler:

  • существуетresultMapсерединаresultопределениеjdbcTypeиjavaType, если и typeHandlers в файле конфигурации

соответствует, MyBatis будет использовать наш пользовательский typeHandler,необходимо определить в конфигурации

  • Укажите конкретный typeHandler в параметре,не нужно определять в конфигурации
  • Определите конкретный typeHandler непосредственно в наборе сопоставления,Не задавать в конфигурации

5. Метка ObjectFactory

При строительстве набора результатов MyBatis возвращается, будет использоватьObjectFactory(Фабрика объектов) для создания POJO. Так что мы также можем настроитьObjectFactoryпостроить POJO. Примеры следующие:

MyObjectFactory.class:

mybatis_config.xml:

<objectFactory type="cbuc.ssm.custom.MyObjectFactory">
    <property name="name" value="MyObjectFactory"/>
</objectFactory>

выходной результат:

мы можемcreateиsetPropertiesОпределите собственную логику обработки в методе

6. Метка среды

Несколько источников данных (dataSource) могут быть зарегистрированы в фактической среде конфигурации.

  • в окружающей средеdefaultиспользуется для указания, какой источник данных настроен по умолчанию

  • Элемент среды — это начало конфигурации источника данных, а id — это идентификатор источника данных.

  • transactionManager — это транзакция базы данных конфигурации, гдеtypeСуществует три вида конфигурации

    1. JDBC, использующий JDBC для управления транзакциями
    2. УПРАВЛЯЕМЫЙ, используя контейнер для управления транзакциями
    3. Пользовательский, вы можете настроить метод управления транзакциями
  • dataSource: MyBatis предоставляет 3 способа реализации источников данных.

    1. UNPOOLED, несвязанный пул
    2. POOLED, пул соединений
    3. JNDI

Семь, лейбл mppers

Mapper является основным компонентом MyBatis.

При написании XML POJO мы видели объявление пространства имен сопоставителем, которое соответствует полному пути интерфейса.

<mapper namespace="cbuc.ssm.mapper.StudentMapper"></mapper>

В конфигурационном файле также есть параметры маппера, а ввести маппер можно несколькими способами:

  • импортировать маппер с именем пакета
<mappers>
    <package name="cbuc.ssm.mapper"/>
</mappers>
  • Импорт картографа с путем к файлу
<mappers>
    <mapper resource="mapper/student.xml"/>
</mappers>
  • Зарегистрируйте представленный класс картографа с помощью
<mappers>
    <mapper class="cbuc.ssm.mapper.StudentMapper"/>
</mappers>
  • Представляем карту с абсолютным путем XML
<mappers>
    <mapper url="file://cbuc/ssm/mapper/mybatis_config.xml"/>
</mappers>

Картограф — самый мощный инструмент в MyBatis, а также инструмент, который мы используем в MyBatis чаще всего. В следующем сообщении в блоге объясняется, что такое картограф. Заинтересованные студенты, пожалуйста, обратите внимание на посуду!

看完不赞,都是坏蛋

Если вы будете усердно работать сегодня, завтра вы сможете сказать на одну вещь меньше, чтобы попросить о помощи!

Я Сяо Цай, человек, который учится у вас.💋

Официальный аккаунт WeChat открыт,Хорошая еда, студенты, которые не обратили внимания, не забудьте обратить внимание!