java - 哪种数据格式适合将数据(左连接数据库查询的结果)从 servlet 传输到 JSP?

标签 java jsp servlets jpa model-view-controller

[使用 JPA、MySQL、MVC、Servlet、JSP] 如果我从数据库LEFT JOIN读取一些数据 - 三个表(DAO对象的内部方法)我应该如何格式化该结果,以便我可以将其设置为请求属性(在servlet中)并转发到JSP页面?

实体(数据库中的表):

发布:

@Entity
@Table(name = "post")
public class Post implements Serializable {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "post_id", unique = true, nullable = false)
    private Integer id; 

    @Column(name = "post_title", length=300, unique = false, nullable = false)
    private String title;

    @Column(name = "post_date", unique = false, nullable = false)
    private Date date;

    @Column(name = "post_summary", length=1000, unique = false, nullable = true)
    private String summary;

    @Column(name = "post_content", length=50000, unique = false, nullable = false)
    private String content;

    @Column(name = "post_visitors", unique = false, nullable = false)
    private Integer visitors;

    @ManyToOne
    @JoinColumn (name = "user_id", referencedColumnName="user_id", nullable = false)
    private User user;

    @ManyToOne
    @JoinColumn (name = "category_id", referencedColumnName="category_id", nullable = false)
    private Category category;

    @OneToMany(cascade = { ALL }, fetch = LAZY, mappedBy = "post")
    private Set<Comment> comments = new HashSet<Comment>();
...

实体评论:

@Entity
@Table(name = "comment")
public class Comment implements Serializable {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "comment_id", unique = true, nullable = false)
    private Integer id; 

    @Column(name = "comment_title", length=300, unique = false, nullable = false)
    private String title;

    @Column(name = "comment_date", unique = false, nullable = false)
    private Date date;

    @Column(name = "comment_content", length=600, unique = false, nullable = false)
    private String content;

    @ManyToOne
    @JoinColumn (name = "user_id", referencedColumnName="user_id", nullable = false)
    private User user;

    @ManyToOne
    @JoinColumn (name = "post_id", referencedColumnName="post_id", nullable = false)
    private Post post;
...

实体用户:

@Entity
@Table(name = "user")
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "user_id", unique = true, nullable = false)
    private Integer id; 

    @Column(name = "user_name", length=45, unique = false, nullable = false)
    private String name; // "first_name" + ' ' + "last_name"    

    //URL address to user's image 
    @Column(name = "user_image", length=500, unique = false, nullable = true)
    private String image;

    @Column(name = "user_username", length=45, unique = false, nullable = false)
    private String username;

    @Column(name = "user_password", length=45, unique = false, nullable = false)
    private String password;
...

所以,我想创建一个方法,可能在 PostDAO 对象内,看起来像这样:

public <SomeDataTypeFormat???> getPostsSummaries(){

   Query q = em.createNativeQuery("SELECT
        post_title,
        post_summary,
        post_date,
        COUNT(comment_id) AS comment_cnt,
        user.user_name
    FROM
        post
        LEFT JOIN user USING(user_id)
        LEFT JOIN comment USING(post_id)
    GROUP BY
        post_id
    ORDER BY
        comment_cnt DESC");
    ...
}

方法返回数据库中所有三个表的一些字段。 我是否需要创建单独的类并将这些数据存储在该类的对象中?或者 JSON(虽然我还没有使用过它)?

具体做法是什么?对于连接几个表而获得的某些字段,最容易使用并从 servlet 转发到 JSP 的数据格式是什么?

最佳答案

这取决于您的目标;为了将数据传输到浏览器,JSON 和 AJAX 不是一个坏的选择。要将数据获取到 JSP(从 Servlet),您可能需要 Data Transfer Object (或者可能是不可变的 Value Object )。

Data Transfer Object

关于java - 哪种数据格式适合将数据(左连接数据库查询的结果)从 servlet 传输到 JSP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20951338/

相关文章:

java - 执行 Left Join 时如何返回空对象而不是 Null

java - 无法使用 Spring JDBC 将 jsp 表单详细信息发送到数据库

java - 如何在 Java Junit TestCase 中设置 session 变量

java - 如何在 servlet/jsp 的整个 session 中使用变量的值?

java - 如何在 Java servlet 中找到 WAS SystemOut.log 的位置?

java - 陷入创建查询以从数据库获取结果的困境?

java - Jmockit 字符串最终长度方法模拟问题

java - 在 Java 中将 JsonString 解析为 JsonObject

java - 在 Java 中转换十六进制,错误值为负值

css - 在jsp中一次又一次地重新加载头文件