Привет всем, я Сяо Цай, Сяо Цай, который хочет быть Цай Буцаем в интернет-индустрии. Она может быть мягкой или жесткой, как она мягкая, а белая проституция жесткая!Черт~ Не забудьте поставить мне тройку после прочтения!
Эта статья в основном знакомит
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 имеет функцию автоматического сопоставления.
демо
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")));
Существует приоритет между тремя методами настройки:
- Свойства, указанные в теле элемента properties, считываются первыми.
- Затем прочитайте файл конфигурации, прочитанный в каталоге ресурсов, перезаписав свойство чтения с тем же именем.
- Наконец, прочитайте свойство, переданное как параметр метода, перезаписав свойство чтения с тем же именем.
Итак, приоритеты следующие:
Передача параметров программы > файл конфигурации свойств > вложенный элемент свойства
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 {}
Настроенный путь сканирования пакета, без аннотаций@Alias
MyBatis также будет загружен, просто сказав, что он превратит первую букву имени вашего класса в нижний регистр, как псевдоним 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
Существует три вида конфигурации- JDBC, использующий JDBC для управления транзакциями
- УПРАВЛЯЕМЫЙ, используя контейнер для управления транзакциями
- Пользовательский, вы можете настроить метод управления транзакциями
-
dataSource: MyBatis предоставляет 3 способа реализации источников данных.
- UNPOOLED, несвязанный пул
- POOLED, пул соединений
- 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 открыт,Хорошая еда, студенты, которые не обратили внимания, не забудьте обратить внимание!