1.SqlMapconfig里面的大量的property标签可以用 (1一个property文件+<properties resourse="jdbc.properties/>代替)
2.Rowbunds:分页的分析
主要代码
public class DefaultResultSetHandler implements ResultSetHandler {
...................
private void handleRowValuesForSimpleResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping)
throws SQLException {
DefaultResultContext<Object> resultContext = new DefaultResultContext<Object>();
skipRows(rsw.getResultSet(), rowBounds);
while (shouldProcessMoreRows(resultContext, rowBounds) && rsw.getResultSet().next()) {
ResultMap discriminatedResultMap = resolveDiscriminatedResultMap(rsw.getResultSet(), resultMap, null);
Object rowValue = getRowValue(rsw, discriminatedResultMap);
storeObject(resultHandler, resultContext, rowValue, parentMapping, rsw.getResultSet());
}
}
private void skipRows(ResultSet rs, RowBounds rowBounds) throws SQLException {
if (rs.getType() != ResultSet.TYPE_FORWARD_ONLY) {
if (rowBounds.getOffset() != RowBounds.NO_ROW_OFFSET) {
rs.absolute(rowBounds.getOffset());
}
} else {
for (int i = 0; i < rowBounds.getOffset(); i++) {
rs.next();
}
}
}
private boolean shouldProcessMoreRows(ResultContext<?> context, RowBounds rowBounds) throws SQLException {
return !context.isStopped() && context.getResultCount() < rowBounds.getLimit();
}
......................
这个的原理是通过移动esultset光标实现的,缺点是占用大量资源,不适合数据量大的情况。
解决方案2:通过数据库的limit关键字,适用于数据量大的情况。
3.Mybaits取别名:可以直接对一个包下的所有pojo对象取别名,但是第一个字母变成了小写。如果不同包里面的别名重复了,还可以@Alias(“user3”)区分