java web scala_spring boot+scala编写web接口

本人是Java开发者,有面向对象的基础,而Scala也是面向对象的语言,学习后可快速入门。通过学习Scala的面向对象(和java面向对象类似)、Scala的高级函数(map,reduce等,和Java8中的stream编程类似)、Scala的隐式转换(在Java中可通过spring aop实现增强,Scala的隐式转换较为方便)、Scala的模式匹配(类似Java的switch语句,但使用的访问很广)。这里通过Scala结合spring boot来实现spring mvc接口的开发。

添加pom依赖

先搭建spring boot项目,这里不细说

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 #数据库驱动

url: jdbc:mysql://localhost:3306/test?useSSL=false #本地数据库url,先在本地数据库中建立test这个库

username: root #数据库用户名

password: 191016 #数据库密码

jpa:

hibernate:

ddl-auto: update #每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新

database: mysql

项目结构

9c7ee8a0ddc9

image.png

其中controller层为程序入口

domain层为实体类

service层为业务逻辑层,提供事务控制

repository层为数据持久化层

实体类

@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)

}

/**

* 根据Id查询

*

* @param id 查询参数

* @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中不同,必须传一个数组,而java中是传递一个字符串

测试

启动项目,通过postman测试

保存:

9c7ee8a0ddc9

image.png

查看数据库,保存成功。

9c7ee8a0ddc9

image.png

查询:

9c7ee8a0ddc9

image.png

注意

Java和Scala可以相互调用,如Java写的工具类,在Scala可直接使用,不用在重新写一套Scala的工具类,反之亦然。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java小应用_java小应用

第一次使用简书记笔记,主要目的是为了加深印象,方便忘记时及时翻看。hello.java代码如下:import java.applet.Applet;import java.awt.*;public class hello extends Applet{private Font f1;public void init(){f1 new Font("宋体&quo…

java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果

这是一款HTML5 canvas橡皮擦擦拭效果。该效果通过canvas来制作遮罩层和擦拭用的橡皮擦,用户可以通过移动鼠标来移除遮罩层,效果非常炫酷。因为发代码有时会排版混乱,所以先发图演示了。源码已经打包好了,想学习的朋友可以下载练习…

mysql to mssql_MysqlToMsSql

MysqlToMsSql是一款简单易用的数据库迁移工具,这款软件功能强大,可以帮助用户将MySQL数据库内容转移到msSQL数据库中,采用可视化操作,支持预览,方便用户查看数据库,实用性强,有需要的用户快来下…

java延迟覆盖_高效Java第九条覆盖equals时总要覆盖hashCode

原标题:高效Java第九条覆盖equals时总要覆盖hashCode高效Java第九条覆盖equals时总要覆盖hashCode在每个覆盖了equals方法的类中,也必须覆盖hashCode方法。否则会导致该类无法与基于散列的集合一起正常运作。 hashCode约定在应用程序的执行期间&#xff…

原生js简单实现双向数据绑定原理

根据对象的访问器属性去监听对象属性的变化,访问器属性不能直接在对象中设置,而必须通过 defineProperty() 方法单独定义。 访问器属性的"值"比较特殊,读取或设置访问器属性的值,实际上是调用其内部特性:get…

java中write方法报错_Java中管道报错:Write end dead

今天看了下关于管道的通信,Java中的管道只能在同一进程的不同线程间通信。今天测试两个线程进行通信发现报错。下面是我测试的代码。package com.wpl.testIO;import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream;public …

神盾局特工第四季/全集Agents Of SHIELD迅雷下载

英文全名Agents Of SHIELD,第4季(2016)ABC. 本季看点:《神盾局特工》(Agents Of SHIELD)第三季季终集里,我们终于知道谁死了……但死的不是一个,而是两个。在这两集中,很多角色都遭遇过险境&…

php科学计数法转string,php如何将科学计数法转数字

php将科学计数法转数字的实现方法:首先通过if语句判断指定的数值是否为科学计数法;然后提取科学计数法中有效的数据;接着正式处理该数据;最后调用“convert_scientific_number_to_normal”方法实现转换即可。PHP将科学计数法转换为…

php8vsgo,服务端 I/O 性能:Node、PHP、Java、Go 的对比

原标题:服务端 I/O 性能:Node、PHP、Java、Go 的对比了解应用程序的输入/输出(I/O)模型意味着理解应用程序处理其数据的载入差异,并揭示其在真实环境中表现。或许你的应用程序很小,在不承受很大的负载时,这并不是个严重…

Python day8

阅读目录 为什么要用函数  函数的定义与调用  函数的返回值  函数的参数  本章小结返回顶部为什么要用函数 现在python届发生了一个大事件,len方法突然不能直接用了。。。 然后现在有一个需求,让你计算hello world的长度,你怎么计算&…

java创建对象过七夕,想 new 个对象过七夕,她却抛了异常

原标题:想 new 个对象过七夕,她却抛了异常关注 “”导读:单身之痛......作者 | 轩辕之风来源 | 编程技术宇宙(ID:xuanyuancoding)七夕又到了,单身汪们太难了,每年不仅要经历双十一,要经历2.14&a…

【Redis】解析Redis和Java传递数据

在Java中使用Redis之前需要导入 jedis.jar 包,由于Redis是基于key-value进行数据存储,java中的数据存储到Redis中有许多方式,这里笔者介绍采用JSON字符串和对象序列化两种方式。 1,使用JSON方式 首先将Java对象转化为JSON字符串 …

C#带按钮的文本框TextBoxContainButton

经常需要用到各种组合控件,每次组合太麻烦,通过打包成自定义控件,方便调用。 带按钮的文本框,如下图: 文本框内可以输入文本,响应文本框内容变化事件,按钮可以设置点击事件,图标 通过…

Windows单机配置Zookeeper环境

转自:http://www.jianshu.com/p/f7037105db46 首先要确保机器已经安装好java环境,并且配置好环境变量 http://apache.fayea.com/zookeeper/current/ 下载后,解压缩到硬盘,我这里解压到了 D:\WorkSoftware\zookeeper_3.4.9 解压缩在…

三层架构—简析

三层学习完了,第一次验收的时候,自己理解的也不是非常到位,后来又又一次敲了一遍登陆样例,查阅了一些资料 进行第二次验收才感觉清晰了很多。之前画时序图时我就想过时序图基本上也是非常好的体现了三层,当时也和别人讨…

机房收费系统之结账

其实,我认为机房收费系统中结账的部分是耗我精力最多的。首先我就不明确结账是干嘛的,所以一上来就晕乎乎。后来看了一篇博客说结账方便老板管理的才明确了为什么是“操作员”。这里面要理清的一点,结账的内容是未结账的。 暂时汇总的信息&am…

Java线上应用故障排查之一:高CPU占用

一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。 以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。 根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。 …

Java并发编程实战 代码bug,Java并发编程实战(1)- 并发程序的bug源头

概述并发编程一般属于编程进阶部分的知识,它会涉及到很多底层知识,包括操作系统。编写正确的并发程序是一件很困难的事情,由并发导致的bug,有时很难排查或者重现,这需要我们理解并发的本质,深入分析Bug的源…

ajax小结

转载于:https://www.cnblogs.com/infernoyy/p/7250548.html

app推送以及提示音java,springboot 整合 Jpush 极光推送

产品简介:JPush 是经过考验的大规模 App 推送平台,每天推送消息数超过 5 亿条。 开发者集成 SDK 后,可以通过调用 API 推送消息。同时,JPush 提供可视化的 web 端控制台发送通知,统计分析推送效果。 JPush 全面支持 An…