我有一个 Java + Spring + MySQL Web 应用程序,它存储和显示书籍列表。共有三个 SQL 表 - Authors、Books 和 Book_Authors。
------------ 作者 ------------ author_id 名 姓 ------------ ------------ 图书 ------------ book_id 标题 ------------ ------------ Book_Authors ------------ author_id book_id ------------
请注意,书籍和作者之间的关系是 M:N,即一个人可能是多本书的作者,同时一本书可以由多个人创作。
我有以下 DAO 课程。
@Service("bookDao")
public class BookDao
{
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
private RowMapper<Book> mapper = new RowMapper<Book>() {
...
};
public List<Book> selectAll() {
...
}
...
}
@Service("authorDao")
public class AuthorDao
{
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
private RowMapper<Author> mapper = new RowMapper<Author>() {
...
};
public List<Author> selectAll() {
...
}
}
对于我的某些观点,我需要加载所有书籍的(一部分),包括每本书的作者集。所以,我的数据类和控制器应该是这样的。
public class Book {
private List<Author> authors = ...;
...
}
@Controller
public class Controller
{
@Resource(name = "authorDao")
private AuthorDao authorDao;
@Resource(name = "bookDao")
private BookDao bookDao;
@RequestMapping(value = "/books.html")
public String books()
{
List<Book> books = ???;
...
return "books";
}
}
问题是,如何设计操作以加载包括作者在内的书籍(使用单个 JOIN 查询)?BookDao 类是否应该负责加载包括作者在内的书籍?如果是这样,那么 RowMapper 应该是什么样子?或者我应该为此目的创建第三个名为 say BookAuthorsDao 的 Dao?还是另一种方式?