JLo*_*ove 3 java database orm spring entity
我正在为数据库驱动的应用程序创建前端,可以提供一些建议。我的数据库中有以下基本实体:
正如您可以想象的那样,我可以为每个方面设置许多方面值,以便当用户记录一个方面时,他们可以为每个方面选择多个值……很简单。
我创建了一个 POJO 实体来对每个方面进行建模,我的问题是...使用 Spring 和 jdbcTemplate 我如何能够使用 org.springframework.jdbc.core.RowMapper 创建所需的复合关系,即每个方面对象包含一个或多个方面的价值对象?就此而言,如果您能告诉我这是否是最好的方法,我将不胜感激。我很想在某个时候更深入地研究 ORM,但到目前为止我已经被我遇到的问题的数量推迟了,这些问题减缓了我的开发并导致决定使用 jdbcTemplate 代替。
谢谢
RowMapper如果您将 aspect_values 作为对象存储在您的方面对象中,则可以使用 a 。每次调用都会RowMapper返回一个对象,因此您最终会得到一个 aspect_values 的集合。如果您需要使用 aspect_value 表中包含的值构建一个(或多个)方面对象,那么 aResultSetExtractor是更好的选择。
这是我承诺的例子。我必须手动输入这些,因为我们的开发网络仅在内部网络上,因此任何拼写错误都是复制错误,而不是代码中的错误。这些是我的 DAO 中内部类的缩写版本:
这将 ResultSet 中的一行映射到一个对象:
public List<MessageSummary> getMessages(Object[] params)
{
// mList is filled with objects created in MessageRowMapper,
// so the length of the list equal to the number of rows in the ResultSet
List<MessageSummary> mList = jdbcTemplate.query(sqlStr, new MessageRowMapper(),
params);
return mList;
}
private final class MessageRowMapper implements RowMapper<MessageSummary>
{
@Override
public MessageSummary mapRow(ResultSet rs, int i) throws SQLException
{
MessageSummary ms = new MessageSummary();
ms.setId(rs.getInt("id"));
ms.setMessage(rs.getString("message"));
return ms;
}
}
Run Code Online (Sandbox Code Playgroud)
ResultSetExtractor除了你自己映射整个集合而不是仅仅将一行转换为一个对象之外,它的工作原理相同。当您的对象具有来自多行的属性时,这很有用。
public Map<Integer, List<String>> getResults(Object[] params)
{
Map<Integer, List<String>> result = jdbcTemplate.query(sqlStr, new ResultExtractor(),
params);
return result;
}
private final class ResultExtractor implements ResultSetExtractor<Map<Integer, List<String>>>
{
@Override
public Map<Integer, List<String>> extractData(ResultSet rs)
throws SQLException, DataAccessException
{
Map<Integer, List<String>> resultMap = new HashMap<Integer, List<String>>();
while (rs.next())
{
int id = rs.getInt("id");
List<String> nameList = resultMap.get(id);
if (nameList == null)
{
nameList = new ArrayList<String>();
resultMap.put(id, nameList);
}
nameList.add(rs.getString("name"));
}
return resultMap;
}
}
Run Code Online (Sandbox Code Playgroud)