}).build();
}
public static MappedStatement prepareSelectPostsForBlogMappedStatement(final Configuration config) {
final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
final SqlSource sqlSource = new StaticSqlSource(config,"SELECT p.id, p.created_on, p.blog_id, p.section, p.subject, p.body, pt.tag_id," +
" t.name as tag_name, c.id as comment_id, c.name as comment_name, c.comment" +
" FROM post p" +
" INNER JOIN post_tag pt ON pt.post_id = p.id" +
" INNER JOIN tag t ON pt.tag_id = t.id" +
" LEFT OUTER JOIN comment c ON c.post_id = p.id" +
" WHERE p.blog_id = ?");
final ParameterMap parameterMap = new ParameterMap.Builder(config, "defaultParameterMap", Author.class,
new ArrayList<ParameterMapping>() {
{
add(new ParameterMapping.Builder(config, "id", registry.getTypeHandler(int.class)).build());
}
}).build();
final ResultMap tagResultMap = new ResultMap.Builder(config, "tagResultMap", Tag.class, new ArrayList<ResultMapping>() {
{
add(new ResultMapping.Builder(config, "id", "tag_id", registry.getTypeHandler(int.class))
.flags(new ArrayList<ResultFlag>() {
{
add(ResultFlag.ID);
}
}).build());
add(new ResultMapping.Builder(config, "name", "tag_name", registry.getTypeHandler(String.class)).build());
}
}).build();
final ResultMap commentResultMap = new ResultMap.Builder(config, "commentResultMap", Comment.class, new ArrayList<ResultMapping>() {
{
add(new ResultMapping.Builder(config, "id", "comment_id", registry.getTypeHandler(int.class))
.flags(new ArrayList<ResultFlag>() {
{
add(ResultFlag.ID);
}
}).build());
add(new ResultMapping.Builder(config, "name", "comment_name", registry.getTypeHandler(String.class)).build());
add(new ResultMapping.Builder(config, "comment", "comment", registry.getTypeHandler(String.class)).build());
}
}).build();
config.addResultMap(tagResultMap);
config.addResultMap(commentResultMap);
final ResultMap postResultMap = new ResultMap.Builder(config, "defaultResultMap", Post.class, new ArrayList<ResultMapping>() {
{
add(new ResultMapping.Builder(config, "id", "id", registry.getTypeHandler(int.class))
.flags(new ArrayList<ResultFlag>() {
{
add(ResultFlag.ID);
}
}).build());
add(new ResultMapping.Builder(config, "blog", "blog_id", registry.getTypeHandler(int.class)).javaType(Blog.class).nestedQueryId("selectBlogById").build());
add(new ResultMapping.Builder(config, "createdOn", "created_on", registry.getTypeHandler(Date.class)).build());
add(new ResultMapping.Builder(config, "section", "section", registry.getTypeHandler(Section.class)).build());
add(new ResultMapping.Builder(config, "subject", "subject", registry.getTypeHandler(String.class)).build());
add(new ResultMapping.Builder(config, "body", "body", registry.getTypeHandler(String.class)).build());
add(new ResultMapping.Builder(config, "tags").nestedResultMapId(tagResultMap.getId()).build());
add(new ResultMapping.Builder(config, "comments").nestedResultMapId(commentResultMap.getId()).build());
}
}).build();
return new MappedStatement.Builder(config, "selectPostsForBlog", sqlSource, SqlCommandType.SELECT)