`
隐形的翅膀
  • 浏览: 498408 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PlayFrameWork 注解

 
阅读更多
Play Framework框架 JPA常用注解
1、@Entity(name="EntityName")
必须 ,name 为可选 , 对应数据库中一的个表

2、@Table(name="",catalog="",schema="")
可选 , 通常和 @Entity 配合使用 , 只能标注在实体的 class 定义处 , 表示实体对应的数据库表的信息
name: 可选 , 表示表的名称 . 默认地 , 表名和实体名称一致 , 只有在不一致的情况下才需要指定表名
catalog: 可选 , 表示 Catalog 名称 , 默认为 Catalog("").
schema: 可选 , 表示 Schema 名称 , 默认为 Schema("").

3、@id
必须
@id 定义了映射到数据库表的主键的属性 , 一个实体只能有一个属性被映射为主键 . 置于 getXxxx() 前 .

4、@GeneratedValue(strategy=GenerationType,generator="")
可选
strategy: 表示主键生成策略 , 有 AUTO,INDENTITY,SEQUENCE 和 TABLE 4 种 , 分别表示让 ORM 框架自动选择 ,
根据数据库的 Identity 字段生成 , 根据数据库表的 Sequence 字段生成 , 以有根据一个额外的表生成主键 , 默认为 AUTO
generator: 表示主键生成器的名称 , 这个属性通常和 ORM 框架相关 , 例如 ,Hibernate 可以指定 uuid 等主键生成方式 .
示例 :
    @Id
    @GeneratedValues(strategy=StrategyType.SEQUENCE)
    public int getPk() {
       return pk;
    }

5、@Basic(fetch=FetchType,optional=true)
可选
@Basic 表示一个简单的属性到数据库表的字段的映射 , 对于没有任何标注的 getXxxx() 方法 , 默认即为 @Basic
fetch: 表示该属性的读取策略 , 有 EAGER 和 LAZY 两种 , 分别表示主支抓取和延迟加载 , 默认为 EAGER.
optional: 表示该属性是否允许为 null, 默认为 true
示例 :
    @Basic(optional=false)
    public String getAddress() {
       return address;
    }

6、@Column
可选
@Column 描述了数据库表中该字段的详细定义 , 这对于根据 JPA 注解生成数据库表结构的工具非常有作用 .
name: 表示数据库表中该字段的名称 , 默认情形属性名称一致
nullable: 表示该字段是否允许为 null, 默认为 true
unique: 表示该字段是否是唯一标识 , 默认为 false
length: 表示该字段的大小 , 仅对 String 类型的字段有效
insertable: 表示在 ORM 框架执行插入操作时 , 该字段是否应出现 INSETRT 语句中 , 默认为 true
updateable: 表示在 ORM 框架执行更新操作时 , 该字段是否应该出现在 UPDATE 语句中 , 默认为 true. 对于一经创建就不可以更改的字段 , 该属性非常有用 , 如对于 birthday 字段 .
columnDefinition: 表示该字段在数据库中的实际类型 . 通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型 , 但是对于 Date 类型仍无法确定数据库中字段类型究竟是 DATE,TIME 还是 TIMESTAMP. 此外 ,String 的默认映射类型为 VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB 或 TEXT 字段类型 , 该属性非常有用 .
示例 :
    @Column(name="BIRTH",nullable="false",columnDefinition="DATE")
    public String getBithday() {
       return birthday;
    }

7、@Transient
可选
@Transient 表示该属性并非一个到数据库表的字段的映射 ,ORM 框架将忽略该属性 .
如果一个属性并非数据库表的字段映射 , 就务必将其标示为 @Transient, 否则 ,ORM 框架默认其注解为 @Basic
示例 :
    // 根据 birth 计算出 age 属性
    @Transient
    public int getAge() {
       return getYear(new Date()) - getYear(birth);
    }

8、@ManyToOne(fetch=FetchType,cascade=CascadeType )
可选
@ManyToOne 表示一个多对一的映射 , 该注解标注的属性通常是数据库表的外键
optional: 是否允许该字段为 null, 该属性应该根据数据库表的外键约束来确定 , 默认为 true
fetch: 表示抓取策略 , 默认为 FetchType.EAGER
cascade: 表示默认的级联操作策略 , 可以指定为 ALL,PERSIST,MERGE,REFRESH 和 REMOVE 中的若干组合 , 默认为无级联操作
targetEntity: 表示该属性关联的实体类型 . 该属性通常不必指定 ,ORM 框架根据属性类型自动判断 targetEntity.
示例 :
    // 订单 Order 和用户 User 是一个 ManyToOne 的关系
    // 在 Order 类中定义
    @ManyToOne()
    @JoinColumn(name="USER")
    public User getUser() {
       return user;
    }

9、@JoinColumn
可选
@JoinColumn 和 @Column 类似 , 介量描述的不是一个简单字段 , 而一一个关联字段 , 例如 . 描述一个 @ManyToOne 的字段 .
name: 该字段的名称 . 由于 @JoinColumn 描述的是一个关联字段 , 如 ManyToOne, 则默认的名称由其关联的实体决定 .
例如 , 实体 Order 有一个 user 属性来关联实体 User, 则 Order 的 user 属性为一个外键 ,
其默认的名称为实体 User 的名称 + 下划线 + 实体 User 的主键名称
示例 :
    见 @ManyToOne

10、@OneToMany(fetch=FetchType,cascade=CascadeType)
可选
@OneToMany 描述一个一对多的关联 , 该属性应该为集体类型 , 在数据库中并没有实际字段 .
fetch: 表示抓取策略 , 默认为 FetchType.LAZY, 因为关联的多个对象通常不必从数据库预先读取到内存
cascade: 表示级联操作策略 , 对于 OneToMany 类型的关联非常重要 , 通常该实体更新或删除时 , 其关联的实体也应当被更新或删除
例如 : 实体 User 和 Order 是 OneToMany 的关系 , 则实体 User 被删除时 , 其关联的实体 Order 也应该被全部删除
示例 :
    @OneTyMany(cascade=ALL)
    public List getOrders() {
       return orders;
    }

11、@OneToOne(fetch=FetchType,cascade=CascadeType)
可选
@OneToOne 描述一个一对一的关联
fetch: 表示抓取策略 , 默认为 FetchType.LAZY
cascade: 表示级联操作策略
示例 :
    @OneToOne(fetch=FetchType.LAZY)
    public Blog getBlog() {
       return blog;
    }

12、@ManyToMany
可选
@ManyToMany 描述一个多对多的关联 . 多对多关联上是两个一对多关联 , 但是在 ManyToMany 描述中 , 中间表是由 ORM 框架自动处理
targetEntity: 表示多对多关联的另一个实体类的全名 , 例如 :package.Book.class
mappedBy: 表示多对多关联的另一个实体类的对应集合属性名称
示例 :
    User 实体表示用户 ,Book 实体表示书籍 , 为了描述用户收藏的书籍 , 可以在 User 和 Book 之间建立 ManyToMany 关联
    @Entity
    public class User {
       private List books;
       @ManyToMany(targetEntity=package.Book.class)
       public List getBooks() {
           return books;
       }
       public void setBooks(List books) {
           this.books=books;
       }
    }
 
    @Entity
    public class Book {
       private List users;
       @ManyToMany(targetEntity=package.Users.class, mappedBy="books")
       public List getUsers() {
           return users;
       }
       public void setUsers(List users) {
           this.users=users;
       }
    }
两个实体间相互关联的属性必须标记为 @ManyToMany, 并相互指定 targetEntity 属性 ,
需要注意的是 , 有且只有一个实体的 @ManyToMany 注解需要指定 mappedBy 属性

13、@TransactionAttribute
事务管理服务
最有用的容器服务可能就是事务管理服务,当应用出现失败或异常时,它保证了数据库的完整性。你可以简单地将为一个 POJO 方法申明它的事务属性。这样容器就可以在合适的上下文中运行这个方法。最常见的事务是定义在 session bean 的方法上,方法中所有的数据库操作只有在方法正常退出时才会提交,如果方法抛出未捕获的异常,事务管理将回滚所有的变更。

14、@PersistenceContextType

当Play发现javax.persistence.Entity时, 会自动启动Hibernate entity manager

JPA entity manager is started you can get it from the application cod

Query query = JPA.em().createQuery("select * from Article");
    List<Article> articles = query.getResultList();
    render(articles);

事务管理。

Play will automatically manage transactions for you. It will start a transaction for each HTTP request and commit it when the HTTP response is sent. If your code throws an exception, the transaction will automatically rollback.

If you need to force transaction rollback from the application code, you can use the JPA.setRollbackOnly() method.

Find by ID

The simplest way to find an object.

Post aPost = Post.findById(5L);

Find all

List<Post> posts = Post.findAll();

This is the simplest way to retrieve all posts, but you can do the same using:

List<Post> posts = Post.all().fetch();

This allows you to paginate results:

List<Post> posts = Post.all().fetch(100); // 100 max posts

or even,

List<Post> posts = Post.all().from(50).fetch(100); // 100 max posts start at

#{if licData.daysBeforeExpired<=180 && licData.daysBeforeExpired>0}
<div class="common-note wornning" style="margin-top:13px;margin-bottom:16px;">
<p>
#{if licData.daysBeforeExpired>1}
&{'license.page.free.expiring',licData.daysBeforeExpired}
#{/if}
#{if licData.daysBeforeExpired<=1}
&{'license.page.free.expiring.1day',licData.daysBeforeExpired}
#{/if}
</p>
</div>
#{/if}

Query query = JPA.em().createQuery("select * from Article");
List<Article> articles = query.getResultList();
render(articles);

List<Post> posts = Post.all().from(50).fetch(100); // 100 max posts start at 50

Play应用开发者一开始可能经常会犯的错误是使用Hibernate的@Entity注解来取代JPA。这里请读者注意,Play是直接调用JPA的API来使用Hibernate。



EntityManager em = JPA.em();
em.persist(product);
em.createQuery("from Product where price > 50").getResultList();

Tomcat 多个APP共享数据库连接池
//looking up for the data source name registered in JNDI through Tomcat server.xml and context.xml files
DataSource ds = (DataSource) ctx.lookup(dsName);

  //找到驱动程序并注册
  Context initContext = new InitialContext();
  Context envContext = (Context) initContext.lookup("java:/comp/env");
  //取得数据源
  ds = (DataSource) envContext.lookup("jdbc/jlndb");
  //以下为另一种取得数据源的方式
  //ds = (DataSource) initContext.lookup("java:comp/env/jdbc/jlndb");
  //取得数据库连接
分享到:
评论

相关推荐

    playFramework1.2.3

    在标题"playFramework1.2.3"中,我们关注的是Play Framework的1.2.3版本。这个版本是在其早期发展的一个稳定版本,提供了许多开发者友好的功能。 Play Framework的核心优势在于它采用了模型-视图-控制器(MVC)架构...

    PlayFramework框架安全模块.pdf

    Play Framework 是一个基于Java和Scala的高性能Web应用框架,它提供了快速开发、可测试和敏捷迭代的能力。在Play Framework中,安全模块是一个重要的组件,它帮助开发者实现基本的认证(Authentication)和授权...

    play framework测试项目

    在Play项目中,这些组件通常通过注解和路由配置来组织和定义。 描述中提到的"play 1.X"指的是Play Framework的第一个主要版本系列。这个版本在当时引入了许多创新特性,比如使用Ebean作为默认的ORM(对象关系映射)...

    play framework 框架手册 word 版

    《Play Framework 框架手册》是一份深入介绍Play框架的文档,主要涵盖了从基础概念到高级特性的全面内容,适合初学者和经验丰富的开发者参考。以下是对手册中部分核心知识点的详细阐述: 1. **MVC应用程序模型**:...

    play framework 学生信息管理系统

    Play Framework 是一个基于Java和Scala的开源Web应用框架,它以简洁、快速和类型安全而闻名。在"学生信息管理系统"这个项目中,我们可以看到它被用来构建一个用于管理学生数据的应用。JavaEE(Java Platform, ...

    PlayFramework框架验证[参考].pdf

    Play Framework的验证机制允许开发者在多个层次上对数据进行验证,确保应用程序的数据质量和安全性。它可以轻松地集成到控制器和模型中,提供了丰富的验证规则和自定义验证的能力,使得开发更加高效且可控。通过这些...

    play框架 JPA注解

    本文将深入探讨在Play Framework中JPA注解的使用。 1. **@Entity(name="EntityName")**:这个注解是必不可少的,用于声明一个Java类为一个实体,对应数据库中的一个表。`name`参数是可选的,当实体类名与数据库表名...

    playframework:playframework原始码阅读

    Play Framework是一款基于Java和Scala的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式,旨在提供高效、简洁且快乐的开发体验。在深入阅读Play Framework的源代码之前,我们需要先理解其核心特性与工作...

    playFramework_Swagger

    Play Framework支持使用Java或Scala的注解,例如`@Api`、`@ApiOperation`、`@ApiParam`等,这些注解告诉Swagger如何解释你的控制器和方法。 接下来,配置Swagger。在你的应用程序配置文件(如`application.conf`)...

    PlayBasics:我的有关Play Framework 2.x的系列教程的示例代码

    《PlayBasics:深入探索Play Framework 2.x的实践指南》 在当今的Web开发领域,Play Framework 2.x以其高效、灵活和易用性,成为Scala和Java开发者青睐的框架之一。本教程系列——"PlayBasics",旨在帮助初学者及有...

    play-framework-kotlin,这个存储库将展示如何使用kotlin创建play框架项目.zip

    Play Framework 是一个强大的、现代的、轻量级的Web应用框架,它以Java和Scala为主导,但同样支持Kotlin。Kotlin是一种流行的、类型安全的、面向对象的编程语言,它具有简洁的语法和丰富的函数式编程特性,非常适合...

    play框架手册

    框架id(framework ID) - 141 - 从命令行设置框架id - 142 - 22.生产部署 - 142 - application.conf - 142 - 设置框架为prod模式: - 142 - 定义一个真实的数据库: - 143 - 禁止JPA的自动结构更新: - 143 - 定义一...

    mar-sample-play-framework:演示如何在 MAR 容器中运行使用 Play Framework 2.3 生成的示例应用程序的示例

    托管应用程序运行时 - Play Framework 2.3 完整部署示例 这是一个完整的 Play Framework 服务器部署示例,使用 Activator 生成的 Qt 云服务示例应用程序 - 托管应用程序运行时(“ MAR ”)。 更多关于信息。 入门 ...

    paper-header-annotator-2:基于Fabric.js和Play Framework的纸张标题注释工具

    $ cd &lt;repos&gt;/playframework_temp/ $ &lt;activator&gt;/activator-dist-1.3.5/activator run 它应该编译必要的文件,然后在启动本地服务器。 依存关系 前端:矩形的。 后端:使用Java APIWeb应用程序的。 最终:用于...

    play-java-forms-example.zip_java_play

    在Java开发领域,Play Framework是一个流行、现代且灵活的Web应用框架,它鼓励快速开发并提供了丰富的功能。本示例着重讲解如何在Play Framework中使用Java Forms,这是一种处理HTTP请求数据的有效方式。 一、Play ...

    demo-securesocial:带有 SecureSocial 身份验证的 Play Framework 2.3.x 模板

    你可以创建自定义策略类,继承自 `play.modules.securesocial.core.providers.utils.RoutesHelper`,并在控制器中使用 `@With` 注解来限制某些动作仅对特定角色可用。 7. **扩展和定制** SecureSocial 的设计是可...

    Play学习资料

    Play Framework 是一个开源的Web应用框架,主要使用Java和Scala语言开发,基于MVC(Model-View-Controller)设计模式。这个框架强调简洁、反应式和模块化开发,旨在提高开发者的生产力,使得构建高性能、易测试且可...

    play-java-ebean-example.zip_front8l3_java_play

    【标题】"play-java-ebean-example.zip_front8l3_java_play" 指示这是一个关于使用Java和Ebean库在Play Framework中构建示例应用的压缩包。Play Framework是一个流行的开源Web应用程序框架,它采用模型-视图-控制器...

    play-java-dagger2-example.zip_Dagger2_expectdm6_java_play_prized

    【描述】"Play java dagger2 example" 暗示这个项目是一个用Java编写的,使用了Play Framework的Web应用程序,同时整合了Dagger 2来实现依赖注入。Play Framework是一个轻量级、基于MVC模式的Web开发框架,它强调...

    基础playweb代码,适合初学者学习

    这个项目是用Play Framework构建的,这是一个非常流行的开源Web应用框架,它采用Scala和Java语言,提供了快速开发、模块化和测试友好等特性。在本文中,我们将深入探讨Play Framework的基本概念,以及如何在...

Global site tag (gtag.js) - Google Analytics