使用Scala进行SQL数据访问

当今的现代应用程序框架带有易于进行sql数据访问的承诺。 难怪我们为什么有这么多框架可以使发出查询和处理事务变得更加容易。 对于数据库,SQL是大多数应用程序的通用语言。

Play随附JDBC插件。 我们先前遇到了JDBC插件,以便修改我们的数据库架构。

第一步是包括jdbc和Evolutions模块。

libraryDependencies += evolutions
libraryDependencies += jdbc

然后,我们将定义所需的连接字符串。 我们将使用一个简单的h2数据库。 该配置已添加到application.conf中。

db.default.driver = org.h2.Driver
db.default.url =” jdbc:h2:/ tmp / defaultdatabase”

然后,我们添加一个用于创建用户表的脚本。

# Users schema

# --- !Ups

CREATE TABLE users (
    id bigint(20) NOT NULL AUTO_INCREMENT,
    email varchar(255) NOT NULL,
    first_name varchar(255) NOT NULL,
    last_name varchar(255) NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY (email)
);

# --- !Downs

DROP TABLE users;

在创建存储库类之前,让我们检查一下jdbc插件为我们提供了什么。

我们有简单的getConnection方法,负责返回jdbc连接。 这类似于Java的DataSource.getConnection。 由于必须关闭连接,因此要格外注意。

val connection = db.getConnection()
connection.close()

下一个方法是withConnection 。 通过使用withConnection,您可以获得Play为您管理连接。 您要做的就是传递带有jdbc操作的代码块。

def fetchUsers(): List[User] = {

    db.withConnection { conn =>

      val stmt = conn.createStatement
      var rs = stmt.executeQuery("SELECT*FROM users");
      val listBuffer = ListBuffer[User]()

      while(rs.next()) {

        listBuffer.append(User(Option(rs.getLong("id")),rs.getString("email"),rs.getString("first_name"),rs.getString("last_name")))
      }

      listBuffer.toList
    }
  }

如您在上面看到的,我们刚刚返回了用户条目列表。

最后但并非最不重要的是withTransaction 。 您已经猜对了,您收到的是自动提交设置为false的连接。

def addUser(user:User): User = {

    db.withTransaction { conn =>
      val stmt = conn.createStatement

      val insertQuery = "INSERT INTO users ( email, first_name, last_name) VALUES( '"+user.email+"', '"+user.firstName+"','"+user.lastName+"') "
      stmt.executeUpdate(insertQuery,Statement.RETURN_GENERATED_KEYS)
      val resultSet = stmt.getGeneratedKeys;
      if(resultSet.next()) {
        val id = resultSet.getLong(1);
        new User(Option(id),user.email,user.firstName,user.lastName)
      } else {
        throw new Exception("User not persisted properly")
      }
    }
  }

在上面的示例中,用户被保留。 万一失败,我们将抛出异常,事务将回滚。

综上所述,我们刚刚检查了如何使用play访问sql数据库。 我们还检查了播放api提供的额外功能,除了熟悉的jdbc api。 目前为止就这样了! 随时检查github上的代码。

翻译自: https://www.javacodegeeks.com/2017/05/sql-data-access-play-using-scala.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值