繁体   English   中英

使用JDBC的Spring Boot:嵌套对象建模

[英]Spring Boot with JDBC: Nested Object Modelling

我在PostgreSQL数据库中具有以下TableStructure,该数据库应该是我的WebApp的数据库后端:

init_db.sql

CREATE TABLE article (
    id integer NOT NULL,
    name character varying NOT NULL,
    type_id integer NOT NULL
);
CREATE TABLE article_type (
    id integer NOT NULL,
    type_desc character varying NOT NULL
);
ALTER TABLE ONLY article
ADD CONSTRAINT 
    article_type_id_fkey FOREIGN KEY (type_id) REFERENCES article_type(id);

对此工作的基本访问(通过application.properties中定义的DataSource Object并让Spring Boot处理其余部分)。 我现在在理解如何在Spring Boot中最好地访问/建模方面遇到了困难。 目前,我的模型类如下所示:

ArticleType.java

public class ArticleType {
    private Integer id;
    private String name;

    // Getters and Setters
}



Article.java

public class Article {
    private Integer id;
    private String name;
    private String desc;
    private ArticleType article_type;

    // Getters and Setters
}

示例之后,我正在构造这些类:

ArticleTypeRepository.java

@Repository
public class ArticleTypeRepository {

    @Autowired
    protected JdbcTemplate jdbc;

    public ArticleType getArticleType(int id) {
        return jdbc.queryForObject("SELECT * FROM article.article_type WHERE id=?", articleTypeMapper, id);
    }

    private static final RowMapper<ArticleType> articleTypeMapper = new RowMapper<ArticleType>() {
        public ArticleType mapRow(ResultSet rs, int rowNum) throws SQLException {
            ArticleType articletype = new ArticleType();
            articletype.setId(rs.getInt("id"));
            articletype.setName(rs.getString("type_desc"));
            return articletype;
        }
    };

对于以下文件,我的问题出现了:

ArticleRepository.java

@Repository
public class ArticleRepository {

    @Autowired
    protected JdbcTemplate jdbc;

    public Article getArticle(int id) {
        return jdbc.queryForObject("SELECT * FROM article.article WHERE id=?", articleMapper, id);
    }

    private static final RowMapper<Article> articleMapper = new RowMapper<Article>() {
        public Article mapRow(ResultSet rs, int rowNum) throws SQLException {           
            Article article = new Article();
            article.setId(rs.getInt("id"));
            article.setName(rs.getString("name"));
            // The following line is the one in question
            // ArticleType at = getArticleType(Integer.parseInt(rs.getString("type_id")));
            article.setArticle_type(at);
            article.setDesc(rs.getString("description"));
            return article;
        }
    };

在此处为文章获取ArticleType的最佳实践是什么? 无论如何,这是检索这些对象的好习惯吗? 还是应该只在Article对象中使用一个普通的String对象,并使用视图或其他内容查询它? 我通过Internet查找了“ Spring Boot JDBC嵌套对象Java访问建模”之类的内容,但是找不到关于该特定问题的任何真实提示或教程,这使我想知道我在做的事情在概念上是否完全错误。 感谢任何提示(教程,文档,范例如何正确执行此操作等)

我将在此处重复M. Deinum的回答,因为这使我不停滚动,直到我切换到Hibernate / JPA:

通过创建返回所需内容的查询。 编写将两个表连接在一起的select语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM