SpringBoot如何使用Scala进行开发的实现

Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言并集成面向对象编程。Scala把Erlang风格的基于actor的并发带进了JVM,开发者可以利用Scala的actor模型在JVM上设计具伸缩性的并发应用程序,它会自动获得多核心处理器带来的优势,而不必依照复杂的Java线程模型来编写程序,接下来就介绍一下如何在SpringBoot框架中使用Scala来进行简单的Web开发,对scala不了解的建议先去学习基础哦

一、导入依赖

<?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依赖库-->
  <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的编译插件,否则无法进行编译-->
   <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>

通过上面我们可以发现,和创建Java版本的SpringBoot项目没啥不同,只是引入了scala-library这个我们之前没引入的包,同时增加了对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
 # 设置创表引擎为Innodb,不然默认为MyiSam
 database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

swagger:
 base-package: com.gjing.project.scala.controller
 title: scala学习的demo

三、创建实体类

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开发没啥不同,只是@BeanProperty注解会帮我们生成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] {
 /**
 * 通过用户名查询
 * @param name 用户名
 * @return Customer
 */
 def findByCustomerName(name:String) : Customer
}

这里和JAVA不同的是泛型采用的是[]中括号,这点要注意

五、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)
 }

 /**
 * 分页查询
 *
 * @param pageable 分页对象
 * @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("用户的相关功能"))
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("分页查询")
 @ApiImplicitParams(Array(
 new ApiImplicitParam(name = "page",value = "页数",required = true,dataType = "int",paramType = "query"),
 new ApiImplicitParam(name = "size",value = "条数",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("删除成功")
 }
}

这样我们一个简单的Scala版本的Web项目就写好啦,只需要启动就可以试着运行啦,本文的源代码地址:scala-demo,有任何不清楚的可以在评论区回复哈

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot整合Scala构建Web服务的方法

    今天我们尝试Spring Boot整合Scala,并决定建立一个非常简单的Spring Boot微服务,使用Scala作为编程语言进行编码构建. 创建项目 初始化项目 复制代码 代码如下: mvn archetype:generate -DgroupId=com.edurt.ssi -DartifactId=springboot-scala-integration -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0.0 -

  • SpringBoot如何使用Scala进行开发的实现

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言并集成面向对象编程.Scala把Erlang风格的基于actor的并发带进了JVM,开发者可以利用Scala的actor模型在JVM上设计具伸缩性的并发应用程序,它会自动获得多核心处理器带来的优势,而不必依照复杂的Java线程模型来编写程序,接下来就介绍一下如何在SpringBoot框架中使用Scala来进行简单的Web开发,对scala不了解的建议先去学习基础哦 一.导入依赖 <?xml version=&qu

  • Springboot整合MongoDB的Docker开发教程全解

    1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. 2 把Springboot打包成Docker镜像 Springboot的Web开发非常简单,本次使用之前讲解过的Springboot整合MongoDB的项目,请参考 实例讲解Springboot整合MongoDB进行CRUD操作的两种方式,文章中有源码:MongoDB的安装请参考:用Docker安装

  • Springboot结合Flowable实现工作流开发

    目录 Flowable 核心依赖 流程设计 流程审批 总结 公司内部的OA系统最近要升级改造,由于人手不够就把我借调过去了,但说真的我还没做过这方面的功能,第一次接触工作流的开发,还是有点好奇是个怎样的流程. 项目主要用 Springboot + Flowable 重构原有的工作流程,Flowable 是个用 Java语言写的轻量级工作流引擎,上手比较简单开发效率也挺高的,一起学习下这个框架. 官方地址:https://www.flowable.org/docs/userguide/index.

  • 浅谈SpringBoot项目如何让前端开发提高效率(小技巧)

    社会分工越来越细,对于工程类研发来说,全栈是越来越少了.这是时代的进步,也是个体的悲哀. 今天要分享的小技巧,或许能够大幅提高你的开发效率.你可以用省下来的时间打个盹,浏览个美女写真什么的. 本篇文章涉及的知识点有 Swagger 为了文档 Nginx 为了效率 众所周知, java 项目的启动速度就像沙子里走路.要是你的前端模块也很大,有一大堆 node_modules , SpringBoot 会毫不犹豫的给你打包进去.每次修改前端页面,都需要打包才能调试,真是等的媳妇都跑了.可惜的是, v

  • SpringBoot框架实现切换启动开发环境和测试环境

    目录 SpringBoot框架切换启动开发环境和测试环境 目录结构 1.在pom.xml文件中添加插件 2.添加配置文件application.yml 3.添加测试环境的配置文件application-test.yml 4.将项目打包成jar包的快捷方式 SpringBoot动态切换环境 1.我们在springboot的pom.xml中添加项目中的环境配置 2.环境配置完成之后我们有三套环境 SpringBoot框架切换启动开发环境和测试环境 目录结构 1.在pom.xml文件中添加插件 <pr

  • springboot集成mqtt的实践开发

    序 MQTT(Message Queuing Telemetry Transport)是基于二进制消息的发布/订阅编程模式的消息协议,非常适合需要低功耗和网络带宽有限的IoT场景.这里简单介绍一下如何在springboot中集成. maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</arti

  • 使用SpringBoot开发Restful服务实现增删改查功能

    在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练.不过在看了很多关于SpringBoot的介绍之后,并没有想象中的那么难,于是开始准备学习SpringBoot. 在闲暇之余的时候,看了下SpringBoot实战以及一些大神关于SpringBoot的博客之后,开始写起了我的第一个SpringBoot的项目.在能够对SpringBoot进行一些简单的开发Re

  • springboot vue测试平台开发调通前后端环境实现登录

    目录 基于 springboot+vue的测试平台开发 一.前端环境搭建 快速安装 二.后端环境搭建 创建应用 配置 application.properties 三.实现登录 1. mysql 建表 2. 后端-实现 /login 接口 3. 前端-修改代码实现登录 4. 解决跨域 5. 后端-实现 /useInfo 接口 6. 后端-实现 /logout 接口 四.小结 基于 springboot+vue的测试平台开发 一.前端环境搭建 在前端框架vue-element-admin这个项目中

  • springboot 整合dubbo3开发rest应用的场景分析

    目录 一.前言 二.dubbo适用场景 1.内部单体应用微服务化 2.应用服务更多面向内部服务间调用 3.对服务管理趋于精细化 三.dubbo微服务治理过程中的一个难题 四.与springboot的整合使用 1.公共pom依赖 2.common-service 模块 3.provider-demo 模块 pom依赖 核心配置文件 服务实现类 启动类 4.consumer-demo 模块 4.接口测试 4.1 启动zookeeper服务 4.2 启动provider服务 4.3 启动consume

  • Spring-Boot框架初步搭建

    一.简介 SpringMVC是非常伟大的框架,开源,发展迅速.优秀的设计必然会划分.解耦.所以,spring有很多子项目,比如core.context.bean.mvc等.这对知根底的人来说很简单明了,然而springmvc就是为了傻瓜式的操作而发明的.对于初学springmvc的人来说,想要入手就开发需要拷贝一连串的dependency而不知道这个是干嘛,不知道是不是少了依赖.像我刚接触springmvc的时候到处百度教程而发现各有不同,于是复制了一个又一个代码却不能自己设置,根本原因是不了解

随机推荐