моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
《Теория MyBatis 40 вопросов》Содержит следующие 2 статьи:
Добавьте новый тег:keyProperty=“ID”
Вот и все.
<insert id="insert" useGeneratedKeys="true" keyProperty="userId" >
insert into user(user_name, user_password, create_time)
values(#{userName}, #{userPassword} , #{createTime, jdbcType=TIMESTAMP})
</insert>
(1) Путем запроса SQL Определите псевдоним имени поля в инструкции, чтобы псевдоним имени поля соответствовал имени атрибута класса сущности.
<select id="getOrder" parameterType="int" resultType="com.jourwon.pojo.Order">
select order_id id, order_no orderno, order_price price form orders
where order_id=#{id};
</select>
(2) Пройти <resultMap>
Чтобы сопоставить взаимно однозначное соответствие между именами полей и именами атрибутов класса сущности.
<select id="getOrder" parameterType="int" resultMap="orderResultMap">
select * from orders where order_id=#{id}
</select>
<resultMap type="com.jourwon.pojo.Order" id="orderResultMap">
<!-- 用id属性来映射主键字段 -->
<id property="id" column="order_id">
<!-- 用result属性来映射非主键字段,property为实体类属性名,column为数据库表中的属性 -->
<result property="orderno" column="order_no" />
<result property="price" column="order_price" />
</reslutMap>
(1) Наследование класса реализации интерфейса SqlSessionDaoSupport
: Чтобы использовать этот метод, вам нужно написать mapper
интерфейс,mapper
Класс реализации интерфейса,mapper.xml
документ.
sqlMapConfig.xml
Средняя конфигурацияmapper.xml
позиция.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper
интерфейс.SqlSessionDaoSupport
。mapper
Может использоваться в методахthis.getSqlSession()
Выполняйте добавление, удаление, изменение и проверку данных.spring
конфигурация.<bean id=" " class="mapper 接口的实现">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
(2) Использование org.mybatis.spring.mapper.MapperFactoryBean
。
sqlMapConfig.xml
Средняя конфигурацияmapper.xml
позиция, еслиmapper.xml
иmapper
Интерфейсы имеют одинаковые имена и находятся в одном каталоге, поэтому никакой настройки здесь не требуется.mapper
интерфейс.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper.xml
серединаnamespace
дляmapper
Адрес интерфейса.mapper
Имя метода в интерфейсе иmapper.xml
определено вstatement
изid
быть последовательным.Spring
определено в.<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mapper 接口地址" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
(3) Использование mapper
сканер.
mapper.xml
Написание документов.mapper.xml
серединаnamespace
дляmapper
Адрес интерфейса;mapper
Имя метода в интерфейсе иmapper.xml
определено вstatement
изid
быть последовательным;mapper.xml
иmapper
Если имя интерфейса остается неизменным, нет необходимостиsqlMapConfig.xml
Настроить в .mapper
интерфейс.Уведомлениеmapper.xml
имя файла иmapper
Имена интерфейсов должны быть согласованными и располагаться в одном каталоге.mapper
сканер.<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper 接口包地址"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
spring
Получить из контейнераmapper
объект реализации.Привязка интерфейса заключается в произвольном определении интерфейса в MyBatis, а затем объединении методов интерфейса с SQL. заявлениеПривязывая, мы можем напрямую вызвать метод интерфейса, поэтому по сравнению с оригиналом SqlSession
Предоставленные методы позволяют нам иметь более гибкий выбор и настройки.
Существует два способа реализации привязки интерфейса:
@Select
、@Update
Дождитесь привязки аннотаций, содержащих инструкции SQL;xml
Напишите SQL внутри для привязки. В этом случае вам нужно указать.xml
в файле сопоставленияnamespace
Должен быть полный путь к интерфейсу.Если оператор SQL относительно прост, используйте привязку аннотации. Если оператор SQL относительно сложен, используйте.xml
Переплет, общее использованиеxml
Есть еще привязки.mapper.xml
каждого sql, определенного вid
такой же.mapper.xml
каждого sql, определенного вparameterType
того же типа.mapper.xml
каждого sql, определенного вresultType
того же типа.Mapper.xml
в файлеnamespace
Это путь к классам интерфейса Mapper.proxy
объект, прокси-объектproxy
Вместо этого будут перехвачены и выполнены методы интерфейса.MappedStatement
представляет SQL, а затем возвращает результаты выполнения SQL.namespace
,Так id
Можно повторить, если не настроено;namespace
,Так id
ведь повториться невозможно;namespace
Не обязательно, просто лучшая практика.namespace + id
как есть Карта <Строка, Сопоставленное утверждение > Карта<String, MappedStatement>Мап<Св.рвг,Мастр.егСв.атемент> Ключ для использования, если его нетnamespace
, только оставшиеся id
,Так,id
Дублирование может привести к перезаписи данных друг друга.Понятноnamespace
,природа id
Ты можешь это повторить,namespace
другой,namespace + id
Естественно, оно другое.MyBatis инкапсулирует всю информацию о конфигурации XML в тяжеловесные объекты «все в одном». Configuration
внутренний. В файле сопоставления XML<parameterMap>
Тег будет проанализирован какParameterMap
объекта, каждый из его дочерних элементов будет анализироваться какParameterMapping
объект.<resultMap>
Тег будет проанализирован какResultMap
объекта, каждый из его дочерних элементов будет анализироваться какResultMapping
объект.Каждый<select>
、<insert>
、<update>
、<delete>
Теги будут анализироваться какMappedStatement
Object, SQL в теге будет анализироваться какBoundSql
объект.
<resultMap>
Теги определяют отношения сопоставления между именами столбцов и именами атрибутов объекта одно за другим.T_NAME AS NAME
, имя атрибута объекта обычно name
, в нижнем регистре, но имена столбцов не чувствительны к регистру. MyBatis будет игнорировать регистр имен столбцов и интеллектуально находить соответствующие имена атрибутов объекта. Вы даже можете написать. T_NAME AS NaMe
, MyBatis по-прежнему может работать нормально.Имея связь сопоставления между именами столбцов и именами атрибутов, MyBatis создает объекты посредством отражения и использует отражение для присвоения значений одному за другим свойствам объекта и возврата их для тех свойств, которые не могут найти взаимосвязь сопоставления. , задание не может быть выполнено.
Есть много других тегов, <resultMap>
、<parameterMap>
、<sql>
、<include>
、<selectKey>
плюс динамический SQL
9
9
9 теги:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
ждать.в<sql>
Для тегов фрагмента SQL передайте<include>
Теги представляют фрагменты SQL,<selectKey>
Создайте метки политики для первичных ключей, которые не поддерживают автоматическое приращение.
Хотя MyBatis анализирует файл сопоставления Xml по порядку, указанный тег B по-прежнему может быть определен где угодно, и MyBatis может правильно его идентифицировать.
Принцип заключается в том, что MyBatis анализирует тег A и обнаруживает, что тег A ссылается на тег B, но тег B не был проанализирован и еще не существует. В это время MyBatis пометит тег A как неразрешенный, а затем продолжит. для анализа оставшихся тегов, включая теги B. После анализа всех тегов MyBatis повторно анализирует теги, помеченные как неразрешенные. При анализе тега A тег B уже существует, и тег A можно анализировать обычным образом.
Может, не только может Один ко многим, один к одному,Достаточно хорошо Многие ко многим, многие к одному . Это достигается следующим образом:
MyBatis может сопоставлять классы перечисления. MyBatis может не только сопоставлять классы перечисления, но и сопоставлять любой объект со столбцом таблицы.Метод отображения является настраиваемымTypeHandler
,выполнить TypeHandler
изsetParameter()
иgetResult()
методы интерфейса.
TypeHandler
Он имеет две функции, одна из которых заключается в завершенииjavaType
кjdbcType
Конверсия, вторая завершенаjdbcType
кjavaType
Преобразование отражается какsetParameter()
иgetResult()
Эти два метода представляют собой установку параметров заполнителя вопросительного знака SQL и получение результатов запроса столбца соответственно.
Динамический SQL MyBatis позволяет нам записывать динамический SQL в виде тегов в файле сопоставления Xml для выполнения функций логического анализа и динамического объединения SQL, предоставляемых MyBatis.
9
9
9 Динамические теги SQL:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
。
Принцип его выполнения заключается в использовании OGNL
Вычислите значение выражения из объекта параметра SQL и динамически соедините SQL в соответствии со значением выражения, чтобы завершить функцию динамического SQL.
MyBatis использует RowBounds
Объект разбит на страницы, это дляResultSet
Подкачка памяти, выполняемая набором результатов, не является физической подкачкой. Вы можете напрямую записать параметры с помощью физической подкачки в SQL для выполнения функции физической подкачки или использовать подключаемый модуль подкачки для выполнения физической подкачки.
Основной принцип подключаемого модуля подкачки заключается в использовании интерфейса подключаемого модуля, предоставляемого MyBatis, для реализации специального подключаемого модуля, перехвата SQL, который будет выполняться методом перехвата подключаемого модуля, а затем переписывания SQL в соответствии с к dialect
Диалект, добавьте соответствующие операторы физического подкачки и параметры физического подкачки.
Пример:
select * from student
После перехвата SQL перепишите его так:
select t.* from (select * from student) t limit 0, 10
MyBatis может писать только для ParameterHandler
、ResultSetHandler
、StatementHandler
、Executor
этот
4
4
4 MyBatis, своего рода подключаемый модуль интерфейса, использует динамический прокси-сервер JDK для создания прокси-объектов для интерфейсов, которые необходимо перехватить для реализации функции перехвата метода интерфейса.
4
4
4 метод объекта интерфейса, он войдет в метод перехвата, а именноInvocationHandler
изinvoke()
Методы, конечно, будут перехватывать только те методы, которые вы указываете для перехвата.
Внедрить MyBatis Interceptor
Интерфейс и переопределениеintercept()
Method, затем напишите аннотации для плагина и укажите, какие методы какого интерфейса вы хотите перехватить. Помните, не забудьте настроить написанный вами плагин в файле конфигурации.
PerpetualCache
Локальный кеш HashMap, его областью хранения является сеанс, когда сеансflush
илиclose
После этого все кеши в сессии будут очищены, а кеш первого уровня будет включен по умолчанию.PerpetualCache
, хранилище HashMap, разница в том, что его область хранения Mapper
(Namespace
), а источник хранения можно настроить, например Ehcache
.Кэш второго уровня по умолчанию не включен. Чтобы включить кеш второго уровня, необходимо реализовать класс атрибута кэша второго уровня.Serializable
Интерфейс сериализации (может использоваться для сохранения состояния объекта), настраивается в его файле сопоставления.<cache/>
。C
/ U
/ D
После операции по умолчанию все файлы в этой областиselect
Кэш будетclear
。