scala 操作数据库的方法

yizhihongxing

Scala操作数据库的方法

Scala是一门面向对象的静态类型编程语言,和Java一样,也是常用语言之一。Scala在Java语言基础上融入了面向对象和函数式编程的特性,并且Scala具有更为简洁的语法设计,在Java编写的代码中,依赖于Hibernate、Mybatis等ORM框架将内存中的类实例映射到数据库中,而Scala语言一般会使用Slick框架来进行数据库操作。

1. 配置依赖

Scala访问数据库,需要导入需要的依赖包。

libraryDependencies += "com.typesafe.slick" %% "slick" % "3.3.3"
libraryDependencies += "com.typesafe.slick" %% "slick-hikaricp" % "3.3.3"
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.47"

2. 建立连接

使用Database.forConfig方法连接数据库,这里以MySQL为例。

import slick.jdbc.MySQLProfile.api._
import scala.concurrent.ExecutionContext.Implicits.global

val db = Database.forConfig("mysql")//里面mysql就是application.conf里面写的名字

3. 定义表结构

通过定义case class来定义表结构:

case class User(id: Long, name: String, age: Int)

并且定义对应的表的Table类:

class UserTable(tag: Tag) extends Table[User](tag, "user") {
  def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  def name = column[String]("name")
  def age = column[Int]("age")
  def * = (id, name, age) <> (User.tupled, User.unapply)
}

4. CRUD操作

使用Slick进行CRUD操作非常简单,只需要组合使用Slick提供的语法即可。

(1)创建表

根据定义好的Table类,使用Slick提供的createIfNotExists().run方法进行建表:

val userTable = TableQuery[UserTable]
db.run(userTable.schema.createIfNotExists)

(2)插入数据

使用+=操作符插入数据:

val user = User(1L, "John Doe", 25)
val insertAction = userTable += user
db.run(insertAction).map { count =>
  println(s"inserted $count rows")
}

(3)查询数据

使用result.headOption查询数据:

val queryAction = userTable.filter(_.id === 1L).result.headOption
db.run(queryAction).map { userOpt =>
  userOpt match {
    case Some(user) => println(user)
    case None => println("no result")
  }
}

(4)更新数据

使用update操作更新数据:

val updateAction = userTable.filter(_.id === 1L).map(_.age).update(32)
db.run(updateAction).map { count =>
  println(s"updated $count rows")
}

(5)删除数据

使用delete操作删除数据:

val deleteAction = userTable.filter(_.id === 1L).delete
db.run(deleteAction).map { count =>
  println(s"deleted $count rows")
}

5. 完整示例

下面是一个完整的示例,演示了如何使用Slick进行数据库操作。

import slick.jdbc.MySQLProfile.api._

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Await
import scala.concurrent.duration.Duration

case class User(id: Long, name: String, age: Int)

class UserTable(tag: Tag) extends Table[User](tag, "user") {
  def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  def name = column[String]("name")
  def age = column[Int]("age")
  def * = (id, name, age) <> (User.tupled, User.unapply)
}

object Main {
  val db = Database.forConfig("mysql")
  val userTable = TableQuery[UserTable]

  // 建表
  def createTable() = {
    val action = userTable.schema.createIfNotExists
    Await.result(db.run(action), Duration.Inf)
  }

  // 插入数据
  def insertData() = {
    val user = User(1L, "John Doe", 25)
    val action = userTable += user
    Await.result(db.run(action), Duration.Inf)
  }

  // 查询数据
  def queryData() = {
    val action = userTable.filter(_.id === 1L).result.headOption
    val userOpt = Await.result(db.run(action), Duration.Inf)
    userOpt match {
      case Some(user) => println(user)
      case None => println("no result")
    }
  }

  // 更新数据
  def updateData() = {
    val action = userTable.filter(_.id === 1L).map(_.age).update(32)
    val count = Await.result(db.run(action), Duration.Inf)
    println(s"updated $count rows")
  }

  // 删除数据
  def deleteData() = {
    val action = userTable.filter(_.id === 1L).delete
    val count = Await.result(db.run(action), Duration.Inf)
    println(s"deleted $count rows")
  }

  def main(args: Array[String]): Unit = {
    createTable()

    insertData()

    queryData()

    updateData()

    deleteData()

    db.close()
  }
}

这是一个使用Slick进行简单数据库操作的例子,Scala在数据库操作上的代码结构和Java有所不同,但是使用起来却更为简单直观,而且代码量也比Java少不少。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:scala 操作数据库的方法 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • 原生Ajax之全面了解xhr的概念与使用

    原生Ajax之全面了解xhr的概念与使用 什么是Ajax? Ajax是指使用JavaScript、XMLHttpRequest对象、DOM、CSS等技术在不刷新页面的情况下实现异步更新页面数据的一种技术。我们通常使用Ajax来实现动态加载数据、实时交互等功能。 XMLHttpRequest对象 XMLHttpRequest对象是Ajax的核心之一。它是浏览器…

    Java 2023年5月20日
    00
  • java反编译工具Bytecode-Viewer分享

    Java反编译工具Bytecode-Viewer分享 介绍 Bytecode-Viewer是一款开放源码的Java反编译工具,支持多种不同的字节码格式并能够轻松破解Java代码。 安装和运行 下载Bytecode-Viewer的安装包并解压缩。 双击运行安装包,按照安装向导完成安装。 运行安装后的Bytecode-Viewer程序。 使用方法 打开Java字…

    Java 2023年5月26日
    00
  • JGroups实现聊天小程序

    以下是关于使用JGroups实现聊天小程序的完整攻略,希望能够帮助您: JGroups实现聊天小程序 介绍 JGroups是一个用于构建群组应用程序的工具包,该工具包允许应用程序中的各个节点之间相互通信和协作。在本教程中,我们将使用JGroups构建一个简单的聊天应用程序。 准备工作 在开始构建JGroups聊天应用程序之前,我们需要首先安装Java和Mav…

    Java 2023年5月23日
    00
  • Springboot如何使用Aspectj实现AOP面向切面编程

    下面我将为你详细讲解如何使用Aspectj实现AOP面向切面编程。 什么是AOP? AOP,全称为Aspect Oriented Programming,即面向切面编程。它是一种编程思想,与OOP(面向对象编程)相对。AOP的主要优势在于能够将系统中的横切关注点(例如日志输出、权限校验、事务管理等)与核心业务逻辑分离。从而方便开发复用性更强的组件。Aspec…

    Java 2023年5月19日
    00
  • Java基础MAC系统下IDEA连接MYSQL数据库JDBC过程

    下面是详细讲解Java基础MAC系统下IDEA连接MYSQL数据库JDBC过程的完整攻略: 1. 准备工作 在开始连接MySQL数据库之前,需要准备以下工作:- 安装JDK:在MAC系统下使用IntelliJ IDEA开发Java程序,需要先安装JDK;- 下载MySQL Connector/J:使用Java连接MySQL数据库需要使用MySQL提供的JDB…

    Java 2023年6月16日
    00
  • Android UI设计与开发之使用ViewPager实现欢迎引导页面

    下面是使用ViewPager实现欢迎引导页面的完整攻略: 1. 准备工作 在开始实现之前需要进行一些准备工作: 在Android studio中创建一个新项目。 在app目录下的build.gradle文件中添加以下依赖: implementation ‘androidx.viewpager2:viewpager2:1.0.0’ 创建一个初始的欢迎引导布局文…

    Java 2023年6月1日
    00
  • Java中实现文件预览的功能(实例代码)

    让我来为你详细讲解一下 “Java 中实现文件预览的功能(实例代码)” 的完整攻略。 1. 确定需求 在开始编写代码之前,我们需要先确定需求,明确要实现的功能和效果。在本例中,我们的需求是实现文件预览的功能,具体来说,就是能够在浏览器中打开并预览常见的文本、图片、PDF 等格式的文件。 2. 选择技术方案 实现文件预览的技术方案有很多,常见的包括使用第三方工…

    Java 2023年6月15日
    00
  • 深入了解Java核心类库–Arrays类

    深入了解Java核心类库–Arrays类 Arrays类概述 Arrays类位于java.util包中,提供了各种对数组进行处理的方法。其中包括: 对数组进行排序、搜索、拷贝、填充、比较等操作 对数组进行操作时,提供了对基本类型和对象类型数组的支持 Arrays类中的方法均为静态方法,可通过Arrays.xxx()的方式直接调用。 常用方法详解 排序方法 …

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部