java web scala_spring boot+scala编写web接口
本人是Java開發(fā)者,有面向?qū)ο蟮幕A(chǔ),而Scala也是面向?qū)ο蟮恼Z言,學(xué)習(xí)后可快速入門。通過學(xué)習(xí)Scala的面向?qū)ο?和java面向?qū)ο箢愃?、Scala的高級函數(shù)(map,reduce等,和Java8中的stream編程類似)、Scala的隱式轉(zhuǎn)換(在Java中可通過spring aop實(shí)現(xiàn)增強(qiáng),Scala的隱式轉(zhuǎn)換較為方便)、Scala的模式匹配(類似Java的switch語句,但使用的訪問很廣)。這里通過Scala結(jié)合spring boot來實(shí)現(xiàn)spring mvc接口的開發(fā)。
添加pom依賴
先搭建spring boot項(xiàng)目,這里不細(xì)說
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.scala-lang
scala-library
${scala.version}
org.springframework.boot
spring-boot-starter-data-jpa
mysql
mysql-connector-java
org.springframework.boot
spring-boot-maven-plugin
net.alchim31.maven
scala-maven-plugin
3.2.1
compile-scala
compile
add-source
compile
test-compile-scala
test-compile
add-source
testCompile
incremental
${scala.version}/.,bvc;
-deprecation
-Xms64m
-Xmx1024m
其中Scala的plugin用于編譯、測試、打包scala的程序
配置
server:
port: 7777
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver #數(shù)據(jù)庫驅(qū)動
url: jdbc:mysql://localhost:3306/test?useSSL=false #本地?cái)?shù)據(jù)庫url,先在本地?cái)?shù)據(jù)庫中建立test這個(gè)庫
username: root #數(shù)據(jù)庫用戶名
password: 191016 #數(shù)據(jù)庫密碼
jpa:
hibernate:
ddl-auto: update #每次運(yùn)行程序,沒有表格會新建表格,表內(nèi)有數(shù)據(jù)不會清空,只會更新
database: mysql
項(xiàng)目結(jié)構(gòu)
image.png
其中controller層為程序入口
domain層為實(shí)體類
service層為業(yè)務(wù)邏輯層,提供事務(wù)控制
repository層為數(shù)據(jù)持久化層
實(shí)體類
@Entity
@Table
class Person {
@Id
@GeneratedValue
@BeanProperty
var id:Integer = _
@BeanProperty
var name:String = _
@BeanProperty
var sex:String = _
}
scala中無get/set方法
repository持久化層
trait PersonRepository extends CrudRepository[Person,Integer]{
}
trait類似于Java中接口的含義,這里繼承jpa的基本Repository
service層
@Service
class PersonService @Autowired()(personRepository: PersonRepository) {
/**
* 保存
*
* @param person 保存對象
* @return Person
*/
@Transactional
def save(person: Person): Person = {
personRepository.save(person)
}
/**
* 根據(jù)Id查詢
*
* @param id 查詢參數(shù)
* @return Person
*/
def selectPersonById(id: Integer): Person = {
personRepository.findOne(id)
}
}
這里的自動注入的方式和java中不相同,是寫在類名的后面
controller層
@RestController
@RequestMapping(Array("/v1/person"))
class PersonController @Autowired()(personService: PersonService) {
@PostMapping
def save(@RequestBody person: Person): Person = {
personService.save(person)
}
@GetMapping
def selectPersonById(@RequestParam id: Integer): Person = {
personService.selectPersonById(id)
}
}
這里的映射路徑和java中不同,必須傳一個(gè)數(shù)組,而java中是傳遞一個(gè)字符串
測試
啟動項(xiàng)目,通過postman測試
保存:
image.png
查看數(shù)據(jù)庫,保存成功。
image.png
查詢:
image.png
注意
Java和Scala可以相互調(diào)用,如Java寫的工具類,在Scala可直接使用,不用在重新寫一套Scala的工具類,反之亦然。
總結(jié)
以上是生活随笔為你收集整理的java web scala_spring boot+scala编写web接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx 上传 文件超时设置_Ngin
- 下一篇: ES6-16 WeakMap与WeakS