В этой статье я представлю структуры принципов Mybatis и вступительной программы Mybatis, чтобы реализовать добавление, удаление, удаление, модификацию и проверку пользователя. Каковы его преимущества и недостатки, а какие существуют отношения между мибатисом и гибернатом. Я надеюсь, что это будет полезно для моих друзей. Если есть какие -либо недостатки, пожалуйста, дайте мне несколько советов.
Что такое mybatis?
Mybatis - это проект с открытым исходным кодом Apache. В 2010 году этот проект был перенесен от Apache Software Foundation в Google Code и был переименован в Mybatis. Мигрировал в GitHub в ноябре 2013 года.
Mybatis - это отличная структура устойчивости, которая поддерживает индивидуальные SQL, сохраненные процедуры и расширенное картирование. Mybatis избегает почти всех кода JDBC и параметров ручного настройки и уничтожения наборов результатов. Mybatis использует простые XML или аннотации для настройки и карты примитивов, отображения интерфейсов и Java Pojos (простые старые объекты Java) в записи в базе данных. Проще говоря, Mybatis - это постоянная структура слоя. Mybatis позволяет программе сосредоточиться на SQL и свободно и гибко генерировать операторы SQL, которые отвечают потребностям с помощью метода отображения, предоставленного Mybatis. Mybatis может автоматически вводить карту входных параметров для подготовки к подготовке и гибко отобразить результат запроса в объекты Java.
Далее, давайте поймем принцип структуры Mybatis с помощью картинки:
ОБЪЯСНЕНИЕ АРХИТЕКТУРЫ ОБРАЗОВАНИЯ:
а Загрузка файла конфигурации: конфигурация поступает из двух мест, одно - файл конфигурации, а другой - аннотация кода Java. Информация о конфигурации SQL загружается в объекты MapedStatement (включая конфигурацию сопоставления параметров, выполненные, выполненные операторы SQL и конфигурацию отображения результатов) и хранятся в памяти.
беременный SQL SAINING: Когда уровень интерфейса API получает запрос вызова, он получит идентификатор входящего SLQ и входящего объекта (может быть карта или базовый тип данных). Mybatis найдет соответствующее отображение Statatement на основе идентификатора SQL, а затем проанализирует сопоставление на основе входящего объекта параметра. После анализа вы можете получить операторы SQL и параметры, которые будут выполнены в конце.
в Выполнение SQL: возьмите окончательный SQL и параметры в базу данных для выполнения и получите результаты работы базы данных.
дюймовый Отображение результатов: преобразовать результаты рабочей базы данных в соответствии с конфигурацией сопоставления, которая может быть преобразована в HashMap, Javabean или Basic Data Type, и вернуть конечный результат.
Mybatis начинается анализ программы программы
Далее, редактор представит конкретные требования в сочетании с демонстрацией, а требования следующие:
Запрос информации пользователя на основе идентификатора пользователя;
Запрос информации пользователя нечетливая на основе имени пользователя;
Добавить, удалить и обновить пользователей.
Первый шаг - создать различные пакеты и классы, каталог проектов выглядит следующим образом:
Второй шаг - написать контент в sqlmapconfig.xml и настройка среды работающего, источника данных, транзакций и т. Д. Мибати. Код выглядит так:
<span style = "font-family: comic sans ms; font-size: 18px;"> <? xml version = "1.0" Encoding = "UTF-8"?> <! Конфигурация Doctype public "-// mybatis.org//dtd config 3.0 // en" «http://mybatis.org/dtd/mybatis-3-config.dtd»> <Конфигурация> <!-Конфигурация среды будет отменена после интегрирования пружины-> <среда default = "Разработка"> <!-jdbc Management, управление транзакцией, управление транзакциями-MyBatis-> <TransactionManager Type = "JDBC"/"/"/"/"/"/"/"JDBC-Transaction Control IS MYBATIS-> <TransactionManager =" jdbc? Управляется mybatis -> <dataSource type = "Opled"> <name = "driver" value = "$ {jdbc.driver}"/> <name = "url" value = "$ {jdbc.url}"/> <name = "value" value = "$ {jdbc.usernam value = "$ {jdbc.password}"/> </dataSource> </erviness> <!-Загрузка файла карты-> <Mappers> resource = "sqlmap/user.xml"/> </mappers> </configuration> </span>Третий шаг - написать контент в user.java, как показано ниже:
<span style = "font-family: comic sans ms; font-size: 18px;"> package cn.itcast.mybatis.po; импортировать java.util.date; /** * * <p> Название: пользователь </p> * <p> Описание: пользователь po </p> * @author ding guohua * @date 31 июля 2016 г. 15:39:04 * @version 1.0 */public class user {// Имя атрибута соответствует Fields таблицы базы базы Private ID; private String username; // Имя пользователя Private String Sex; // Гендерная частная дата день рождения; // день рождения частный строковый адрес; // адрес public int getId () {return Id; } public void setId (int id) {this.id = id; } public String getUsername () {return username; } public void setUsername (string username) {this.username = username; } public String getSex () {return Sex; } public void setsex (строка Sex) {this.sex = sex; } public date getBirthDay () {return Birthday; } public void setBirthDay (дата рождения) {this.BirthDay = день рождения; } public String getAddress () {return Adder; } public void setAddress (строковый адрес) {this.address = address; } @Override public String toString () {return "user [id =" + id + ", username =" + username + ", sex =" + sex + ", день рождения =" + день рождения + ", address =" + address + "]"; }} </span>Шаг 4: Для реализации функции добавления, удаления, изменения и поиска сначала напишите контент в user.xml, как показано ниже:
<span style = "font-family: comic sans ms; font-size: 18px;"> <? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- The namespace namespace is the function of classifying the SQL management and understanding the isolation of SQL Note: using the mapper proxy method to develop, namespace plays a special and important role --> <mapper namespace="test"> <!-- Configure many SQL statements in the mapping file -> <!-Требования: Запросите записи пользовательской таблицы через ID-> <!-Идентификатор запроса базы данных execute: Определите SQL в файле отображения инкапсуляции оператора SQL в объект отображения StateTatement, поэтому идентификатор называется ID ParameterTyp: Укажите тип входного параметра, укажите тип int #{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ @ weps wepers wepertif Ввод, и имя параметра является идентификатором. Если входной параметр является простым типом, имя параметра в #{} может быть произвольным и может быть значением или другими именами ResultType: укажите тип отображаемого объекта Java вывода результата SQL и выберите «Укажите ровнотип» для представления объекта Java, отображаемого с одной записи. -> <SELECT ID = "findUSERBYID" parameterType = "int" recouttype = "cn.itcast.mybatis.po.user"> select * из пользователя, где id =#{value} </select> <!-Fuzzy Query Information на основе на основе пользовательского имени, многочисленные Resultypes: Specked It-ine-yte-in-spected it spected it spected it spected it spected it spected it spected it spected it spected it spected it spected it spected it spected it-spected it spected hyped infied Строка SQL и сплачивать содержание полученных параметров в SQL без каких -либо изменений. Используйте $ {} для сплайсинга SQL, что приводит к тому, что SQL вводит $ {value}: для получения содержания входных параметров. Если входящий тип является простым типом, вы можете использовать значение только в $ {}-> <select id = "finduserbyname" parametertype = "java.lang.string" resultype = "cn.itcast.mybatis.po.user"> select * из пользователя, где username like '%{value}%' </select> <! POJO (включая информацию пользователя) Укажите имя атрибута POJO в #{}, получить значение атрибута объекта POJO, Mybatis получает значение атрибута объекта через ognl-> <insert id = "insertUser" Parametertype = "cn.itcast.mybatis.po.user"> <! FART_INSERT_ID (): Получите записанное значение первичного ключа, просто вставленное в него, которое применимо только к самостоятельному включению первичного ключа: установите значение первичного ключа запроса на свойство объекта, указанного по параметрам: выберите FAND_INSERT_ID () Орден выполнение, по сравнению с оператором insert, его Орден на выполнение. keyProperty = "id" order = "after" refultype = "java.lang.integer"> select fast_inser_id () </selectKey> INSERT в пользователь (имя пользователя, день рождения, пол, адрес) Значение (#{username},#{день рождения},#{sex},#{адрес} <!- Использование mySQL's function. First, get the primary key through uuid, set the primary key to the id attribute of the user object, and then secondly, when insert is executed, remove the id attribute value from the user object--> <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> SELECT uuid() </selectKey> insert into user(username,birthday,sex,address) value (#{username},#{день рождения},#{sex},#{адрес}); </insert> <!-Чтобы удалить пользователя, чтобы удалить пользователя на основе идентификатора, вам необходимо ввести значение идентификатора-> <delete id = "deleteUser" parametertype = "java.lang.integer"> Удалить из пользователя, где идентификатор =#{id} </delete> <! Определяет объект пользователя, включая идентификатор и обновление информации. ПРИМЕЧАНИЕ. </mapper> </span>Шаг 5: Напишите конкретный метод следующим образом:
<span style = "font-family: comic sans ms; font-size: 18px;"> package cn.itcast.mybatis.first; импортировать java.io.ioexception; импортировать java.io.inputstream; импортировать java.util.date; импортировать java.util.list; Импорт org.apache.ibatis.io.resources; Импорт org.apache.ibatis.session.sqlsessionFactory; Импорт org.apache.ibatis.session.sqlsessionFactoryBuilder; Импорт org.junit.test; Импорт cn.itcast.mybatis.po.user; открытый класс mybatisfirst {// Query пользовательская информация на основе идентификатора и получить результат записи @test public void finduserbyidtest () Throws ioexception {// mybatis configuration file string resource = "sqlmapconfig.xml"; // Получение потока конфигурации ввода inputStream = resourds.getResourceasStream (resource); // Создать заводскую фабрику и пройти в файле конфигурации MyBatis SQLSessionFactory SQLSessionFactory = new SQLSessionFactoryBuilder () .build (inputStream); // Получить SQLSession через завод SQLSession SQLSession = SQLSessionFactory.Opensession (); // Работать с базой данных через SQLSession // Первый параметр: идентификатор оператора в файле карты равен = namespace+ "."+ ID оператора // Второй параметр: Укажите параметр типа параметрического типа, совпадающего в файле карты // sqlSession.selectone Результаты inbeertepe use use use use use use ucretory uctremore uckertore quepertore quepertone quepertone quepertone quepertone ucepertone. sqlsession.selectone ("test.finduserbyid", 1); System.out.println (пользователь); // выпустить ресурс sqlsession.close (); } // Нечеткий запрос список пользователей на основе имени пользователя @Test public void findUserByneStest () Throws IOException {// mybatis configuration file string resource = "sqlmapconfig.xml"; // Получить файл конфигурации inputStream inputStream = resourds.getResourceasStream (resource); // Создать заводскую фабрику и пройти в файле конфигурации Mybatis sqlSessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (inputStream); // Получить SQLSession через завод SQLSession SQLSession = SQLSessionFactory.Opensession (); // Пользователь в списке в списке такой же, как и тип, указанный немецким ResultType в списке файлов сопоставления <user> list = sqlSession.selectlist ("test.finduserbyname", "xiao ming"); System.out.println (список); sqlsession.close (); } public void insertUserTest () Throws IOException {// MyBatis Configuration File String Resource = "sqlmapconfig"; // Получение потока конфигурации ввода inputStream = resourds.getResourceasStream (resource); // Создать заводскую фабрику и пройти в файле конфигурации Mybatis sqlSessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (inputStream); // Получить SQLSession через завод SQLSession SQLSession = SQLSessionFactory.Opensession (); // Вставьте пользователь пользователь пользователь пользователь = new user (); user.setusername ("Ding Guohua"); user.setBirthDay (new Date ()); user.setsex ("1"); user.setAddress ("anhui hefei"); // Пользователь в списке и тип, указанный RestulatyPE в файле отображения, всегда являются sqlSession.Insert ("test.InsertUser", пользователь); // отправить вещи sqlsession.commit (); // закрыть сеанс sqlsession.close (); } // Удалить информацию пользователя на основе ID @Test public void deleteUserTest () Throws IOException {// mybatis configuration file string resource = "sqlmapconfig.xml"; // Получение потока конфигурации ввода inputStream = resourds.getResourceasStream (resource); // Создать завод и пройти в файле конфигурации mybatis sqlSessionFactory sqlSessionFactory = new sqlSessionFactoryBuilder (). Build (inputStream); // Получить SQLSession через завод SQLSession SQLSession = SQLSessionFactory.Opensession (); // прохождение входящего идентификатора удалить пользователь sqlSession.delete ("test.deleteuser", 39); // отправить вещи sqlsession.commit (); // закрыть сеанс sqlsession.close (); } // Обновление информации пользователя @test public void updateUserTest () throws ioException {// mybatis configuration file string resource = "sqlmapconfig.xml"; // Получение потока конфигурации ввода inputStream = resourds.getResourceasStream (resource); // Создать заводскую фабрику и пройти в файле конфигурации MyBatis SQLSessionFactory SQLSessionFactory = new SQLSessionFactoryBuilder () .build (inputStream); // Получить SQLSession через завод SQLSession SQLSession = SQLSessionFactory.Opensession (); // Обновление пользователя user = new user (); // Обновление идентификатор user.setid (41); user.setusername ("Ding Guohua"); user.setBirthDay (new Date ()); user.setsex ("2"); user.setAddress ("anhui hefei"); sqlsession.update ("test.updateuser", пользователь); // Комплект транзакции sqlSession.commit (); // закрыть сеанс sqlSession.close (); }} </span>Плюсы и минусы mybatis
преимущество:
а Легко начать и освоить.
беременный SQL написан в XML, который облегчает объединенное управление и оптимизацию.
в ДеКУПЕР SQL и программный код.
дюймовый Предоставьте отображение тегов для поддержки картирования поля ORM между объектами и базами данных
эн. Предоставьте теги картирования отношений объектов для поддержки построения и обслуживания отношений объектов
фон Предоставьте XML -теги и поддержку написания динамического SQL.
недостаток:
а Рабочая нагрузка SQL очень высока, особенно когда есть много областей и много связанных таблиц.
беременный SQL зависит от базы данных, что приводит к плохой переносимости базы данных.
в Поскольку идентификатор тега в XML должен быть уникальным, методы в DAO не поддерживают перегрузку метода.
дюймовый Слой DAO слишком прост, а рабочая нагрузка объектной сборки относительно большая.
эн. Неправильное использование кэша может легко генерировать грязные данные.
Сравнение между Mybatis и Hibernate
Сходства: Hibernate и Mybatis могут генерировать SessionFactory из файла конфигурации XML через SessionFactoryBuilder, а затем генерировать сеанс из SessionFactroy. Наконец, сеанс начинает выполнять вещи и заявления SQL. Жизненные циклы SessionFactoryBuilder, SessionFactory и Session почти одинаковы.
Различия:
Mybatis: маленький, удобный, эффективный, простой, прямой, полуавтоматический;
Hibernate: мощный, удобный, эффективный, сложный, изгиб, полностью автоматически;
mybatis:
а Просто начать, учиться и использовать его как можно скорее. Он обеспечивает автоматическую функцию привязки объекта для запросов базы данных и продолжает много опыта использования SQL. Он идеально подходит для проектов, которые не имеют таких высоких требований к объектной модели.
беременный Более подробная оптимизация SQL может быть выполнена, и поля запроса могут быть уменьшены.
в Недостатком является то, что структура все еще относительно проста, а функции все еще отсутствуют. Хотя код привязки данных упрощен, весь запрос базы данных фактически должен быть записан сам по себе, рабочая нагрузка относительно большая, и нелегко адаптироваться к быстрому изменению базы данных.
дюймовый Механизм вторичного кэширования плохой.
С Worderate:
а Сильные функции, хорошая база данных нерелевантность и сильные возможности картирования O/R. Если вы достаточно опытны в Hibernate и должным образом инкапсуляют Hibernate, то весь код слоя Persistence вашего проекта будет довольно простым, код, который необходимо записан, очень высока, скорость разработки очень быстрая, и это очень круто.
беременный Существует лучший механизм вторичного кэширования, и может использоваться стороннее кэширование.
в Недостатком является то, что порог обучения не является низким, и вы должны быть опытными в нем. Как разработать картирование O/R, как сбалансировать производительность и объектную модель, и как хорошо использовать Hibernate, требует вашего опыта и способности быть сильным.
Позвольте мне дать вам яркую метафору:
Mybatis: Механические инструменты просты в использовании и могут использоваться как можно скорее, но работа еще должна быть выполнена самостоятельно, но инструменты живы, так как их сделать, зависит от меня.
Hibernate: Intelligent Robot, но это очень дорого развить его (обучение, мастерство), и работа может избавиться от него, но только то, что он может сделать.
Сообщение редактора: в этом сообщении в блоге редактор в основном кратко представил базовые знания Mybatis, включая простую демонстрацию добавления, удаления, модификации и поиска, преимуществ и недостатков Mybatis и сравнение между спяткой и Mybatis. Сходства и различия между ними. Mybatis - это просто настойчивая структура слоя. Mybatis позволяет программе сосредоточиться на SQL и свободно и гибко генерировать операторы SQL, которые отвечают потребностям с помощью метода отображения, предоставленного Mybatis. Mybatis может автоматически вводить входные параметры в подготовку к подготовке и гибко отобразить результат запроса в объекты Java.
Выше приведено вводное руководство для обзора принципа Mybatis, представленного редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!