За последние два дня был запущен новый проект, потому что члены команды проекта всегда использовали Mybatis. Хотя я лично предпочитаю минималистскую модель JPA, Mybatis по -прежнему определяется для поддержания единого выбора технологий для поддержания проекта. Я вышел в интернет, чтобы найти соответствующую информацию о комбинации Spring Boot и Mybatis. Есть различные формы, которые заставляют людей устать от чтения. Комбинируя официальную демонстрацию и документы Mybatis, я наконец нашел два самых простых режима. Я провел день, обобщая его и делясь им.
Суть структуры ORM состоит в том, чтобы упростить кодирование рабочих баз данных в программировании. Теперь осталось в основном две компании. Одним из них является утверждение, что вы не можете написать предложение SQL Hibernate, а другой - гибко отлаживать Mybatis динамического SQL. Оба имеют свои собственные характеристики и могут гибко использовать в соответствии с потребностями в разработке системы на уровне предприятия. Я нашел интересное явление: большинство традиционных компаний любят использовать Hibernate, а интернет -индустрия обычно использует Mybatis.
Характеристика Hibernate заключается в том, что весь SQL генерируется с использованием кода Java, и нет необходимости писать (читать) SQL, не выпрыгивая из программы. У него есть целостность программирования. Он развивается до вершины модели. По сути, соответствующий SQL может быть сгенерирован на основе имени метода. Если вы не знаете много, вы можете прочитать мою предыдущую статью об использовании JPA Spring Data.
Mybatis очень неприятен на ранней стадии, требуя различных файлов конфигурации, классов объектов, ассоциаций картирования слоев DAO и многих других конфигураций. Конечно, Mybatis также обнаружил этот недостаток. На раннем этапе был разработан генератор, который может автоматически производить классы объектов, файлы конфигурации и код слоя DAO на основе результатов таблицы, что может уменьшить часть объема разработки; На более позднем этапе можно использовать много оптимизаций для использования аннотаций, автоматического управления уровнями DAO и файлов конфигурации и т. Д., И разработка вверху - это модель, о которой мы собираемся поговорить сегодня. Mybatis-Spring-Boot-Starter IS Springboot+Mybatis может полностью аннотировать без файлов конфигурации, а также может быть простая конфигурация и легко начать.
Теперь подумайте, Spring Boot потрясающий. Пока вы связываете что -либо с Spring Boot, это упростит его.
Mybatis-Spring-Boot-Starter
Официальное описание: Mybatis Spring-Boot-Starter поможет вам использовать Mybatis с Spring Boot
На самом деле, Mybatis разработал решение, чтобы присоединиться к веселью из -за того, что Spring Boot так популярен, но этот действительно решил много проблем и действительно гораздо более плавнее в использовании. Есть два основных решения для Mybatis-Spring-Boot-Starter. Одним из них является использование аннотаций для решения всех проблем, а другой - упрощенная старая традиция.
Конечно, любой режим должен сначала представить файл POM Mybatis-Spring-Boot-Starter. Теперь последняя версия - 1.1.1 (она просто на двойной 11 :))
<Dependency> <groupid> org.mybatis.spring.boot </GroupId> <artifactid> mybatis-spring-boot-starter </artifactid> <sersive> 1.1.1 </version> </depertive>
Я представлю две модели разработки
Нет версии аннотации файла конфигурации
Это делается с аннотациями.
1 Добавить соответствующие файлы Maven
<Depectiancess> <dehyederence> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter </artifactid> </depervice> <dehyederiny> <groupid> org.springframework.boot </Groupid> <artifactidid </GroupD> <artifactId > Spring-boot-starter-test </artifactid> <scope> test </scope> </dependency> <DepeCtency> <groupId> org.springframework.boot </GroupId> <artifactid> spring-boot-starter-web </artifactid> </dependency> <depen dency> <groupid> org.mybatis.spring.boot </GroupId> <strifactid> mybatis-spring-boot-starter </artifactid> <sersive> 1.1.1 </version> </gespervice> <dependency> <groupid> mysql </Groupid> <ratifactid> mysql-c onnector-java </artifactid> </depertive> <Dependency> <groupId> org.springframework.boot </GroupId> <strifactid> spring-boot-devtools </artifactid> <plociated> true </opportion> </зависимость> </зависимости>
Я не буду публиковать полный пакет POM здесь, пожалуйста, прочитайте исходный код напрямую
2. Application.properties Добавить соответствующие конфигурации
mybatis.type-aliases-package = com.neo.entityspring.datasource.driverclassname = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: // localhost: 3306/test1? UseUnicode = true & harearencoding = ut-ut-8s Rootspring.datasource.Password = root
Springboot автоматически загрузит соответствующую конфигурацию Spring.datasource.*, И источник данных будет автоматически введен в SQLSessionFactory. SQLSessionFactory будет автоматически впрыск в Mapper. Кстати, вам не нужно беспокоиться обо всем, просто поднимайте его и используйте.
Добавить сканирование пакета Mapper в класс запуска @MapperScan
@SpringBootApplication@mapperscan ("com.neo.mapper") открытый класс приложение {public static void main (string [] args) {springapplication.run (application.class, args);}}Или просто добавьте аннотацию @mapper в класс Mapper. Рекомендуется использовать приведенный выше, в противном случае будет довольно хлопотно добавлять аннотацию каждому карту.
3. Разработка Mapper
Третий шаг - наиболее важная часть, а производство SQL здесь
публичный интерфейс usermapper {@select ("select * from users")@results ({@result (property = "userex", column = "user_sex", javatype = usersexenum.class),@result (Property = "Nickname", column = "nick_name")}) список <userentity> getAll (); #{id} ")@results ({@result (property =" userex ", column =" user_sex ", javatype = usersexenum.class),@result (property =" никман ", column =" nick_name ")}) userentity getOne (long id);@insert (" Insert in usters (userMame, palshex, user_sex) значения ( # # # # # # # # # # # # # # # # # # # # # # # # # # # # #{password},#{userex}) ") void insert (userentity user);@update (« Обновление пользователей установила username =#{username}, nick_name =#{никнам}, где id =#{id} ") void update (пользователь пользователь пользователь);Чтобы быть ближе к производству, я специально подчеркнул два атрибута user_sex и nick_name в базе данных, и имена атрибутов класса объекта являются непоследовательными. Кроме того, user_sex использует перечисления
@Select - это аннотация класса запросов, и все запросы используют это
@Result изменяет возвратный набор результатов, и связанные атрибуты класса объектов и поля базы данных соответствуют одному. Если атрибуты класса объекта и имена атрибутов базы данных согласуются, этот атрибут не требуется для изменения.
@Insert вставьте базу данных для использования, непосредственно передавая класс объектов автоматически анализирует атрибут к соответствующему значению
@Update отвечает за изменение, а также может быть передано напрямую в объект
@delete отвечает за удаление
Для получения дополнительных свойств, пожалуйста, см.
Обратите внимание, что разница между использованием # Symbol и $ Symbol:
// Этот пример создает подготовленное утверждение, что -то вроде Select * из учителя, где имя =?;@Select («select * из учителя, где name = #{name}») учитель selectTeachforgivenname (@param ("name") String name); // Этот пример создает n инлименное утверждение, что -то вроде Select * whed name = 'somename';@select (select * when wome wame = 'name wome hame wome hame') SELECTTECHFORGIVENNAME (@Param ("name") String name);4. Используйте
Вышеуказанные три этапа в основном завершают соответствующее развитие слоя. При его использовании просто используйте его в качестве обычного класса, и он может быть введен в него.
@Runwith (springrunner.class) @springboottestpublic class usermappertest {@autowiredprivate usermapper usermapper; @testpublic void testinsert () Throws Exception {usermapper.insert (new Userentity ("aa", "a123456", usersexenum.man); Userentity («bb», «b123456», usersexenum.woman)); usermapper.insert (new Userentity ("cc", "b123456", usersexenum.wom Usermapper.getall (); system.out.println (users.tostring ());}@testpublic void testupdate () Throws Exception {userentity user = Usermapper.getone (3l); system.out.println (user.tostring ()); user.setnickname ("neo"); usermapper.update (user); assert.asserttrue ("neo".В исходном коде есть полные дополнения, удаления, модификации и поиск, поэтому я не буду публиковать их здесь
Минималистская версия XML
Минималистская версия XML поддерживает старую традицию картирования файлов. Оптимизация в основном отражается на уровне реализации, который не нуждается в реализации. Система автоматически найдет соответствующий SQL в файле отображения в соответствии с именем метода.
1. Конфигурация
Файл POM такой же, как и предыдущая версия, за исключением того, что в application.properties добавлена следующая конфигурация.
mybatis.config-locations = classpath: mybatis/mybatis-config.xmlmybatis.mapper-locations = classpath: mybatis/mapper/*. xml
Указывает адрес файла базовой конфигурации MyBatis и файла сопоставления класса объекта
mybatis-config.xml Конфигурация
<figonturetion> <TypeAliases> <typealias alias = "Integer" type = "java.lang.integer" /> <typealias alias = "long" type = "java.lang.long" /> <typealias alias = "hashmap" type = "java.util.hashmap" /> <typealias alias alias = "linklehashshamap" type = "java.util.linkedhashmap" /> <typealias alias = "arraylist" type = "java.util.arraylist" /> <typealias alias = "linkedlist" type = "java.util.linkedlist" /> < /typealiases> < /configuration>
Здесь вы также можете добавить некоторую базовую конфигурацию mybatis
2. Добавить файл отображения пользователя
<mapper namespace="com.neo.mapper.UserMapper" ><resultMap id="BaseResultMap" type="com.neo.entity.UserEntity" ><id column="id" property="id" jdbcType="BIGINT" /><result column="userName" property="userName" jdbcType="VARCHAR" /><result column="passWord" Property = "password" jdbctype = "varchar" /> <result column = "user_sex" property = "userex" javatype = "com.neo.enums.usersexenum" /> <result column = "nick_name" property = "jdbctype =" varchar " /> < /ruptmap> <sql Id =" jdbctype = "varchar" /> < /> < /> < /> < /> < /> resultmap> <sql = "jdbctype =" varhch Пароль, user_sex, nick_name < /sql> <select id = "getall" resultmap = "baseresultmap"> select <include refid = "base_column_list" /> от пользователей < /selet> <select id = "getOne" parametertype = "java.lang.long" reludemap = "baseReSultMap"> select = "refiD_col_col_clinm_clinm_clinm_clinm_clinm_clinm. Пользователи идентификатор мира = #{id} </select> <INSERT ID = "INSERT" PARAMETERTYPE = "com.neo.Entity.Userentity"> INSERT в пользователей (имя пользователя, пароль, user_sex) ( #{username}, #{пароль}, #{userex}) </insert> <update id = "update". > Обновление пользователей SET <if test = "username! = Null"> username = #{username}, </if> <if test = "password! = Null"> password = #{password}, </if> nick_name = #{nickname} where = #{id} </update> <delete = #delete "javEngers. Где id = #{id} </delete> </mapper>На самом деле, это просто перемещало Mapper SQL из предыдущей версии в XML здесь
3. Напишите код слоя DAO
Публичный интерфейс usermapper {list <userentity> getAll (); userentity getOne (long id); void insert (пользователь пользователя пользователя); void update (пользователь пользователя); void delete (long id);}По сравнению с предыдущим шагом осталось только методы интерфейса.
4. Используйте
Нет разницы между использованием и предыдущей версией, пожалуйста, посмотрите на код
Как выбрать
Два режима имеют свои собственные характеристики. Аннотированная версия подходит для простых и быстрых режимов. На самом деле, как и популярная модель микросервиса в настоящее время, микросервис будет соответствовать своей собственной базе данных. Спрос на запрос на подключение с несколькими таблицами будет значительно уменьшен, и он становится все более и более подходящим для этого режима.
Старая традиционная модель больше подходит для крупных проектов. Он может гибко генерировать SQL динамически, что удобно для корректировки SQL, а также имеет ощущение написания SQL с большим удовольствием и гладкой.
Пример кода-github: https://github.com/ityouknow/spring-boot-examples
Пример кода-Code Cloud: https://gitee.com/ityouncknow/spring-boot-examples