1. -Resultmap
Сопоставленные XML -файлы SQL - это то, где расположены все операторы SQL. Вам необходимо определить рабочее пространство, которое обычно определяется как путь соответствующего класса интерфейса. После написания файла сопоставления операторов SQL вам необходимо ссылаться на его в тег Maper File Maperers Mybatis, например:
<mapper resource = "com/liming/manager/data/mappers/usermapper.xml"/> <mapper resource = "com/liming/manager/data/mappers/stactionmapper.xml"/> <mapper resource = "com/liming/manager/data/mappers/classmapper.xml"/> resource = "com/liming/manager/data/mappers/teachermapper.xml"/> </mappers>
Когда интерфейс Java находится в относительном пути к файлу XML, он не может быть объявлен в картинах файла конфигурации Mybatis.
SQL отображает некоторые элементарные элементы XML -файлов:
(1). Кэш настраивает кэш для данного шаблона (2). Cache-Ref относится к кэшу из другого шаблона (3). ResultMap Это самый сложный, но мощный элемент, который описывает, как загружать объекты из набора результатов (4). SQL SQL -блок, который может быть мультиплексирован другими операторами (5). Вставьте оператор вставки карты (6). ОБНОВЛЕНИЕ ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ МАПА (7). Удалить карту оператора Deleete (8). Выберите - оператор SELECT MAP SELECT
1.1 ResultMap
ResultMap - самый важный и мощный элемент в Mybatis. Вы можете сэкономить 90% вашего кода, чем вызов наборов результатов с помощью JDBC, или вы можете сделать много вещей, которые JDBC не поддерживает. Фактически, может потребоваться тысячи строк кода, чтобы написать сложное утверждение, эквивалентное отображению, аналогичному взаимодействию. Цель ResultMaps - это такое простое утверждение без ненужного картирования результатов. Более сложные утверждения не требуют ничего, кроме некоторых абсолютно необходимых заявлений для описания отношений.
Атрибут ResultMap: тип - это класс Java Entity; Идентификатор является идентификатором этой карты результата.
Картирование, которое может быть установлено:
(1). Конструктор используется для отражения результата для создания создания конструктора класса
а) параметр IDARG ID; Отметьте набор результатов как идентификатор для облегчения глобального вызова
б) Среднее отражение к конструктору
(2). Результат идентификатора идентификатора, отметьте набор результатов как идентификатор для облегчения глобального вызова
(3). Результат отражает нормальные результаты для Javabean Properties
(4). ассоциация комбинация сложных типов; Типы синтеза множественных результатов
A) Вложенные результаты сопоставления результатов.
(5). Сборная коллекция сложных типов
(6). Сбор с вложенными сборами результатов также можно ссылаться на другой
(7). Дискриминатор использует значение результата, чтобы решить, какой результат карты использовать
а) Случай случая случая случая результата карты некоторых основных значений
я. Вложенные отображения результатов Сценарий случая сам по себе является картой результата, поэтому он также может включать некоторые из тех же элементов или ссылаться на внешнюю карту результата.
1.1.1 ID, результат
Идентификатор и результат являются самыми простыми сопоставлением, ID является основным отображением ключей; Карты результатов из других базовых полей таблицы базы данных в атрибуты класса сущности.
Самый простой пример:
<resultmap type = "liming.student.manager.data.model.studententity" id = "studentResultmap"> <id property = "student" colun = "student_id" javatype = "string" jdbctype = "varchar"/> <result property = "student -name" column_name "javatype =" string "string" javatype = "string" javatype = "string" javatype = "string" javatype = "string" javatype = "string" javatype = " jdbctype = "varchar"/> <result property = "studentSex" colun = "student_sex" javatype = "int" jdbctype = "integer"/> <result property = "studentbirthday" column = "student_birthday" javatype = "date" jdbctype = "date"/> <recroed stuctdo "javatype =" date "jdbctype ="/result student "javatype =" date "jdbctype ="/result student "=" student " javatype = "byte []" jdbctype = "blob" typehandler = "org.apache.ibatis.type.blobtypehandler" /> < /resultmap>
Подробная информация о конфигурации свойств идентификатора и результата оператора:
свойство | описывать | |
свойство | Имя атрибута, которое должно быть сопоставлено с Javabean. | |
столбец | Имя столбца или псевдоним таблицы данных. | |
Джаватип | Полное имя класса или псевдоним типа. Если вы соответствуете Javabean, Mybatis обычно обнаруживает его сам по себе. Затем, если вы сопоставляетесь с Hashmap, вам необходимо указать цель, которую будет достигнуто Javatype. | |
jdbctype | Список типов, поддерживаемых таблицей данных. Это свойство полезно только для столбцов, которые разрешают пустые при вставке, обновлении или удалении. JDBC требует этого, но Mybatis нет. Если вы кодируете непосредственно для JDBC и у вас есть столбцы, которые разрешают пустые, вы хотите указать этот элемент. | |
Типхандлер | Используйте это свойство, чтобы переопределить процессор типа. Это значение может быть полным именем класса или псевдонимом типа. |
<resultmap type = "studialentity" id = "StudentResultmap"> <ventructor> <idarg javatype = "string" column = "student_id"/> <arg javatype = "string" colun = "student_name"/> <arg javatype = "string" contulty_sex "/> <arg javatype =" hate "stuctday_sex_sex"/> <arg javatype = "date"/"stuctday_sex"/> <arg javatyp </constructor> </resultmap>
Конечно, нам нужно определить метод конструктора класса Entity Studentity:
Public StudentEntity (String StudentId, String StudentName, String StudentSex, Date StudentBirthDay) {this.StudentId = StudentId; this.StudentName = StudentName; this.studentsex = StudentSex; this.StudentBirthDay = StudentBirthDay; } 1.1.3 Ассоциация
Элемент профсоюза используется для борьбы с отношениями «один на один». Вам необходимо указать свойства класса сопоставления Java Entity и Javatype атрибута (обычно Mybatis будет распознавать его самостоятельно). Имя столбца соответствующей таблицы базы данных. Если вы хотите переопределить, верните значение результата, вам необходимо указать TypeHandler.
Различные ситуации должны сообщить Mybatis, как загрузить союз. Mybatis может быть загружен двумя способами:
(1). Выберите: Выполните другой оператор SQL отображения, чтобы вернуть тип объекта Java. Более гибкий;
(2). Результаты: используйте вложенную карту результатов для обработки наборов результатов запросов через соединение и сопоставьте их с типами объектов Java.
Например, класс соответствует классовому учителю.
Во -первых, определите атрибуты учителя класса в классе:
частная учительница учителя;
1.1.3.1 Используйте Select для реализации Union
Пример: есть атрибут классового учителя в категории классов. Когда классовая организация получается посредством совместных усилий, классовая организация учителя отображается одновременно.
Это может непосредственно повторно использовать выбранные операторы, определенные в файле TeacherMapper.xml для запроса учителя в соответствии с его идентификатором. И вам не нужно изменять письменные операторы SQL, вам просто нужно напрямую изменить карту результата.
Часть содержимого файла classmapper.xml:
<resultmap type = "classentity" id = "classresultmap"> <id property = "classid" column = "class_id" /> <result property = "classname" column = "class_name" /> <result property = "classyear" column = "class_year" /> <ассоциация = "Учительский" column = "Sepecual_id". id = "getClassbyId" parameterType = "string" resultMap = "classResultmap"> select * from class_tbl ct, где ct.class_id = #{classid}; </select>Часть файла TeacherMapper.xml:
<resultMap type="TeacherEntity" id="teacherResultMap"> <id property="teacherID" column="TEACHER_ID" /> <result property="teacherName" column="TEACHER_NAME" /> <result property="teacherSex" column="TEACHER_SEX" /> <result property="teacherBirthday" column="TEACHER_BIRTHDAY"/> <result property="workDate" COLMAN = "Work_Date"/> <result Property = "konaddate" column = "work_date"/> <result property = "professional" column = "professional"/> </resultMap> <select id = "getTeacher" parameterType = "string" resultMap = "teacherResultmap"> select * из учителя_tbl tt, где tt.teacher_id = # @ wepormid at weportId
1.1.3.2 Используйте ResultMap для достижения союза
Та же функция, что и выше, - это запрашивать класс, а также запросить учителя класса. Вам необходимо добавить ResultMap (определяется в XML -файле учителя) в ассоциации, написать новый SQL (запросить таблицу таблицы классов, оставленная в таблице присоединения к учителю), и вам не нужно выбирать учитель.
Измените содержимое файла classmapper.xml:
<resultMap type="ClassEntity" id="classResultMap"> <id property="classID" column="CLASS_ID" /> <result property="className" column="CLASS_NAME" /> <result property="classYear" column="CLASS_YEAR" /> <association property="teacherEntity" column="TEACHER_ID" resultMap="teacherResultMap"/> </resultMap> <select id = "getClassAndteacher" parameterType = "string" resultMap = "classResultmap"> select * from class_tbl ct Left join ganiver_tbl tt на ct.teacher_id = tt.teacher_id, где ct.class_id = #{classid}; </select>Для TeacherResultMap, пожалуйста, смотрите вышеуказанный контент в файле TeacherMapper.xml.
1.1.4 Коллекция
Элементы агрегации используются для борьбы с «одно-ко многим» отношениям. Вам необходимо указать атрибуты класса Mapping Java Entity, Javatype атрибута (обычно ArrayList); тип объекта в списке объекта (класс Java Entity); имя столбца соответствующей таблицы базы данных;
Различные ситуации должны сообщить Mybatis, как загрузить агрегацию. Mybatis может быть загружен двумя способами:
(1). Выберите: Выполните другой оператор SQL отображения, чтобы вернуть тип объекта Java. Более гибкий;
(2). Результаты: используйте вложенную карту результатов для обработки наборов результатов запросов через соединение и сопоставьте их с типами объектов Java.
Например, у класса есть несколько студентов.
Сначала определите атрибуты списка студентов в классе:
Частный список <toodtantity> StudentList;
1.1.4.1 Используйте Select для реализации агрегации
Использование очень похоже на Союз, разница в том, что это один-один, поэтому в целом перечислены списки сопоставления. Таким образом, вам необходимо определить Javatype как ArrayList, вам также необходимо определить тип объекта в списке, и имя оператора выбора, которое должно быть установлено (следует отметить, что условие оператора SELECT для студента запроса здесь должно быть классической внешней ключом).
Часть содержимого файла classmapper.xml:
<resultMap type="ClassEntity" id="classResultMap"> <id property="classID" column="CLASS_ID" /> <result property="className" column="CLASS_NAME" /> <result property="classYear" column="CLASS_YEAR" /> <association property="teacherEntity" column="TEACHER_ID" select="getTeacher"/> <collection property="studentList" column="CLASS_ID" javatype = "arraylist" optype = "studivetinity" select = "getStudentbyClassid"/> </resultMap> <select id = "getClassbyId" parameterType = "string" resultMap = "classResultMap"> select * from class_tbl ct, где ct.class_id = #{classid};>; </select>Часть файла StudentMapper.xml:
<!-Свойства Java, определение картирования между полями таблицы баз данных-> <resultMap type = "studientEntity" id = "StudentResultmap"> <id Property = "student" colun = "student_id" /> <result property = "countalname" colun = "student_name" /> <result property = "student" column_se_sex " /> <result" /> <result = "studentsex" = "coold_sex" /> <result " />" result = "studentsex" = "student_sex" /> " column = "study_birthday" /> < /resultmap> <!-Запрос список студентов, основанный на идентификаторе класса-> <select id = "getStudentbyClassid" parameterType = "string" resultMap = "StudentResultMap"> <Cult Refid = "selectStudentall" /> где St.class_id = #{classid} < /select> < /select> < /select> < /select> < /select> 1.1.4.2 Используйте ResultMap для достижения агрегации
Используя ResultMap, вам необходимо переписать SQL, левую таблицу студентов.
<resultmap type = "classentity" id = "classresultmap"> <id property = "classid" column = "class_id" /> <result property = "classname" column = "class_name" /> <result property = "classyear" column = "class_year" /> <association property = "Учительский" column_id_id "collection =" ueceerresultmap " />>> jemportsult collection = inebresultmap" />>> "" stuctiredty "upecult" = "uepersultmap" />>> "" Учительский ». COLMAN = "class_id" javatype = "arraylist" oftype = "studietentity" resultmap = "StudentResultmap"/> </resultMap> <select id = "getClassAndteacherStudent" parameterType = "String" resultMap = "classResultmap"> select * from class_tbl nation_tbl st. st. st.clcl.clclmap "> select * from class_tbl ctbs_tblsl. Учитель_TBL TT на ct.teacher_id = tt.teacher_id, где ct.class_id = #{classid}; </select>
Для TeacherResultMap, пожалуйста, смотрите вышеуказанный контент в файле TeacherMapper.xml. Пожалуйста, смотрите StudentResultMap в вышеуказанном разделе файла StudentMapper.xml.
1.1.5 Дискриминатор дискриминатора <br /> Иногда отдельный запрос базы данных может вернуть результат множества различных (но, надеюсь, некоторых корреляционных) типов данных. Элемент дискриминатора предназначен для обработки этой ситуации, включая иерархию наследия классов. Дискриминатор очень легко понять, потому что он ведет себя так же, как операторы переключения в Java.
Дискриминатор определения определяет свойства столбцов и джаватипа. Колонны - это то, где Mybatis ищет значения сравнения. Javatype - это правильный тип, который будет использоваться для обеспечения эквивалентных тестов (хотя строки полезны во многих случаях).
Следующим примером является то, что, когда классика составляет 20000001, классический атрибут отображается.
<resultMap type = "liming.student.manager.data.model.studententity" id = "resultmap_studententity_discriminator"> <id property = "student" colun = "student_id" javatype = "string" jdbctype = "varchar"/> <reful = "student" columnaMe = "stuctdaMe =" jdbctepe = "varchar"/> <reful = "student" coundame = "jdbctepe =" varchar "/> <reful =" student "" jdbctype = "varch jdbctype = "varchar"/> <result property = "studentSex" colun = "student_sex" javatype = "int" jdbctype = "integer"/> <result property = "studentbirthday" column = "student_birthday" javatype = "date" jdbctype = "date"/> <recroed stuctdo "javatype =" date "jdbctype ="/result student "javatype =" date "jdbctype ="/result student "=" student " javatype = "byte []" jdbctype = "blob" typehandler = "org.apache.ibatis.type.blobtypehandler" /> <result property = "placeid" = "place_id" javatype = "string" jdbctype = "varchar" /> <discinator column = "class_id" jdbctype = "varchar" /> <discinator = "class_id" jdbctype = "varchar" /> <discinator = "jdbctype =" varchar " /> <discinator =" jdbctype = "varchch jdbctype = "varchar"> <case value = "20000001" refultype = "liming.student.manager.data.model.studententity"> <result property = "classid" column = "class_id" javatype = "String" jdbctype = "varchar"/> </case> </rescinator> </resturator> </resturator> </resturator> </resturator> </resturator> </resturator> </resturator> </resturator> </resture> </resture> </resturator> </resturator> </resturator> </resturator>
2. Добавить, удалить, изменить и проверять, параметры и кэш
2.1 Выберите
Элемент выбора очень прост. Например:
<!-- Query the student, according to id --> <select id="getStudent" parameterType="String" resultMap="studentResultMap"> SELECT ST.STUDENT_ID, ST.STUDENT_NAME, ST.STUDENT_SEX, ST.STUDENT_BIRTHDAY, ST.CLASS_ID FROM STUDENT_TBL ST WHERE ST.STUDENT_ID = #{studentID} </select> Это утверждение называется «GetStudent», имеет структурный параметр и возвращает объект типа студента.
Обратите внимание, что идентификация параметра: #{studentId}.
Выберите данные о конфигурации атрибута оператора:
| свойство | описывать | Получите значение | по умолчанию |
| идентификатор | В этом режиме можно ссылаться на уникальный идентификатор | ||
| параметрический | Полное имя класса или псевдоним для параметра, переданного этому утверждению | ||
| ResultType | Оператор возвращает все имя класса или псевдоним типа значения. Обратите внимание, что если это коллекция, то здесь заполнено все название класса или псевдоним элемента, а не название класса самой коллекции. (ResultType и ResultMap нельзя использовать вместе) | ||
| ResultMap | Условное имя внешнего результата. Картирование набора результатов - самая мощная особенность в Mybatis. Многие сложные отображения могут быть легко решены. (ResultType и ResultMap нельзя использовать вместе) | ||
| FlushCache | Если установить True, кэш будет очищен каждый раз, когда будет вызоваться оператором. Оператор SELECT установлен на False по умолчанию | Верно | Ложь | ЛОЖЬ |
| Usecache | Если установить в True, набор результатов оператора будет кэширован. Оператор SELECT установлен на FALSE по умолчанию TRUE | FALSE FALSE Тайм -аут устанавливает максимальное время, когда привод ждет ответа, прежде чем бросить исключение. По умолчанию нет значения, и диск решает себя. | Верно | Ложь | ЛОЖЬ |
| тайм -аут | Установите максимальное время, когда привод ждет ответа, прежде чем бросить исключение. По умолчанию будет установлено без значения, и сам диск решает | Положительное целое число | Не установлен |
| Получите | После настройки значения диск будет рад вернуться после того, как количество наборов результатов достигнет этого значения. По умолчанию не установлено, и диск решает себя. | Положительное целое число | Привести решение |
| ApportType atportionType | Заявление, подготовленный оператор, Callible Statement. Подготовленные заявления, выводящиеся заявления | ЗАЯВЛЕНИЕ ГОТОВЫЙ Каллируемый | ГОТОВЫЙ |
| ResultType | forward_only, scroll_sensity, scroll_insensity Только пересылка, чувствительная прокрутка, нечувствительная к случаю прокрутки | Forward_only Scroll_sensitive Scroll_insensity | Привести решение |
2.2 Вставка
Простая заявление вставки:
<!-INSERT STUNDE-> <INSERT ID = "INSERTSTUDENT" PARAMETERTYPE = "Студент"> INSERT INTTUDE_TBL (Студент_ID, Студент </insert>
INSERT может использовать автоматическую политику первичного ключа, поддерживаемую базой данных, установить useGeneratedKeys = «true», а затем установить KeyProperty в соответствующий столбец, и это сделано. Например, приведенная выше студентка использует автоматическую генерацию для генерации первичного ключа для столбца ID. Вы также можете использовать элемент SelectKey. В следующем примере используется база данных MySQL NextVal («Студент») в качестве пользовательской функции для генерации ключа.
<!-Вставьте автоматический первичный ключ студента-> <insert id = "insertStudentAutokey" parameterType = "studentEntity"> <selectKey keyProperty = "studentId" refultype = "string" order = "до"> select nextval ('student') </selectKey> Insert int outdent_tbl (student_id, student_nam ( #{studentId}, #{studentName}, #{studentSex}, #{studentBirthday}, #{classentity.classid}) </insert>| свойство | описывать | Получите значение | по умолчанию |
| идентификатор | В этом режиме можно ссылаться на уникальный идентификатор | ||
| параметрический | Полное имя класса или псевдоним для параметра, переданного этому утверждению | ||
| FlushCache | Если установить True, кэш будет очищен каждый раз, когда будет вызоваться оператором. Оператор SELECT установлен на False по умолчанию | Верно | Ложь | ЛОЖЬ |
| Usecache | Если установить в True, набор результатов оператора будет кэширован. Оператор SELECT установлен на FALSE по умолчанию TRUE | FALSE FALSE Тайм -аут устанавливает максимальное время, когда привод ждет ответа, прежде чем бросить исключение. По умолчанию нет значения, и диск решает себя. | Верно | Ложь | ЛОЖЬ |
| тайм -аут | Установите максимальное время, когда привод ждет ответа, прежде чем бросить исключение. По умолчанию будет установлено без значения, и сам диск решает | Положительное целое число | Не установлен |
| Получите | После настройки значения диск будет рад вернуться после того, как количество наборов результатов достигнет этого значения. По умолчанию не установлено, и диск решает себя. | Положительное целое число | Привести решение |
| ApportType atportionType | Заявление, подготовленный оператор, Callible Statement. Подготовленные заявления, выводящиеся заявления | ЗАЯВЛЕНИЕ ГОТОВЫЙ Каллируемый | ГОТОВЫЙ |
| Использование генерированных клейков | Скажите Mybatis использовать метод JDBC GetGeneratedKeys, чтобы получить первичный ключ, сгенерированный базой данных (MySQL, SQLServer и т. Д. Реляционные базы данных будут иметь поля, которые создаются автоматически). По умолчанию: ложь | Верно | Ложь | ЛОЖЬ |
| KeyProperty | Определите значение, которое будет возвращено ключом, который установлен в Mybatis в GetGeneratedKeys, или используйте SelectKey для оператора вставки Подэлемен. |
| свойство | описывать | Получите значение |
| KeyProperty | Атрибут, который должен быть установлен для результата, сгенерированного оператором SelectKey. | |
| ResultType | Генерировать типы результатов. Mybatis позволяет использовать основные типы данных, включая типы строк и INT. | |
| Заказ | Это может быть установлено до или после. Если он установлен ранее, он сначала выберет первичную клавишу, затем установите KeyProperty, а затем выполните оператор INSERT; Если он установлен на после, он сначала запустит оператор INSERT, а затем запустит оператор SELECTKEY, который обычно является механизмом последовательности, встроенным в оператор INSERT в базу данных внутренних вызовов (например, Oracle). | ДО ПОСЛЕ |
| ApportType atportionType | Как указано выше, Mybatis поддерживает заявление, подготовленные и вызов, соответствующие операторам, подготовленным ответам и CallableStatement. | ЗАЯВЛЕНИЕ ГОТОВЫЙ Каллируемый |
2.3 Обновление, удалить
Простое обновление:
<!-Обновление информации о студенте-> <Update id = "updateStudent" parameterType = "student"> Update student_tbl set student_tbl.student_name = #{studentName}, student_tbl.student_sex = #{student #{classentity.classid}, где study_tbl.student_id = #{studeId}; </update>Простой удаление:
<!-Удалить студент-> <delete id = "deletestudent" parametertype = "student"> delete from student_tbl, где student_id = #{student} </delete>
Обновление и удаление оператора сведения о конфигурации:
| свойство | описывать | Получите значение | по умолчанию |
| идентификатор | В этом режиме можно ссылаться на уникальный идентификатор | ||
| параметрический | Полное имя класса или псевдоним для параметра, переданного этому утверждению | ||
| FlushCache | Если установить True, кэш будет очищен каждый раз, когда будет вызоваться оператором. Оператор SELECT установлен на False по умолчанию | Верно | Ложь | ЛОЖЬ |
| Usecache | Если установить в True, набор результатов оператора будет кэширован. Оператор SELECT установлен на FALSE по умолчанию TRUE | FALSE FALSE Тайм -аут устанавливает максимальное время, когда привод ждет ответа, прежде чем бросить исключение. По умолчанию нет значения, и диск решает себя. | Верно | Ложь | ЛОЖЬ |
| тайм -аут | Установите максимальное время, когда привод ждет ответа, прежде чем бросить исключение. По умолчанию будет установлено без значения, и сам диск решает | Положительное целое число | Не установлен |
| Получите | После настройки значения диск будет рад вернуться после того, как количество наборов результатов достигнет этого значения. По умолчанию не установлено, и диск решает себя. | Положительное целое число | Привести решение |
| ApportType atportionType | Заявление, подготовленный оператор, Callible Statement. Подготовленные заявления, выводящиеся заявления | ЗАЯВЛЕНИЕ ГОТОВЫЙ Каллируемый | ГОТОВЫЙ |
<!-Multilex Multilex SQL оператор для запроса всех полей студенческой таблицы-> <sql id = "selectstudentall"> select st.student_id, st.student_name, st.student_sex, st.student_birthday, st.class_id от Student_tbl St </sql>
Таким образом, вы можете напрямую ссылаться и использовать его в операторе SELECT. Измените приведенное выше оператор SELECT на:
<!-Запросите ученика, согласно ID-> <SELECT ID = "GetStudent" parameterType = "string" resultMap = "StudentResultMap"> <включить refiD = "selectStudentall"/> где st.student_id = #{Student} </select> 2.5 Параметры
Параметры использовались во многих вышеупомянутых местах, таких как запрос, модификация, условия удаления, вставка, модифицированные данные и т. Д. Основные типы данных, которые может использовать Mybatis, и сложные типы данных Java.
Основные типы данных, строка, инт, дата и т. Д.
Однако использование основных типов данных может предоставить только один параметр, поэтому вам необходимо использовать класс Java Entity или тип карты в качестве типа параметра. Его атрибуты могут быть получены непосредственно через #{}.
2.5.1 Основные параметры типа
Поиск в списке студентов на основе времени поступления:
<!-Запросите список студентов, согласно временному времени поступления-> <select id = "getStudentListByDate" parameterType = "date" resultMap = "studentResultmap"> select * from student_tbl st join join_tbl ct на St.class_id = ct.class_id, где ct.class_year = #{classyear}; </select> Список <TradeTity> StudentList = StudentMapper.getStudentListbyClassyear (stringUtil.parse ("2007-9-1")); для (studenttity entitytemp: studentlist) {system.out.println (entitytemp.tostring ()); } 2.5.2 Параметры типа объекта Java
Поиск в списке студентов по имени и по полу. Используйте классы сущности в качестве параметров:
<!-Список студентов запроса, например, имя, = пол, тип объекта параметра-> <select id = "getStudentListhysentity" parameterType = "studentEntity" resultMap = "studentResultmap"> select * from student_tbl st, где St.Student_Name Like (concat ('%', #{student}), '%') и St.Stud) #stryse}), '%') и St.s. </select> Студенческая организация = новый студент (); Entity.SetStudentName ("li"); Entity.SetStudentSex («Мужчина»); Список <TradeTity> StudentList = StudentMapper.getStudentListhy Whouse (Entity); для (studenttity entitytemp: studentlist) {system.out.println (entitytemp.tostring ()); } 2.5.3 MAP Параметры
Поиск в списке студентов по имени и по полу. Используйте карту в качестве параметров:
<!-Список студентов запроса, = пол, тип карты параметров-> <select id = "getStudentListwheremap" parameterType = "map" resultMap = "studentResultmap"> select * from student_tbl st, где st.student_sex = #{sex} и st.student_sex = #{sex} </select> Map <string, string> map = new hashmap <string, string> (); map.put ("sex", "женщина"); map.put ("name", "li"); Список <TradeTity> StudentList = StudentMapper.getStudentListWhereMap (MAP); для (studenttity entitytemp: studentlist) {system.out.println (entitytemp.tostring ()); } 2.5.4 Реализация мультипараметров
Если вы хотите передать несколько параметров, вам нужно добавить аннотацию @param в параметры интерфейса. Приведен пример:
Написание интерфейса:
Общедоступный список <dpenceentity> getStudentListharephoreParam (@param (value = "name") String name, @param (value = "sex") строковой секс, @param (value = "birthday") дата рождения, @param (value = "classentity") класс класса);
Метод написания SQL:
<!-Список студентов запроса, например, имя, = гендер, = день рождения, = класс, многопараметрический метод-> <select id = "getStudentListharephoreParam" resultMap = "StudentResultMap"> select * from student_tbl St <где> <if test = "name! </if> <if test = "sex! = null и sex! = ''"> и St.student_sex = #{sex} </if> <if test = "День рождения! = #{classentity.classid} </if> </where> </select>Сделайте запрос:
Список <TradeTity> StudentList = StudentMapper.getStudentListhareParam (",", ", stringUtil.parse (" 1985-05-28 "), classmapper.getclassbyid (" 20000002 ")); для (студента EntityTemp: studentList) {System.Println (EntityTemp.toString (); 2.5.5 Метод замены строки
По умолчанию, используя #{} синтаксис приводит к созданию свойства MyBatis и использует параметр подготовленного стата (=?), Чтобы безопасно установить значение. Постарайтесь быть быстрым и безопасным, а также часто используются. Но иногда вы можете напрямую заменить неизменные строки на операторы SQL. Например, для заказа, вы можете использовать это: заказ по $ {columnname}, но Mybatis не будет изменять и обойти эту строку.
Примечание. Очень небезопасно получать и применять пользовательский ввод в неизменное оператор таким образом. Это позволит пользователю имплантировать коррупционное код, поэтому либо требует, чтобы поле не позволило клиенту войти, либо вы напрямую проверяете его легитимность.
2.6 Кэш Кэш
Mybatis содержит мощный, настраиваемый, настраиваемый механизм кеша. Реализация кэша Mybatis 3 много раз улучшалась, что является мощным и проще для настройки. По умолчанию кэш не включен. В дополнение к кэшу сессии, он может улучшить производительность и решить глобальные зависимости. Включите кеш 2 -го уровня, вам нужно только добавить простую строку в файл сопоставления SQL: <cache/>
Функция этого простого предложения заключается в следующем:
(1). Все выбранные операторы в файле отображения будут кэшированы.
(2). Все операторы вставки, обновления и удаления в файле отображения будут очищать кэш.
(3). Кэш перерабатывается с использованием алгоритма «редко используется недавно» (4). Кэш не будет очищен в установленное время.
(5). Каждый кэш может хранить 1024 списки или ссылки на объекты (независимо от результата запроса).
(6). Кэш будет использоваться в качестве кэша «чтения/записи», что означает, что полученный объект не общий и безопасен для вызывающего абонента. Там не будет других звонков (7). или потенциальные модификации в потоке.
Например, создайте кэш FIFO, чтобы очистить один раз за 60 секунд, хранить результаты объекта 512 или списки ссылок и вернуть результаты только для чтения. Потому что их изменение в неиспользованных потоках может привести к справочным конфликтам.
<cache eviction = "fifo" flushinterval = "60000" size = "512" readonly = "true"> </cache>
Вы также можете поделиться одной и той же конфигурацией кэша или экземпляра в разных пространствах имен. В этом случае вы можете использовать Cache-Ref для ссылки на другой кеш.
<cache-ref namespace = "com.liming.manager.data.studentmapper"/>
Сведения о конфигурации атрибута оператора кэша:
| свойство | иллюстрировать | Получите значение | значение по умолчанию |
| Выселение | Политика кэширования: LRU - недавнее наименее использование: удалить объекты, которые не использовались в последний длинный период. Fifi- Первое первое: вывести более ранний объект в очереди Мягкая - мягкая ссылка: на основе мягких эталонных правил, используйте механизм сбора мусора для удаления объектов Слабая - Слабая ссылка: используйте механизм сбора мусора, чтобы насильно удалять объекты на основе слабых правил справки | LRU Фифи МЯГКИЙ СЛАБЫЙ | LRU |
| Flushinterval | Представляет собой разумное миллисекундное общее время. По умолчанию не установлено, поэтому, если вы используете Uninterval Clearing, вы можете только вызовать операторы, чтобы очистить его. | Положительное целое число | Не установлен |
| размер | Размер кэшированного объекта | Положительное целое число | 1024 |
| Ридонли | Кэш только для чтения вернет один и тот же экземпляр всем вызывающим абонентам. Поэтому ни один из них не может быть изменен, что может значительно улучшить производительность. Записенный кеш пройдет через последовательность Чтобы вернуть копию кэшированного объекта. Это будет медленнее, но безопаснее. Таким образом, значение по умолчанию неверно. | Верно | Ложь | ЛОЖЬ |