1. 所有的mapper 都是通过mybatis-generator-core-1.3.1.jar(之前的博文中有介绍) 生成了..
唯独没有提供分页方法..
2 百度很时间终打到满意答案.
废话不多说,直接上代码
1 mapper 基类
public interface BaseMapper<T, E, K> {
int countByExample(E e);
int deleteByExample(E e);
int deleteByPrimaryKey(K k);
int insert(T t);
int insertSelective(T t);
List<T> selectByExample(E e);
T selectByPrimaryKey(K k);
int updateByExampleSelective(@Param("record") T t, @Param("example") E e);
int updateByExample(@Param("record") T t, @Param("example") E e);
int updateByPrimaryKeySelective(K k);
int updateByPrimaryKey(T t);
List<T> queryForList(E e, int start, int end);
List<T> selectOnPage(@Param("example")E example, @Param("skipResults")int skipResults,
@Param("maxResults")int maxResults);
}
2 serivce 片断
public interface TrmDayBookMapper extends BaseMapper<TrmDayBook, TrmDayBookExample, TrmDayBookKey> {}
空实现一下
@Service
public class TrmDayBookBSImp extends BaseServiceImp<TrmDayBook, TrmDayBookExample, TrmDayBookKey> implements
ITrmDayBookBS<TrmDayBook, TrmDayBookExample, TrmDayBookKey> {
@Autowired
TrmDayBookMapper trmDayBookMapper;
public JFTResponse<TrmDayBookResVO> selectOnPage(TrmDayBookReqVO reqVO) {
try {
JFTResponse<TrmDayBookResVO> jftResponse = new JFTResponse<TrmDayBookResVO>("0");
reqVO.reckonPage();
TrmDayBookExample e = new TrmDayBookExample();
e.createCriteria().andCardNoEqualTo(reqVO.getCardNo()).andTrDateBetween(reqVO.getStartDate(),
reqVO.getEndDate());
e.setOrderByClause("SER_NO asc , ORG_ID desc");
List<TrmDayBook> list = trmDayBookMapper.selectOnPage(e,reqVO.getCurrPage(),reqVO.getPageSize());
Business bus = new Business();
bus.setResultset(bean2Vo(list));
...
3 ...mapper.xml
此sql generator 不会自动生成.只能每一个mapper.xml手工加上..累啊,
有大侠研究源码,加上这些东西,就完美了..顺便分享一下..
<select id="selectOnPage" resultMap="BaseResultMap">
SELECT * FROM (
SELECT page.*, ROWNUM AS rn FROM
(
select
<if test="example.distinct">
distinct
</if>
<include refid="Base_Column_List" />
from TRM_DAY_BOOK
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
<if test="example.orderByClause != null">
order by ${example.orderByClause}
</if>
)
page WHERE ROWNUM <= #{skipResults}
)
WHERE rn >= #{maxResults}
</select> 这里的代码和selectByExample 生成的类似..请注意多出的 examp.
4 mybatis 自动生成的sql
SELECT *
FROM (SELECT page.*, ROWNUM AS rn
FROM (select
*
from TRM_DAY_BOOK
WHERE (CARD_NO = ? and TR_DATE between ? and ?)
order by SER_NO asc, ORG_ID desc) page
WHERE ROWNUM <= ?)
WHERE rn >= ?