1.获取SqlSession和关闭SqlSession
@Resource
protected SqlSessionTemplate sqlSessionTemplate;
/**
* 获取原生SqlSession,需要手动关闭SqlSession
* 对应 {@code BaseDaoImpl.closeNativeSqlSession}
* @return
*/
protected SqlSession getNativeSqlSession() {
return SqlSessionUtils.getSqlSession(sqlSessionTemplate.getSqlSessionFactory(),
sqlSessionTemplate.getExecutorType(),sqlSessionTemplate.getPersistenceExceptionTranslator());
}
/**
* 关闭原生SqlSession
* 对应 getNativeSqlSession
* @return
*/
protected void closeNativeSqlSession(SqlSession sqlSession){
SqlSessionUtils.closeSqlSession(sqlSession, sqlSessionTemplate.getSqlSessionFactory());
}
由于mybatis可以使用SqlSessionTemplate自动管理SqlSession关闭(动态代理原理)
示例:封装通用根据id删除
@Override
public Integer deleteById(Serializable id) {
String logBatch = ObjectUtils.getUUID();
if (SqlKit.isDev()) {
c3p0log(logBatch);
}
StringBuffer sql = new StringBuffer();
sql.append("delete from `").append(TABLE_NAME).append("` where `").append(TABLE_ID).append("`").append(" = ?");
if (SqlKit.isDev()) {
log.info("【" + logBatch + "】" + sql.toString());
log.info("【" + logBatch + "】" + id);
}
SqlSession sqlSession = null;
PreparedStatement pst = null;
try {
// 获取SqlSession
sqlSession = getNativeSqlSession();
pst = sqlSession.getConnection().prepareStatement(sql.toString());
fillStatement(logBatch, pst, id);
int result = pst.executeUpdate();
log.info("【" + logBatch + "】" + "deleteById result : " + result);
return result;
} catch (SQLException e) {
e.printStackTrace();
log.error("【" + logBatch + "】" + sql.toString());
log.error("【" + logBatch + "】" + id);
throw new DaoException("【" + logBatch + "】" + "【deleteById error】" + e.getMessage());
} finally {
if (pst != null){
close(pst);
}
if(sqlSession != null){
// 关闭SqlSession
closeNativeSqlSession(sqlSession);
}
}
}
获取Connection: sqlSession.getConnection()