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



我在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 中定义的数据源对象,让 Spring 引导处理其余部分(。我现在很难理解如何在 Spring Boot 中最好地访问/建模。目前我的模型类如下所示:

文章类型.java

public class ArticleType {
    private Integer id;
    private String name;
    // Getters and Setters
}



文章.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;
        }
    };

在此处获取文章文章类型的最佳实践是什么?无论如何,这是检索这些对象的好做法吗?还是我应该只在文章对象中使用纯字符串对象并使用视图或其他内容进行查询?我在互联网上查找了"Spring Boot JDBC Nested Object Java Access Modeling"等,但找不到这个特定问题的任何真正提示或教程,这让我怀疑我是否在概念上完全错误。任何提示都值得赞赏(教程、文档、如何正确执行此操作的范例等(

我将在这里重复发布 M. Deinum 的答案,因为它让我滚动,直到我切换到 Hibernate/JPA:

通过创建返回所需内容的查询。写一个选择 连接两个表的语句。

最新更新