PlayFramework完整实现一个APP(三)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1.添加Post类

package models;

importjava.util.*;

import javax.persistence.*;

import play.db.jpa.*;

@Entity

@Table(name = "blog_post")

public class Post extends Model {

public String title;

public Date postedAt;

@Lob

public String content;

@ManyToOne

public User author;

public Post(User author, String title, String content) {

this.author = author;

this.title = title;

this.content = title;

}

}

@Lob 标识,字段是一个large text的类型,@ManyToOne 标识每个Post只能对应一个User,一个User可以对应多个Post

2. 添加测试用例

@Test

public void createPost() {

// Create a new user and save it

User user = new User("bob@Gmail.com", "####", "Bob").save();

// Create a new post

new Post(user, "My first post", "Hello world").save();

// Test that the post has been created

assertEquals(1, Post.count());

// Retrieve all posts created by user

List<Post> posts = Post.find("byAuthor", user).fetch();

// Tests

assertEquals(1, posts.size());

Post firstPost = posts.get(0);

assertNotNull(firstPost);

assertEquals(user, firstPost.author);

assertEquals("My first post", firstPost.title);

assertEquals("Hello world", firstPost.content);

assertNotNull(firstPost.postedAt);

}

3.添加Comment类

@Entity

public class Comment extends Model {

public String author;

public Date postedAt;

@Lob

public String content;

@ManyToOne

public Post post;

public Comment(Post post, String author, String content) {

this.post = post;

this.author = author;

this.content = content;

this.postedAt = new Date();

}

}

4.添加测试用例

@Test

public void postComments() {

// Create a new user and save it

User bob = new User("bob@gmail.com", "secret", "Bob").save();

// Create a new post

Post bobPost = new Post(bob, "My first post", "Hello world").save();

// Post a first comment

new Comment(bobPost, "Jeff", "Nice post").save();

new Comment(bobPost, "Tom", "I knew that !").save();

// Retrieve all comments

List<Comment> bobPostComments = Comment.find("byPost", bobPost).fetch();

// Tests

assertEquals(2, bobPostComments.size());

Comment firstComment = bobPostComments.get(0);

assertNotNull(firstComment);

assertEquals("Jeff", firstComment.author);

assertEquals("Nice post", firstComment.content);

assertNotNull(firstComment.postedAt);

Comment secondComment = bobPostComments.get(1);

assertNotNull(secondComment);

assertEquals("Tom", secondComment.author);

assertEquals("I knew that !", secondComment.content);

assertNotNull(secondComment.postedAt);

}

5.在Post类中添加Comment

@OneToMany(mappedBy="post", cascade=CascadeType.ALL)

public List<Comment> comments;

public Post(User author, String title, String content) {

this.comments = new ArrayList<Comment>();

this.author = author;

this.title = title;

this.content = title;

this.postedAt = new Date();

}

6.在Post类中添加方法

public Post addComment(String author, String content) {

Comment newComment = new Comment(this, author, content).save();

this.comments.add(newComment);

this.save();

return this;

}

7.添加测试用例

@Test

public void useTheCommentsRelation() {

// Create a new user and save it

User bob = new User("bob@gmail.com", "secret", "Bob").save();

// Create a new post

Post bobPost = new Post(bob, "My first post", "Hello world").save();

// Post a first comment

bobPost.addComment("Jeff", "Nice post");

bobPost.addComment("Tom", "I knew that !");

// Count things

assertEquals(1, User.count());

assertEquals(1, Post.count());

assertEquals(2, Comment.count());

// Retrieve Bob's post

bobPost = Post.find("byAuthor", bob).first();

assertNotNull(bobPost);

// Navigate to comments

assertEquals(2, bobPost.comments.size());

assertEquals("Jeff", bobPost.comments.get(0).author);

// Delete the post

bobPost.delete();

// Check that all comments have been deleted

assertEquals(1, User.count());

assertEquals(0, Post.count());

assertEquals(0, Comment.count());

}

运行Test,如有异常会出现下方提示

.

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航