Eng*_*ine 4 java spring hibernate jpa jdbc
我想实现从JPA到Spring JDBC的关系.例如,假设我有Account和Advert对象.根据JPA ,账户和广告之间的关系是@OneToMany.
帐户类:
public class Account {
private Long id;
private String username;
private Set<Advert> adverts = new HashSet<Advert>();
// getters + setters
}
Run Code Online (Sandbox Code Playgroud)
广告类:
public class Advert {
private Long id;
private String text;
private Account account;
// getters + setters
}
Run Code Online (Sandbox Code Playgroud)
AccountMapper:
public class AccountMapper implements RowMapper<Account> {
public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
Account account = new Account();
account.setId(rs.getLong("id"));
account.setUsername(rs.getString("username"));
return account;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试为Advert类创建一个Mapper.如何将广告类中的帐户变量映射到行?非常感谢
好吧,如果您不使用 ORM ……您就没有对象关系映射!在为此创建了所有 ORM 之后:-)
更严重的是,ORM 使您免于编写大量样板代码。使用直接 JDBC 而不是 JPA 是一种代码优化。像任何其他代码优化一样,应该在适当的时候使用它。这是相关的:
我的建议应该是首先使用隐藏在 DAO 层中的 JPA 或本机休眠。然后仔细分析你的性能问题,重写JDBC中最昂贵的部分。
当然,您可以直接在 JDBC 中对 DAO 实现进行编码,但是编写起来会花费更长的时间。
我几乎忘记了基本部分:在 ORM 中您映射类和关系,在 JDBC 中您编写独立的 SQL 查询。
您可以在不影响应用程序性能的情况下使用Hibernate,只需查看此Hibernate教程中的数百个与映射实体相关的示例.
至于在JDBC中执行此操作,您需要执行以下步骤:
您需要对所有选定的列使用别名,以便ids列不会发生冲突.
您可以定义两个行映射器并使用从广告到帐户的连接并将其传递给AccountMapper:
public class AdvertMapper implements RowMapper<Advert> {
public Advert mapRow(ResultSet rs, int rowNum) throws SQLException {
Advert advert = new Advert();
advert.setId(rs.getLong("advert_id"));
advert.setText(rs.getString("advert_text"));
return advert;
}
}
public class AccountMapper implements RowMapper<Account> {
private final AdvertMapper advertMapper;
public AccountMapper(AdvertMapper advertMapper) {
this.advertMapper = advertMapper;
}
public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
Account account = new Account();
account.setId(rs.getLong("account_id"));
account.setUsername(rs.getString("account_username"));
Advert advert = this.advertMapper.mapRow(rs, rowNum);
advert.setAccount(account);
account.getAdverts().add(advert);
return account;
}
}
Run Code Online (Sandbox Code Playgroud)的AccountMapper用途AdvertMapper,以创建从连接的数据广告.
将此与Hibernate相比较,Hibernate将为您解决所有这些映射.
| 归档时间: |
|
| 查看次数: |
4326 次 |
| 最近记录: |