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日

相关文章

  • Eclipse启动Tomcat时报Error loading WebappClassLoader错误的解决方法

    下面是详细讲解“Eclipse启动Tomcat时报Error loading WebappClassLoader错误的解决方法”的完整攻略。 1.问题分析 当我们在Eclipse中启动Tomcat时,有可能会遇到以下错误: Error loading WebappClassLoader context: /project delegate: false re…

    Java 2023年5月19日
    00
  • hibernate测试时遇到的几个异常及解决方法汇总

    Hibernate测试时遇到的几个异常及解决方法汇总 在使用Hibernate进行开发时,我们常常会遇到各种异常以及错误提示,本文将总结一些常见的异常及其解决方法。 环境搭建异常:ClassNotFountException 在进行Hibernate的开发之前,我们需要搭建好相应的开发环境,如JDK、IDE、数据库等。如果其中的某一个组件环境没有搭建好,可能…

    Java 2023年5月19日
    00
  • Springmvc模式上传和下载与enctype对比

    SpringMVC是一款开源的轻量级Web框架,支持MVC(Model-View-Controller)模式,以及RESTful风格的编程。SpringMVC提供了一个Spring MVC文件上传和下载的处理器,可以处理文件上传和下载的请求。关于SpringMVC模式的上传和下载,我们重点讲解一下enctype对比。 enctype 首先,我们需要明白enc…

    Java 2023年6月15日
    00
  • Java实战在线选课系统的实现流程

    Java实战在线选课系统的实现流程 本文主要介绍Java实战在线选课系统的实现流程。在这个系统中,用户可以浏览课程列表、查看课程详情、选课、取消选课等操作。系统采用Java Web技术实现,包括前端使用HTML、CSS和JavaScript,后端使用Spring框架、MyBatis框架和MySQL数据库。 前端实现 前端主要实现用户界面,包括课程列表展示和课…

    Java 2023年5月24日
    00
  • response.setContentType()参数以及作用详解

    当我们需要将数据响应到网站页面时,需要使用 HttpServletResponse 对象。其中,setContentType 方法就是设置响应格式的方法。 该方法唯一的参数是字符串,用于指定响应数据的格式。格式包括 MIME 类型、字符编码等。常见的参数值包括: text/html : HTML 文本 text/plain : 纯文本 application…

    Java 2023年6月15日
    00
  • JSP验证码简单生成方法

    当我们网站需要进行用户登录、注册等操作时,我们通常需要使用验证码来防止机器人或者是恶意攻击,本文就来详细讲解一下如何使用JSP生成验证码。 一、验证码的生成方法 验证码的生成方法可以大致划分为以下步骤: 生成随机字符串 将随机字符串绘制成图片 将图片输出到网页上并传输随机字符串的值到后台进行验证 二、实现步骤 1. 生成随机字符串 使用Java的Random…

    Java 2023年6月15日
    00
  • Java操作Excel的示例详解

    Java操作Excel的示例详解 在 Java 工程中,对 Excel 进行操作是一个比较常见的需求。下面将会详细讲解如何使用 Java 操作 Excel 文档。 前置条件 在开始操作 Excel 文件前,需要先将相应的依赖项添加到 Maven 或 Gradle 项目中: Maven 在 pom.xml 文件中添加以下依赖项: <dependency&…

    Java 2023年5月20日
    00
  • Java日常练习题,每天进步一点点(4)

    Java日常练习题每天进步一点点(4)的完整攻略如下: 1. 题目描述 本题共有两道小题: 题目1:设计一个验证码,验证码中包含字母和数字,并且验证码的长度为6位。 题目2:设计一个判断两个字符串是否可变换而成的函数,例如:输入字符串abc和bca,输出true。 2. 解题思路 题目1 设计验证码需要随机生成字母和数字,并且验证码的长度为6位。可以使用以下…

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