`
avidmouse
  • 浏览: 14448 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

play framework anorm orm 化构想

阅读更多

play 框架引入了一个简单的数据库访问层:anorm。

使用anorm做模型层,代码大致如下:

 

case class Dog(id: Pk[Long], name: String, age: String)

object Dog {
  val simple = get[Pk[Long]]("dog.id") ~ str("name") ~ int("age") map {
    case id ~ name ~ age => Dog(id, name, age)
  }

  def findById(id: Long) = DB.withConnection {
    implicit connection =>
      SQL("select * from dog where id = {id}").on('id -> id).as(Dog.simple.singleOpt)
  }

  def create(dog: Dog) = DB.withConnection {
    implicit connection =>
      val idOpt: Option[Long] = SQL(
        """
          insert into dog (name, age)
          values ({name}, {age})
        """
      ).on(
        'name -> dog.name,
        'age -> dog.age
      ).executeInsert()
      val result = dog.copy(id = Id(idOpt.get))
      result
  }

  def update(id: Long, dog: Dog) = DB.withConnection {
    implicit connection =>
      SQL(
        """
        update dog set name = {name}, age = {age} where id = {id}
        """
      ).on(
        'id -> id,
        'name -> dog.name,
        'age -> dog.age
      ).executeUpdate()
  }

}

 

 

    明显比JPA繁杂,那么,有没有办法封装下anorm,使它更象orm,提供更好的维护性,更快的开发速度?

    在scala 2.10中,引入的试验性功能:macro, reflection,或许就是问题的答案(现在只是一个构想,会抽空实现验证下),还是代码为先:

 

trait Modal[T] {
  val simple = macro ModalMacroImpl.simple[T]
  def findById(id: Long): Option[T] = macro ModalMacroImpl.find
  def create(o: T) = macro ModalMacroImpl.create
  def update(id: Long, o: T) = macro ModalMacroImpl.update
  def list = macro ModalMacroImpl.list
}

object Dog extends Modal[Dog] {
  def findByName(name: String): Option[T] = macro ModalMacroImpl.find
}

 

 

通过Modal及提供的macro,简化了model的定义。

ModalMacroImpl可以通过reflaction实现,并且macro是编译时增强的,不会对性能造成影响。

1
0
分享到:
评论
2 楼 mainlove 2013-04-11  
scala 还在引入杀手级的功能 macro, reflection  真是越来越复杂
1 楼 mainlove 2013-04-11  
orm和关系数据本身就有抵触

slick那种函数式的切合 感觉还不错

相关推荐

    play framework api,play! framework api,play api

    1. **模块化设计**:Play Framework采用了模块化的设计,使得开发者可以方便地添加或替换特定功能,如模板引擎、持久化层等。 2. **异步编程**:Play Framework基于Akka框架,支持非阻塞I/O和异步处理,提高了Web...

    Play Framework应用程序框架 v2.7.9.zip

    4. **模块化结构**:Play Framework支持模块化,允许开发者选择或创建自己的模块来扩展框架功能。 5. **强大的路由系统**:通过简洁的路由定义,可以将URL映射到控制器方法,方便处理HTTP请求。 6. **模板引擎**:...

    Play framework 2.0 -第一个应用程序

    Play Framework以其简洁的API、模块化的设计和强大的工具集,使得开发Web应用变得更加高效和愉快。继续深入学习,你会发现更多关于路由、模板引擎、异步处理、安全控制以及与其他服务集成的强大功能。

    playframework 框架学习之路 1

    Play Framework 是一个基于Java和Scala的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式。在“Playframework框架学习之路 1”中,我们可能要探讨这个框架的基础概念、安装过程以及如何创建一个简单的应用...

    Play-Utils是一个专门为PlayFramework开发的实用工具包模块

    除了 Play 自带的 Anorm 或 Slick 数据库支持外,Play-Utils 可能包含了对 ORM(对象关系映射)的扩展,例如简化 CRUD 操作,提供事务管理,以及优化查询性能的工具。 3. **验证和表单处理**: 在 Web 开发中,...

    Play framework 2.0入门教程(三)的源代码,Play留言板

    模型通常使用Ebean或Anorm等持久化库来与数据库交互。 2. **视图(View)**:视图通常是HTML模板文件,可以使用Scala或Java语法进行编写。在`todolist`中,我们可能会找到一个`message.scala.html`文件,它定义了...

    Play Framework应用程序框架 v3.0.1.zip

    4. **模板引擎**:Play提供了Ebean和Anorm等多种ORM工具,以及Twirl模板引擎,用于生成HTML、XML或其他格式的响应。Twirl模板与Scala语言紧密集成,提供了一种类型安全的方式来编写视图。 5. **测试支持**:Play ...

    play framework 学生信息管理系统

    通常会使用Anorm或Slick等库来实现ORM(对象关系映射),简化数据库操作。 6. **表单验证**:Play Framework 提供了表单处理和验证功能,可以方便地处理用户提交的数据,并进行前端验证和后端验证。 7. **异步编程...

    playframework增删改查

    安装完成后,创建一个新的Play项目,可以通过命令行运行 `play new project-name`,这将初始化一个新的项目结构。 在项目中,你需要配置数据库连接。在 `conf/application.conf` 文件中,添加如下MySQL数据库的配置...

    playframework学习资料

    7. **模块化设计**:Play 社区提供了丰富的插件和模块,开发者可以根据需求选择或自定义,如Anorm(一个轻量级的SQL库)和/play2-auth(认证和授权模块)。 8. **JSON支持**:在许多现代Web应用中,JSON是最常见的...

    Play Framework应用程序框架 v2.7.9-源码.zip

    3. **模板引擎**:Play支持Ebean、Anorm等多种ORM框架,同时内置了模板引擎用于生成HTML响应。`play.templates.Template`和`play.twirl.api.Html`等类揭示了模板编译和执行的过程。 4. **Akka集成**:Play ...

    Play Framework应用程序框架 v2.8.7-源码.zip

    4. **模板引擎**:Play支持Ebean、Anorm等多种ORM工具,用于数据库操作。同时,它内置了Twirl模板引擎,用于生成HTML或其他类型的响应,提供了丰富的语法糖和模板继承功能。 5. **热加载**:在开发过程中,Play ...

    playframework做的demo

    Play Framework 是一个基于Java和Scala的高性能Web应用框架,它以简洁、模块化和类型安全的设计理念著称。在这个“playframework做的demo”项目中,我们可以深入探讨Play Framework的一些核心特性,以及如何利用它来...

    playframework部分介绍及部分功能简介,小实例一个

    1. **模块化结构:** Play Framework 的设计原则之一是模块化,这使得开发者可以轻松地添加或移除功能,根据项目需求定制框架。它包含了诸如模板引擎、JSON处理、数据库集成等模块。 2. **异步编程模型:** 与传统...

    Play framework 2.0入门教程(四)的源代码,Play留言板(数据库版)

    Play框架支持JDBC和Anorm等库来操作数据库,本例中可能会使用Anorm,这是一个轻量级的SQL模odel库,允许我们直接用Scala代码编写SQL查询。 接着,我们将定义数据模型。例如,可以创建一个`Message`模型类,包含`id`...

    Play Framework Cookbook 代码

    3. **模板引擎**:Play支持Ebean和Anorm等数据库操作库,用于数据持久化。同时,它也提供了模板引擎(如Twirl)来创建动态HTML页面。在`app/views`目录下,可以看到`.scala.html`文件,这些都是模板文件,可以结合...

    PlayFramework应用框架

    Play拥有众多社区开发的插件,如Anorm(一个轻量级SQL库),或是用于处理JSON和XML的插件,这些插件扩展了Play的功能,使开发者能够更灵活地构建应用程序。 9. **国际化与本地化**: Play支持多语言应用,可以...

    play框架jar包

    - **数据库支持**:Play框架可以与多种数据库配合,例如通过Ebean或Anorm实现ORM操作,相关的jar包会提供数据库连接和查询支持。 - **测试工具**:Play提供了测试工具和插件,如模拟HTTP请求的FakeRequest,以及...

    mastering play framework for scala

    8. **国际化与本地化**:介绍如何在Play应用中实现多语言支持,以及时间、货币等的本地化处理。 9. **性能优化与部署**:讨论如何优化Play应用的性能,包括缓存策略、压缩响应、负载均衡等,以及如何将应用部署到...

Global site tag (gtag.js) - Google Analytics