scala 操作数据库的方法

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日

相关文章

  • 如何运行SpringBoot项目的方法

    如何运行Spring Boot项目的方法 Spring Boot是一个非常流行的Java开发框架,它提供了多种运行方式,包括命令行、Maven插件、Gradle插件等。本文将详细介绍如何运行Spring Boot项目的方法,包括命令行、Maven插件、Gradle插件等。 1. 命令行 使用命令行运行Spring Boot项目是最简单的方法。我们只需要在项目…

    Java 2023年5月14日
    00
  • java实现写入并保存txt文件的代码详解

    下面我会详细讲解Java实现写入并保存txt文件的代码详解。 1. 创建文件 要想写入并保存txt文件,首先需要创建一个文件,并确定写入的路径。可以使用Java中的File类来创建一个文件对象。在创建文件前需确定写入文件的路径,可以使用如下代码来实现: File file = new File("D:\\test\\test.txt");…

    Java 2023年5月20日
    00
  • Java 中的 BufferedWriter 介绍_动力节点Java学院整理

    Java 中的 BufferedWriter 介绍 什么是 BufferedWriter BufferedWriter 是 Java.io 包中提供的一个字符缓冲输出流,它内部封装了一个字符缓冲区(Buffer),可以提高字符输出效率。 BufferedWriter 的构造方法 BufferedWriter 提供了两个构造方法: public Buffere…

    Java 2023年5月26日
    00
  • 如何编写Java集成测试?

    当我们开发Java应用程序时,编写测试代码可以帮助我们检查和验证我们的代码是否正确。除了单元测试之外,集成测试也是一个非常重要的测试类型。在编写集成测试时,我们将多个组件集成在一起并测试它们之间的交互。下面是编写Java集成测试的完整使用攻略: 1. 确定要测试的组件 在编写集成测试之前,您需要确定要测试的组件,并将它们集成起来。通常情况下,这些组件可以是数…

    Java 2023年5月11日
    00
  • JBuilder2005单元测试之JUnit框架

    JBuilder 2005单元测试之JUnit框架攻略 什么是JUnit框架? JUnit是Java编程语言的编写单元测试的一个开源框架。其主要特点是简单易学,同时提供了丰富的API接口,可以很方便地进行单元测试和集成测试。 JBuilder 2005中如何使用JUnit框架? 安装JUnit框架 首先,需要从JUnit的官方网站(https://junit…

    Java 2023年6月15日
    00
  • Java毕业设计实战之财务预算管理系统的实现

    Java毕业设计实战之财务预算管理系统的实现 1. 确定项目需求 在设计财务预算管理系统之前,我们需要先明确项目需求,对整个系统的功能、架构、流程等方面有一个清晰的认识。一般而言,一个财务预算管理系统应该包括以下几个方面的功能: 用户登录和权限管理 预算制定和管理功能 预算执行和监控功能 预算分析和报告功能 针对以上需求,我们可以进行一个详细的需求分析,并制…

    Java 2023年5月24日
    00
  • Java Spring的refresh方法你知道吗

    当我们在Java Spring应用程序中使用对象以及bean定义时,有些情况下我们需要按需重新加载或刷新这些bean。在这种情况下,Java Spring提供了refresh方法,可以在运行时动态地重新加载或刷新bean。 什么是refresh方法 refresh方法是将ApplicationContext的状态清除并重新读取bean定义文件的方法。在调用r…

    Java 2023年5月31日
    00
  • 什么是Java单元测试?

    Java单元测试是在软件开发中的测试过程,它用于测试程序的单个单元或模块是否能够按照预期工作。这个单元可以是一个方法、一个类、一组类或整个应用程序等。单元测试的目的是帮助开发人员识别和修复软件中的缺陷,以确保软件在生产环境中能够正常运行。 使用攻略 选择测试框架 Java有许多单元测试框架,包括JUnit、TestNG、Spock等。推荐使用最为常用的JUn…

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