最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot如何使用Scala進(jìn)行開發(fā)的實(shí)現(xiàn)

 更新時(shí)間:2019年12月02日 09:51:00   作者:阿靖哦  
這篇文章主要介紹了SpringBoot如何使用Scala進(jìn)行開發(fā)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Scala是一門多范式的編程語(yǔ)言,一種類似Java的編程語(yǔ)言,設(shè)計(jì)初衷是實(shí)現(xiàn)可伸縮的語(yǔ)言并集成面向?qū)ο缶幊獭cala把Erlang風(fēng)格的基于actor的并發(fā)帶進(jìn)了JVM,開發(fā)者可以利用Scala的actor模型在JVM上設(shè)計(jì)具伸縮性的并發(fā)應(yīng)用程序,它會(huì)自動(dòng)獲得多核心處理器帶來(lái)的優(yōu)勢(shì),而不必依照復(fù)雜的Java線程模型來(lái)編寫程序,接下來(lái)就介紹一下如何在SpringBoot框架中使用Scala來(lái)進(jìn)行簡(jiǎn)單的Web開發(fā),對(duì)scala不了解的建議先去學(xué)習(xí)基礎(chǔ)哦

一、導(dǎo)入依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.2.1.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.gjing.project</groupId>
 <artifactId>scala-demo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>scala-demo</name>
 <description>Demo project for Spring Boot</description>

 <properties>
  <java.version>1.8</java.version>
 </properties>

 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
  </dependency>
  <!--加入Scala依賴庫(kù)-->
  <dependency>
   <groupId>org.scala-lang</groupId>
   <artifactId>scala-library</artifactId>
   <version>2.13.1</version>
  </dependency>

  <dependency>
   <groupId>cn.gjing</groupId>
   <artifactId>tools-starter-swagger</artifactId>
   <version>1.3.0</version>
  </dependency>
  <dependency>
   <groupId>cn.gjing</groupId>
   <artifactId>tools-common</artifactId>
   <version>1.2.7</version>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <!--加入Scala的編譯插件,否則無(wú)法進(jìn)行編譯-->
   <plugin>
    <groupId>org.scala-tools</groupId>
    <artifactId>maven-scala-plugin</artifactId>
    <version>2.15.2</version>
    <executions>
     <execution>
      <goals>
       <goal>compile</goal>
       <goal>testCompile</goal>
      </goals>
     </execution>
    </executions>
   </plugin>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>

</project>

通過(guò)上面我們可以發(fā)現(xiàn),和創(chuàng)建Java版本的SpringBoot項(xiàng)目沒(méi)啥不同,只是引入了scala-library這個(gè)我們之前沒(méi)引入的包,同時(shí)增加了對(duì)scala編譯的插件

二、配置YML文件

server:
 port: 8080
spring:
 application:
 name: scala-demo
 datasource:
 driver-class-name: com.mysql.cj.jdbc.Driver
 url: jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf8&useSSL=false
 username: root
 password: root
 type: com.zaxxer.hikari.HikariDataSource
 hikari:
  maximum-pool-size: 5
  minimum-idle: 1
  idle-timeout: 30000
  connection-timeout: 30000
 jpa:
 database: mysql
 hibernate:
  ddl-auto: update
 # 設(shè)置創(chuàng)表引擎為Innodb,不然默認(rèn)為MyiSam
 database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

swagger:
 base-package: com.gjing.project.scala.controller
 title: scala學(xué)習(xí)的demo

三、創(chuàng)建實(shí)體類

import javax.persistence._

import scala.beans.BeanProperty

/**
 * @author Gjing
 **/
@Entity
@Table(name = "scala_customer")
class Customer {

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 @BeanProperty
 var id:Integer = _

 @BeanProperty
 var customerName:String = _

 def this(customerName:String){
 this()
 this.customerName = customerName
 }

 override def toString: String = s"Customer($id,$customerName)"
}

這塊和我們用java開發(fā)沒(méi)啥不同,只是@BeanProperty注解會(huì)幫我們生成get和set

四、Repository層

import com.gjing.project.scala.entity.Customer
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository

/**
 * @author Gjing
 **/
@Repository
trait CustomerRepository extends JpaRepository[Customer, Integer] {
 /**
 * 通過(guò)用戶名查詢
 * @param name 用戶名
 * @return Customer
 */
 def findByCustomerName(name:String) : Customer
}

這里和JAVA不同的是泛型采用的是[]中括號(hào),這點(diǎn)要注意

五、Service層

import cn.gjing.tools.common.result.PageResult
import com.gjing.project.scala.entity.Customer
import com.gjing.project.scala.exceptions.MyServiceException
import com.gjing.project.scala.repository.CustomerRepository
import javax.annotation.Resource
import org.springframework.data.domain.Pageable
import org.springframework.stereotype.Service

/**
 * @author Gjing
 **/
@Service
class CustomerService @Resource()(customerRepository: CustomerRepository) {
 /**
 * 保存用戶
 *
 * @param name 用戶名
 */
 def saveCustomer(name: String): Unit = {
 var customer = customerRepository.findByCustomerName(name)
 if (customer != null) {
  throw MyServiceException("添加失敗,用戶已存在")
 }
 customer = new Customer(name)
 customerRepository.save(customer)
 }

 /**
 * 分頁(yè)查詢
 *
 * @param pageable 分頁(yè)對(duì)象
 * @return
 */
 def pageCustomer(pageable: Pageable): PageResult[java.util.List[Customer]] = {
 val page = customerRepository.findAll(pageable)
 return PageResult.of(page.getContent, page.getTotalPages, page.getSize, page.getTotalElements, page.getNumber)
 }

 /**
 * 更新用戶名
 * @param id 用戶id
 * @param name 用戶名
 */
 def updateCustomer(id: Integer, name: String): Unit = {
 val customer = customerRepository.findById(id).orElseThrow(() => MyServiceException("更新失敗,用戶不存在"))
 customer.setCustomerName(name)
 customerRepository.saveAndFlush(customer)
 }

 /**
 * 刪除指定用戶
 * @param id 用戶id
 */
 def deleteCustomer(id:Integer): Unit = {
 val customer = customerRepository.findById(id).orElseThrow(() => MyServiceException("刪除失敗,用戶不存在"))
 customerRepository.delete(customer)
 }
}

有意思的是,在scala中依賴注入是寫在類名上的

六、Controller層

import cn.gjing.tools.common.annotation.NotEmpty
import cn.gjing.tools.common.result.PageResult
import com.gjing.project.scala.entity.Customer
import com.gjing.project.scala.service.CustomerService
import io.swagger.annotations.{Api, ApiImplicitParam, ApiImplicitParams, ApiOperation}
import javax.annotation.Resource
import org.springframework.data.domain.PageRequest
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation._

/**
 * @author Gjing
 **/
@RestController
@Api(tags = Array("用戶的相關(guān)功能"))
class CustomerController @Resource()(customerService:CustomerService){
 @PostMapping(Array("/customer"))
 @ApiOperation("添加用戶")
 @ApiImplicitParam(name = "customerName",value = "用戶名",dataType = "String",required = true,paramType = "query")
 @NotEmpty
 def saveCustomer(customerName:String): ResponseEntity[String] ={
 customerService.saveCustomer(customerName)
 ResponseEntity.ok("添加成功")
 }

 @GetMapping(Array("/customer_page"))
 @ApiOperation("分頁(yè)查詢")
 @ApiImplicitParams(Array(
 new ApiImplicitParam(name = "page",value = "頁(yè)數(shù)",required = true,dataType = "int",paramType = "query"),
 new ApiImplicitParam(name = "size",value = "條數(shù)",required = true,dataType = "int",paramType = "query"),
 ))
 def pageCustomer(page:Integer,size:Integer): ResponseEntity[PageResult[java.util.List[Customer]]]={
 ResponseEntity.ok(customerService.pageCustomer(PageRequest.of(page, size)))
 }


 @NotEmpty
 @PutMapping(Array("/customer"))
 @ApiOperation("更新用戶")
 @ApiImplicitParams(Array(
 new ApiImplicitParam(name = "id",value = "用戶ID",required = true,dataType = "int",paramType = "query"),
 new ApiImplicitParam(name = "name",value = "用戶名",required = true,dataType = "String",paramType = "query")
 ))
 def updateCustomer(id:Integer,name:String): ResponseEntity[String] = {
 customerService.updateCustomer(id, name)
 ResponseEntity.ok("修改成功")
 }

 @DeleteMapping(Array("/customer/{id}"))
 @ApiOperation("刪除用戶")
 def deleteCustomer(id:Integer): ResponseEntity[String] = {
 customerService.deleteCustomer(id)
 ResponseEntity.ok("刪除成功")
 }
}

這樣我們一個(gè)簡(jiǎn)單的Scala版本的Web項(xiàng)目就寫好啦,只需要啟動(dòng)就可以試著運(yùn)行啦,本文的源代碼地址:scala-demo,有任何不清楚的可以在評(píng)論區(qū)回復(fù)哈

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java8中的default方法詳解

    Java8中的default方法詳解

    這篇文章主要介紹了Java8中的default方法詳解,Java 8新增了default方法,它可以在接口添加新功能特性,而且還不影響接口的實(shí)現(xiàn)類,需要的朋友可以參考下
    2015-03-03
  • js-tab選項(xiàng)卡

    js-tab選項(xiàng)卡

    本文主要介紹了js-tab選項(xiàng)卡的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • Java BigDecimal案例詳解

    Java BigDecimal案例詳解

    這篇文章主要介紹了Java BigDecimal案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java設(shè)計(jì)模式之狀態(tài)模式State Pattern詳解

    Java設(shè)計(jì)模式之狀態(tài)模式State Pattern詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之狀態(tài)模式State Pattern,狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變其行為。這個(gè)對(duì)象看上去就像是改變了它的類一樣
    2022-11-11
  • 關(guān)于java中@Async異步調(diào)用詳細(xì)解析附代碼

    關(guān)于java中@Async異步調(diào)用詳細(xì)解析附代碼

    本文主要介紹了java關(guān)于@Async異步調(diào)用詳細(xì)解析附代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Spring Boot Admin監(jiān)控服務(wù)如何使用

    Spring Boot Admin監(jiān)控服務(wù)如何使用

    這篇文章主要介紹了Spring Boot Admin監(jiān)控服務(wù)如何使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 淺析Java中的SPI原理

    淺析Java中的SPI原理

    SPI:由調(diào)用方制定接口標(biāo)準(zhǔn),實(shí)現(xiàn)方來(lái)針對(duì)接口提供不同的實(shí)現(xiàn),SPI其實(shí)就是"為接口查找實(shí)現(xiàn)"的一種服務(wù)發(fā)現(xiàn)機(jī)制。本文將淺談一下SPI機(jī)制的原理,需要的可以參考一下
    2022-09-09
  • mybatis如何根據(jù)表逆向自動(dòng)化生成代碼實(shí)例

    mybatis如何根據(jù)表逆向自動(dòng)化生成代碼實(shí)例

    逆向工程是一個(gè)專門為 MyBatis 框架使用者設(shè)計(jì)的代碼生成器,可以根據(jù)數(shù)據(jù)庫(kù)中的表字段名,自動(dòng)生成 POJO 類,mapper 接口與 SQL 映射文件,這篇文章主要給大家介紹了關(guān)于mybatis如何根據(jù)表逆向自動(dòng)化生成代碼的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 解決SpringBoot整合ElasticSearch遇到的連接問(wèn)題

    解決SpringBoot整合ElasticSearch遇到的連接問(wèn)題

    這篇文章主要介紹了解決SpringBoot整合ElasticSearch遇到的連接問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot深入探究@Conditional條件裝配的使用

    SpringBoot深入探究@Conditional條件裝配的使用

    這篇文章主要為大家介紹了SpringBoot底層注解@Conditional的使用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論

平度市| 木里| 九江县| 陕西省| 澳门| 瑞丽市| 马边| 东乡县| 电白县| 神农架林区| 鹤庆县| 镇原县| 南安市| 徐水县| 金山区| 隆林| 肃北| 乐安县| 广东省| 恩施市| 育儿| 苍溪县| 东兴市| 绵竹市| 文昌市| 西平县| 肥城市| 重庆市| 特克斯县| 阿瓦提县| 互助| 彰化市| 江津市| 东城区| 建昌县| 措勤县| 榆树市| 遂平县| 滨州市| 富源县| 宣汉县|