application.xml中配置:
<context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!--mybatis的sqlsessionFactory配置--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="mapperLocations" value="classpath:cn/edu/nuc/mybatis/mapper/*.xml" /> </bean>
BaseDao.java(继承SqlSessionDaoSupport)
public class BaseDao<T,PK extends Serializable> extends SqlSessionDaoSupport implements IBaseDao<T, PK>{//SqlMapClientDaoSupport // mapper.xml中的namespace private String namespace = ""; // sqlmap.xml定义文件中对应的sqlid public static final String SQLID_INSERT = "insert"; public static final String SQLID_INSERT_BATCH = "insertBatch"; public static final String SQLID_UPDATE = "update"; public static final String SQLID_UPDATE_PARAM = "updateParam"; public static final String SQLID_UPDATE_BATCH = "updateBatch"; public static final String SQLID_DELETE = "delete"; public static final String SQLID_DELETE_PARAM = "deleteParam"; public static final String SQLID_DELETE_BATCH = "deleteBatch"; public static final String SQLID_TRUNCATE = "truncate"; public static final String SQLID_SELECT = "select"; public static final String SQLID_SELECT_PK = "selectPk"; public static final String SQLID_SELECT_PARAM = "selectParam"; public static final String SQLID_SELECT_FK = "selectFk"; public static final String SQLID_COUNT = "count"; public static final String SQLID_COUNT_PARAM = "countParam"; public String getNamespace() { Class<T> clazz = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; String clazzName = clazz.getName(); namespace = clazzName; return namespace; } public void setNamespace(String namespace) { this.namespace = namespace; } @Override public int insert(T entity) { int rows = 0; try { rows = getSqlSession().insert(getNamespace() + "." + SQLID_INSERT,entity); } catch (Exception e) { e.printStackTrace(); } return rows; } @Override public int update(T entity) { int rows = 0; try { rows = getSqlSession().update(namespace + "." + SQLID_UPDATE, entity); } catch (Exception e) { e.printStackTrace(); } return rows; } @Override public int updateParam(Map param) { int rows = 0; try { rows = getSqlSession().update(namespace + "." + SQLID_UPDATE_PARAM, param); } catch (Exception e) { e.printStackTrace(); } return rows; } @Override public int delete(PK primaryKey) { int rows = 0; try { rows = getSqlSession().delete(namespace + "." + SQLID_DELETE,primaryKey); } catch (Exception e) { e.printStackTrace(); } return rows; } @Override public int deleteParam(Map param) { int rows = 0; try { rows = getSqlSession().delete(namespace + "." + SQLID_DELETE_PARAM,param); } catch (Exception e) { e.printStackTrace(); } return rows; } @Override public int truncate() { int rows = 0; try { rows = getSqlSession().delete(namespace + "." + SQLID_TRUNCATE); } catch (Exception e) { e.printStackTrace(); } return rows; } @Override public int count() { int result = 0; try { result = getSqlSession().selectOne(namespace + "." + SQLID_COUNT); } catch (Exception e) { e.printStackTrace(); } return result; } @Override public int count(Object param) { int result = 0; try { result = getSqlSession().selectOne(namespace + "." + SQLID_COUNT_PARAM,param); } catch (Exception e) { e.printStackTrace(); } return result; } @Override public T get(PK primaryKey) { try { return getSqlSession().selectOne(getNamespace() + "." + SQLID_SELECT_PK,primaryKey); } catch (Exception e) { e.printStackTrace(); return null; } } @Override public List<T> select() { try { return getSqlSession().selectList(namespace + "." + SQLID_SELECT); } catch (Exception e) { e.printStackTrace(); return null; } } @Override public List<T> selectParam(Map param) { try { return getSqlSession().selectList(namespace + "." + SQLID_SELECT_PARAM,param); } catch (Exception e) { e.printStackTrace(); return null; } } @Override public PagingResult<T> selectPagination(PageEntity pageEntity) { try { int page = pageEntity.getPage() == null || "".equals(pageEntity.getPage()) ? 1 : pageEntity.getPage(); //默认为第一页 int size = pageEntity.getSize() == null || "".equals(pageEntity.getSize()) ? 15 : pageEntity.getSize();; //默认每页15个 RowBounds rowBounds = new RowBounds((page-1)*size, size); Map param = pageEntity.getParams(); if (param != null) { param.put("orderColumn", pageEntity.getOrderColumn()); param.put("orderTurn", pageEntity.getOrderTurn()); }else { param = new HashMap(); param.put("orderColumn", pageEntity.getOrderColumn()); param.put("orderTurn", pageEntity.getOrderTurn()); } List<T> resultList = getSqlSession().selectList(namespace + "." + SQLID_SELECT_PARAM,param,rowBounds); int totalSize = count(pageEntity.getParams()); PagingResult<T> pagingResult = new PagingResult<T>(); pagingResult.setCurrentPage(page); pagingResult.setTotalSize(totalSize); pagingResult.setResultList(resultList); return pagingResult; } catch (Exception e) { e.printStackTrace(); return null; } } @Override public int batchInsert(List<T> list) { try { return getSqlSession().insert(namespace + "." + SQLID_INSERT_BATCH,list); } catch (Exception e) { e.printStackTrace(); return 0; } } @Override public int batchUpdate(List<T> list) { int rows = 0; try { for (T t : list) { rows = rows + getSqlSession().update(namespace + "." + SQLID_UPDATE, t); } } catch (Exception e) { e.printStackTrace(); } return rows; } @Override public int batchDelete(List<PK> list) { try { return getSqlSession().delete(namespace + "." + SQLID_DELETE_BATCH,list); } catch (Exception e) { e.printStackTrace(); return 0; } } /** * 日志打印 * @param sqlId * @param param */ public void printLog(String sqlId,Object param){ Configuration configuration = getSqlSession().getConfiguration(); //sqlId为配置文件中的sqlid MappedStatement mappedStatement = configuration.getMappedStatement(sqlId); //param为传入到sql语句中的参数 BoundSql boundSql = mappedStatement.getBoundSql(param); //得到sql语句 String sql = boundSql.getSql().trim(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("info-sql: "+sdf.format(new Date())+" "+sql); } }