Предисловие
В этой статье объясняется, как использовать Kotlin под основами Spring Boot2, и плавно интегрировать и идеально смешивая. Чтобы сделать читателей более знакомыми с синтаксическим сахаром Котлина, автор расскажет о новых функциях Котлина и синтаксическом сахаре в нескольких будущих статьях. Я не скажу многое ниже, давайте посмотрим на подробное введение
Измените файл POM и добавьте Spring Boot -зависимости.
<parent> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </artifactid> <sersive> 2.0.2.release </version> <venustaryPath/> </parent> <Depective> <Depective> <groupid> org.spramework.boot </Group> <Depective> <TrafactId> Spring-Boot-Starter </artifactId> </dependency> <Dependency> <groupId> org.springframework.boot </GroupId> <straCactId> Spring-Boot-Starter-web </artifactid> </depertive> <Depective> <groupId> org.spramework.boot </Group> <Depective> <groupid> org.spramework.boot </Group> <Artifactid> Spring-boot-starter-jdbc </artifactid> </dependency> </dependencies>
Сразу после этого нам нужно добавить зависимости MySQL.
<dependency> <groupid> mysql </groupid> <ratifactid> mysql-connector-java </artifactid> <sersive> 5.1.35 </version> </dependency> <dehydency> <groupid> com.alibaba </GroupId> <strifactid> druid </artifactid> <seriate> 1.0.14 </arryid> artifactid> <seriate> 1.0.0.14 </arruid </artifactid> <serive> 1.0.14 </artifactid> </artifactid> <serive> 1.0.
Наконец, добавьте зависимость котлина.
<dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jdk8</artifactId></dependency><dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-reflect</artifactId></dependency><dependency> <groupId> org.jetbrains.kotlin </GroupId> <ArtifactId> kotlin-stdlib </artifactid> </deperiancy>
Обратите внимание, что в Kotlin класс данных не имеет конструктора без параметра по умолчанию, а класс данных по умолчанию не может быть унаследован. Обратите внимание, что если мы используем режим Spring + Kotlin, то использование @autowared может столкнуться с этой проблемой. Следовательно, мы можем добавить Noarg, чтобы генерировать конструкторы без параметра в качестве аннотированного класса. Используйте Allopen, чтобы удалить окончательный для аннотированного класса и разрешить наследование.
<blicin> <ratifactid> kotlin-maven-plugin </artifactid> <groupid> org.jetbrains.kotlin </GroupId> <sersion> $ {kotlin.version} </version> <cervision> <ID> <Decile> <deeploy> <dieption> <dieption> <diepus> <diepus> <diepus> <diepus> <deeportion> <deeportion> <deeportion> <deepuration> <deepuration> <Голы> <COLE> тест-compile </oal> </goot> </execution> </выполнение> </выполнение> </выполнение> <Depection> <DeyEdency> <groupId> org.jetbrains.kotlin </GroupId> <artifactid> kotlin-maven-noarg </artifactid> <persion> $ {kotlin. <groupId> org.jetbrains.kotlin </GroupId> <ArtifactId> Kotlin-Maven-Alopen </artifactid> <sersive> $ {kotlin.version} </version> </dependency> </deperiation> </placin>На этом этапе нашу среду зависимости Maven была примерно настроена. Для полного исходного кода вы можете обратиться к репозиторию GitHub в конце статьи.
Используя конфигурацию Spring Boot Default, вам не нужно создавать фасоль данных и JDBCTemplate.
Настройте информацию источника данных в SRC/Main/Resources/Application.properties.
spring.datasource.driver-class-name = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: // localhost: 3307/springboot_dbspring.datasource.username = rootspring.datasource.password = root
Настройте информацию источника данных в SRC/Main/Resources/config/source.properties.
# mysqlsource.driverclassname = com.mysql.jdbc.driversource.url = jdbc: mysql: // localhost: 3306/springboot_dbsource.username = rotsource.password = root
Здесь создайте DataSource и JDBCTEMPLATE.
@Configuration @enableTransactionManagement @propertysource (value = *arrayof ("classpath: config/source.properties")) Open Class BeanConfig {@Autowired Private LateInit var env: Environment @Bean Open Fun DataSource (): dataSource {valatasource = druiddatasource () dataSource.draScrcecrco env !!. getProperty ("source.driverclassname"). trim () dataSource.url = env.getProperty ("source.url"). trim () dataSource.username = env.getProperty ("source.username") jdbctemplate (): jdbctemplate {val jdbctemplate = jdbctemplate () jdbctemplate.datasource = dataSource () return jdbctemplate}}Сначала инициализируйте необходимый сценарий SQL.
Создать базу данных /*! 32312, если не существует* /`springboot_db` /*! 40100 Набор символов по умолчанию UTF8* /; Используйте `springboot_db`; Сбросить таблицу, если существует `t_author`; CREATE TABLE `t_author` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'User ID', `real_name` varchar(32) NOT NULL COMMENT 'User name', `nick_name` varchar(32) NOT NULL COMMENT 'User anonymous', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Автор класса {var id: long? = null var realName: строка? = null var pickname: строка? = null} Интерфейс Authordao {Fun Add (Автор: Автор): Int Fun Update (Автор: Автор): int Fun Удалите (ID: Long): int fun findauthor (id: long): автор? FUN FINDAuthorList (): List <ator>}Давайте определим класс реализации и получаем доступ к данным через jdbctemplate.
@RepoSitoryPen Class AuthordAoImpl: AuthordAo {@Autowired Private LateInit var JDBCTemplate: JDBCTemplate переопределить FUN ADD (Автор: Автор): int {return jdbctemplate.update («Вставка в t_author (real_name, nick_name) значения (?) Обновление (Автор: Автор): int {return jdbctemplate.update ("Обновление t_author set real_name =?, nick_name =? } переопределить веселье findauthor (id: long): автор? {val list = jdbctemplate.query <ator> ("select * from t_author, где id =?", arrayof <anty> (id), beanpropertyrowmapper (author :: class.java)) return stist? .get (0); } переопределить FUN FINDAuthorList (): List <ator> {return jdbctemplate.query ("select * from t_author", arrayof (), beanpropertyrowmapper (author :: class.java))}}}}}}}}}}}}}}}}}}}}}}}}}}}} Интерфейс Authorservice {Fun Add (Автор: Автор): Int Fun Update (Автор: Автор): int Fun Удалите (ID: Long): int fun findauthor (id: long): автор? FUN FINDAuthorList (): List <ator>}Давайте определим класс реализации. Сервисный слой вызывает метод слоя DAO. Это типичная рутина.
@Service ("Authorservice") Open Class AuthorerServiceImpl: Authorservice {@Autowired Private LateInit var Authordao: Authordao переопределить забавные {return this.authordao.delete (id)} переопределить веселье findauthor (id: long): автор? {return this.authordao.findauthor (id)} переопределить fun findauthorlist (): list <ator> {return this.authordao.findauthorlist ()}}Чтобы показать эффект, мы сначала определили простой набор интерфейсов RESTFUL API для тестирования.
@Restcontroller @requestMapping (value = "/outrors") class AuthorController {@Autowired Private LateInit var AuthorerService: AuthorerService/*** Query List*/@Requestmapping (method = [requestMethod.get]) fun getauthorlist (refest: httpservectrequest): map <string, ulip> {valauthlist) this.authorservice.findauthorlist () val param = hashmap <string, any> () param ["total"] = Authorlist.size param ["row"] = Authorlist return Param}/*** Query Information*/@Requestmapping (value = "/{userid: // d+}", methodmetd.get getaithriaite (useMable (ancemable (useMable ateAtretait Запрос: httpservlectrequest): Author {return outrorservice.findauthor (userId) ?: Throw RuntimeException ("ошибка запроса")} / *** Новый метод* / @Requestmapping (method = [requestMethod.post]) Fun Add (@Requestbody JsonObject: jsonObject) {val userId = val userBect. detaMed. = jsonObject.getString ("Real_Name") val nickname = jsonobject.getString ("nick_name") val Author = Author.id.id = java.lang.long.valueof (userId) Author.RealName = realName Автор. Runtimeexception ("new Error")}}/*** Method*/@requestmapping (value = "/{userId: // d+}", method = [requestMethod.put]) забавное обновление (@pathvariable userid: long, @requestody jsonobject: jsonobject) {var author authorservice.findauthore. jsonObject.getString ("Real_Name") val nickname = jsonobject.getString ("nick_name") try {if (Author! = null) {author.RealName = realName Author.nickName = Nickname this.AutherService.update (Автор)}} поймать (e: исключение) {throw Runtime ("*********************** Метод*/@RequestMapping (value = "/{userId: // d+}", method = [requestMethod.delete]) Fun Delete (@pathvariable userid: long) {try {this.autherservice.delete (userId)} catch (e: Exception) {throw runTimeExceptНаконец, мы запускаем программу через SpringKotlinApplication.
@Springbootapplication (scanbasepackages = ["com.lianggzone.demo.kotlin"]) Open Class Springkotlinapplication {Fun Main (args: array <string>) {SpringApplication.run (Springkotlinapplication :: class.java, *args)}}Здесь автор рекомендует клиенту редактора Idea Rest. Клиент редактора Idea Rest был поддержан в версии Intellij Idea 2017.3 и добавил много функций в версии 2018.1. На самом деле, это плагин HTTP Client для INTELLIJ IDEA. Смотрите еще одну предыдущую статью: быстрое тестирование новых навыков для интерфейсов API
### Список пользователей запроса GET http: // localhost: 8080/AuthorsAccept: Application/jsoncontent-type: Application/json; charset = utf-8 ### Query Информация пользователя http: // localhost: 8080/uthors/15cept: application/jsoncontent-type: application/json; http: // localhost: 8080/outrorscontent-type: application/json {"user_id": "21", "Real_name": "Liang Guizhao", "nick_name": "Liang guizhao"} ### method put http: // loc "Real_Name": "lianggzone", "nick_name": "lianggzone"} ### Удалить метод Delete http: // localhost: 8080/uthors/21accep: application/jsoncontent-type: apply/json; charset = utf-8Благодаря простому случаю выше, мы обнаружили, что очень легко интегрировать Kotlin путем Spring Boot и упростить начальный процесс построения и разработки пружинных приложений. Чтобы сделать читателей более знакомыми с синтаксическим сахаром Котлина, автор расскажет о новых функциях Котлина и синтаксическом сахаре в нескольких будущих статьях.
исходный код
Похожие примеры Полный код: Spring-Kotlin-Samples (локальная загрузка)
Хорошо, вышеупомянутое содержимое этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.