【发布时间】:2016-05-28 10:43:40
【问题描述】:
我在 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 对象并让 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
}
在this 示例之后,我正在构建这些类:
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 的最佳做法是什么?这是检索这些对象的好习惯吗?或者我应该只在文章对象中使用一个普通的字符串对象,然后用视图或其他东西来查询它?我在互联网上查看了“Spring Boot JDBC Nested Object Java Access Modeling”之类的东西,但找不到任何关于这个特定问题的真正提示或教程,这让我想知道我是否在做一些概念上完全错误的事情。任何提示都表示赞赏(教程、文档、如何正确执行此操作的范例等)
【问题讨论】:
-
为什么不使用 Spring Data JPA?
-
Spring Data JPA 是 Spring Boot 中的标准方法
-
通过创建一个返回您需要的一切的查询。编写一个连接两个表的 select 语句。
标签: java postgresql jdbc spring-boot nested