MyBatis使用(一)

特殊封装dao方法:

public class MyBatisDAO extends SqlSessionDaoSupport {

	private static final Logger logger = LoggerFactory.getLogger("SQL_LOGGER");

	public MyBatisDAO() {}

	/**
	 * 插入一个实体
	 * @param sqlMapId mybatis 映射id
	 * @param object 实体参数
	 * @return
	 */
	public int insert(final String sqlMapId, final Object object) {

		return (Integer) execute(new SqlSessionCallback() {

			public Object doInSession(SqlSession session) {
				try{
					return session.insert(sqlMapId, object);
				}catch(Exception e){
                    e.printStackTrace();
					 logger.info("sql:{}",sqlMapId);
					 logger.error("fail to execute the sql",e);					 
					 throw new RuntimeException("数据库操作异常"+e.getMessage());
				}
			}
		});
	}

	/**
	 * 查询列表
	 * @param sqlMapId mybatis映射id
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List findForList(String sqlMapId) {
		return findForList(sqlMapId, null);
	}

	/**
	 * 查询列表
	 * @param sqlMapId mybatis映射id
	 * @param param 查询参数
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List findForList(final String sqlMapId, final Object param) {

		return (List) execute(new SqlSessionCallback() {

			public Object doInSession(SqlSession session) {
				try{
					if (param != null) {
						return session.selectList(sqlMapId, param);
					} else {
						return session.selectList(sqlMapId);
					}
				}catch(Exception e){
                    e.printStackTrace();
					 logger.info("sql:{}",sqlMapId);
					 logger.error("fail to execute the sql",e);
                    throw new RuntimeException("数据库操作异常"+e.getMessage());
				}
			}
		});
	}

	/**
	 * 查询列表
	 * @param sqlMapId mybatis映射id
	 * @param param 查询参数
	 * @param offset 查询起始位置(偏移量),从1开始
	 * @param limit 查询数量,必须大于0
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List findForList(final String sqlMapId, final Object param,
			final int offset, final int limit) {

		return (List) execute(new SqlSessionCallback() {

			public Object doInSession(SqlSession session) {
				try{
					return session.selectList(sqlMapId, param, new RowBounds(offset, limit));
				}catch(Exception e){
                    e.printStackTrace();
					logger.info("sql:{}",sqlMapId);
					logger.error("fail to execute the sql",e);
                    throw new RuntimeException("数据库操作异常"+e.getMessage());
				}
			}
		});
	}

	/**
	 * 获取结果集的map
	 * @param sqlMapId mybatis映射id
	 * @param mapMapper 处理多行结果集的接口,指定map的key和value
	 * @return 结果对象的map
	 */
	@SuppressWarnings("rawtypes")
	public Map findForMap(final String sqlMapId, final MapMapper mapMapper) {
		return findForMap(sqlMapId, null, mapMapper);
	}

	/**
	 * 获取结果集的map
	 * @param sqlMapId mybatis映射id
	 * @param parameter 参数数组
	 * @param mapMapper 处理多行结果集的接口,指定map的key和value
	 * @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public Map findForMap(final String sqlMapId, final Object parameter,
			final MapMapper mapMapper) {

		List list = null;
		if (parameter == null) {
			list = findForList(sqlMapId);
		} else {
			list = findForList(sqlMapId, parameter);
		}

		Map result = new HashMap();
		for (int i = 0; i < list.size(); i++) {
			result.put(mapMapper.mapKey(list.get(i), i + 1), mapMapper.mapValue(list.get(i), i + 1));
		}
		return result;
	}

	/**
	 * 带有分页信息的查询
	 * @param sqlMapId mybatis映射id
	 * @param pageRequest 分页请求参数信息
	 * @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public Page findForPage(String sqlMapId, PageRequest pageRequest) {

		// 查询总数
		pageRequest.getFilters().put(SelectCountSqlInterceptor.COUNT, null); // 设置是否需要将sql转换成总数查询sql
		Number totalCount = (Number) findForObject(sqlMapId, pageRequest
				.getFilters());
		if (totalCount == null || totalCount.intValue() <= 0) {
			return new Page(pageRequest, 0);
		}
		if(totalCount != null && totalCount.intValue() <= (pageRequest.getPageNumber()-1) * pageRequest.getPageSize()){
			return new Page(pageRequest.getPageNumber(), pageRequest.getPageSize(), totalCount.intValue(), new ArrayList(0));
		}
		pageRequest.getFilters().remove(SelectCountSqlInterceptor.COUNT);

		Map filters = new HashMap();
		filters.putAll(pageRequest.getFilters());
		Page page = new Page(pageRequest, totalCount.intValue());
		List list = findForList(sqlMapId, filters, page.getFirstResult(), page.getPageSize());

		page.setResult(list);

		return page;
	}

	/**
	 * 查询得到一个实体
	 * @param sqlMapId mybatis映射id
	 * @return
	 */
	public Object findForObject(final String sqlMapId) {

		return findForObject(sqlMapId, null);
	}

	/**
	 * 查询得到一个实体
	 * @param sqlMapId mybatis映射id
	 * @param param 查询参数
	 * @return
	 */
	public Object findForObject(final String sqlMapId, final Object param) {

		return execute(new SqlSessionCallback() {

			public Object doInSession(SqlSession session) {
				try{
					if (param != null) {
						return session.selectOne(sqlMapId, param);
					} else {
						return session.selectOne(sqlMapId);
					}
				}catch(Exception e){
                    e.printStackTrace();
					logger.info("sql:{}",sqlMapId);
					logger.error("fail to execute the sql",e);
                    throw new RuntimeException("数据库操作异常"+e.getMessage());
				}
			}
		});
	}

	/**
	 * 修改
	 * 
	 * @param sqlMapId mybatis映射id
	 * @param param 参数
	 * @return
	 */
	public int update(final String sqlMapId, final Object param) {

		return (Integer) execute(new SqlSessionCallback() {

			public Object doInSession(SqlSession session) {
				try {
					return session.update(sqlMapId, param);
				} catch (Exception e) {
                    e.printStackTrace();
					 logger.info("sql:{}",sqlMapId);
					 logger.error("fail to execute the sql",e);
                    throw new RuntimeException("数据库操作异常"+e.getMessage());
				}				
			}
		});
	}

	/**
	 * 删除
	 * @param sqlMapId mybatis映射id
	 * @return
	 */
	public int delete(final String sqlMapId) {

		return delete(sqlMapId, null);
	}

	/**
	 * 带有参数删除
	 * @param sqlMapId mybatis映射id
	 * @param param 参数
	 * @return
	 */
	public int delete(final String sqlMapId, final Object param) {

		return (Integer) execute(new SqlSessionCallback() {

			public Object doInSession(SqlSession session) {

				if (param != null) {
					return session.delete(sqlMapId, param);
				} else {
					return session.delete(sqlMapId);
				}
			}
		});
	}

	/**
	 * 允许回调,暴露SqlSession给调用者
	 * @param action
	 * @return
	 */
	public Object execute(SqlSessionCallback action) {

		try {
			return action.doInSession(getSqlSession());
		} catch (Exception e) {
            e.printStackTrace();
			 logger.error("fail to execute the sql",e);
            throw new RuntimeException("数据库操作异常"+e.getMessage());
		}
	}

	public interface SqlSessionCallback {

		public Object doInSession(SqlSession session);
	}
}

  

SqlSession为mybatis内置对象,用于调用配置好的mapper.xml中的sql语句

单实例类,所有方法只调用一个SqlSession

原文地址:https://www.cnblogs.com/binbang/p/4772650.html