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.lang.String android.net.Uri.getLastPathSegment()’...

我有“用相机捕获图像”的问题,并将其存储到Firebase中.我认为该代码是正确的,因为它可以与“从图库中选择图像”一起使用.捕获完图像后,该应用程序停止了,并且没有存储在数据库中.我认为这对于android M和N是个问题.我只是看到其他类似的问题,但它们对我不起作用.我为此寻求帮…

数组的运用

一、数组的概念以及定义: 1、 数组是存储同一种数据类型多个元素的集合,也可以看作是一个容器。 2、数组既可以存储基本数据类型,也可以存储引用数据类型。 二、一维数组: 1、一维数组的定义: 数据类型 [ ] 数组名 ne…

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…

POJ 2288 Islands and Bridges(状压dp)

http://poj.org/problem?id2288 题意: 有n个岛屿,每个岛屿有一个权值V,一条哈密顿路径C1,C2,...Cn的值为3部分之和: 第1部分,将路径中每个岛屿的权值累加起来;第2部分,对…

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

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

web前端开发面试题(答案)

1.xhtml和html有什么区别? HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同:XHTML 元素必须被正确地嵌套。XHTML 元素必须被关闭。标签名必须用小写字母。XHTML 文档必须拥有根元素。 2.行内元素有哪些?块级元素…

mysql to mssql_MysqlToMsSql

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

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

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

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

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

Flyweight Design Pattern 共享元设计模式

就是利用一个类来完毕多种任务,不用每次都创建一个新类。 个人认为这个设计模式在C里面。好像能够就使用一个函数取代,利用重复调用这个函数完毕任务和重复利用这个类,好像差点儿相同。 只是既然是一个设计模式,那么就使用类来完毕…

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

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

Linux课堂笔记-第二天

Shell简介 在Linux系统中,shell是最常用程序,作用侦听用户命令,启动命令所指定的进程并将结果返回给用户。他还是一种程序设计语言,是系统维护时的重要工具。 两部分组成,#为命令行提示符;#为超级用户&…

java多属性的map_java - 具有多个参数的MapStruct QualifiedByName - 堆栈内存溢出

目前,MapStruct不支持具有多个源属性的映射方法。但是,在您的情况下,您可以使用1.2.0中的Context 。 根据我的理解, projId和code就像映射的帮助器一样,它们不用于映射目标属性。所以你可以做一些事情(它应该在理论上起…

用带参数的方法给空数组放元素,寻找数组里面的值是否存在。

package ch08;import java.util.Scanner;/** * Created by liwenj on 2017/7/20. */public class Person { String[] names new String[30];//把为null的元素添加内容 void addName(String name) { for (int i 0; i < names.length; i) { if (nam…

centos中配置java视频教程_安装CentOs

Redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作…

python-day8-赋值

# x10#链式赋值# abcdef10# print(a,b,c,d,e,f)#增量赋值# x10# ya# tempx# xy# ytemp# print(x,y)# x,yy,x# print(x,y)#值的解压# msghello# l[1,2,3]# a,b,c,d,emsg# print(a,b,c,d,e)# a,_,_,_,emsg# a,*_,emsg# print(a)# print(e)# dic{a:1,b:2,c:3}# x,y,zdic# print(x,…

java getapplicationcontext_java – getApplicationContext()中的空指针

我正在尝试以下代码,其中一个服务正在实现我的监听器&#xff1a;public class MyListenerClass extends Service implements MyListenerInterface {public void onCurrencyRecieved(MyEventClass event) {System.out.println("Coins Recieved - Listener Successful"…

怎样解决MySQL数据库主从复制延迟的问题?

1.网络超时2.慢查询3.流量 问题一&#xff1a;主库的从库太多&#xff0c;导致复制延迟从库数据以3-5个为宜&#xff0c;要复制的从节点数量过多&#xff0c;会导致复制延迟问题二&#xff1a;从库硬件比主库差&#xff0c;导致复制延迟查看Master和Slave的系统配置&#xff0c…

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

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

java jsonalias_将多个JSON字段映射到单个Java字段

简介本文中&#xff0c;教大家如何使用Jackson和Gson将不同的JSON字段映射到单个Java字段中。Maven依赖为了使用Jackson和Gson库&#xff0c;我们需要在POM中添加以下依赖项&#xff1a;com.google.code.gsongson2.8.5testcom.fasterxml.jackson.corejackson-databind2.9.8test…