// ///////////////////////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2012 ikamobile. // All rights reserved // ///////////////////////////////////////////////////////////////////////////////////////////////// package com.smilonet.common.dao.mybatis; import java.util.Collections; import java.util.List; import javax.annotation.Resource; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.support.SqlSessionDaoSupport; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; /** * DAO层mybatis实现 * * @author 王龙 email:wanglong(a)smilonet.com * @version 1.0 * @since 1.0 */ @Data @Slf4j @EqualsAndHashCode(callSuper = true) public abstract class BaseDao extends SqlSessionDaoSupport { @Override @Resource public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { super.setSqlSessionFactory(sqlSessionFactory); } /** * 查询所有符合参数结果 * @param selectRequest * @return */ @SuppressWarnings("rawtypes") public List select(SelectRequest selectRequest) { if (log.isDebugEnabled()) { log.debug("根据参数:" + selectRequest.getParam() + ",调用:" + selectRequest.getExecutedStatementName()); } try { return getSqlSession().selectList(selectRequest.getExecutedStatementName(), selectRequest.getParam()); } catch (Exception e) { log.error("根据参数:" + selectRequest.getParam() + ",调用:" + selectRequest.getExecutedStatementName() + ",发生错误", e); return Collections.EMPTY_LIST; } } /** * 查询所有符合参数的第一个结果 * @param selectRequest * @return */ public Object selectOne(SelectRequest selectRequest) { @SuppressWarnings("rawtypes") List result = select(selectRequest); if (result.size() > 0) { return result.get(0); } else { return null; } } /** * 查询所有符合参数的分页结果 * @param executeRequest * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) public Page selectPage(SelectPageRequest selectPageRequest) { try { selectPageRequest.setAsCountMode(); if (log.isDebugEnabled()) { log.debug("根据参数:" + selectPageRequest.getParam() + ",调用:" + selectPageRequest.getExecutedStatementName()); } Long totalCount = getSqlSession().selectOne(selectPageRequest.getExecutedStatementName(), selectPageRequest.getParam()); selectPageRequest.setAsResultMode(); if (log.isDebugEnabled()) { log.debug("根据参数:" + selectPageRequest.getParam() + ",调用:" + selectPageRequest.getExecutedStatementName()); } return new PageImpl(getSqlSession().selectList(selectPageRequest.getExecutedStatementName(), selectPageRequest.getParam()), selectPageRequest.getParam().getPager(), totalCount); } catch (Exception e) { log.error("根据参数:" + selectPageRequest.getParam() + ",调用:" + selectPageRequest.getExecutedStatementName() + ",发生错误", e); return new PageImpl(Collections.EMPTY_LIST, selectPageRequest.getParam().getPager(), 0); } } /** * 删除数据 * @param executeRequest */ public void deleteByCondition(ExecuteRequest<Object> executeRequest) { if (log.isDebugEnabled()) { log.debug("根据参数:" + executeRequest.getParam() + ",调用:" + executeRequest.getExecutedStatementName()); } try { getSqlSession().delete(executeRequest.getExecutedStatementName(), executeRequest.getParam()); } catch (Exception e) { log.error("根据参数:" + executeRequest.getParam() + ",调用:" + executeRequest.getExecutedStatementName() + ",发生错误", e); } } /** * 插入数据 * @param executeRequest * @return 成功插入记录数量 */ public int insert(ExecuteRequest<Object> executeRequest) { if (log.isDebugEnabled()) { log.debug("根据参数:" + executeRequest.getParam() + ",调用:" + executeRequest.getExecutedStatementName()); } try { return getSqlSession().insert(executeRequest.getExecutedStatementName(), executeRequest.getParam()); } catch (Exception e) { log.error("根据参数:" + executeRequest.getParam() + ",调用:" + executeRequest.getExecutedStatementName() + ",发生错误", e); return 0; } } /** * 修改数据 * @param executeRequest * @return */ public int update(ExecuteRequest<UpdateParam> executeRequest) { if (log.isDebugEnabled()) { log.debug("根据参数:" + executeRequest.getParam() + ",调用:" + executeRequest.getExecutedStatementName()); } try { return getSqlSession().update(executeRequest.getExecutedStatementName(), executeRequest.getParam()); } catch (Exception e) { log.error("根据参数:" + executeRequest.getParam() + ",调用:" + executeRequest.getExecutedStatementName() + ",发生错误", e); return 0; } } }