基于mybatis 的公共dao

昨天自己写了一个 公共的dao , 一般的公司 他们的 框架 如果使用 mybatis 一般都有 第三方插件了,不需要写了吧, 一般也有大神帮我们集成好了。 但是我还是需要公共的dao ,为什么? 因为 有可能 这个是老项目, 如果集成了第三方 mybatis 插件可能有冲突,,,而又不想使用他们的原来的方式,或者说,写一个 公共的dao ,和 之前其他人的代码不会 有冲突, 和其他人合作写代码的时候,自己用自己的喜欢的方式,而不会对其他人 造成影响。 下面是 我写的:

dao 接口

package com.stylefeng.guns.core.db;

import java.util.List;
import java.util.Map;

import com.github.miemiedev.mybatis.paginator.domain.PageBounds;

/**
 *  通用的sql 调用类,消灭 dao ,不需要额外的再写  dao 了 ,专注于 业务代码即可 , 写好了 xml 直接调用即可 
 * @author leshang
 *  备注:  sqlKey :  xml sql的 id 值
 */
public interface BaseDbDao {
	
	/**
	 * 插入  
	 * @param po 实体 model 类 
	 */
	public int create(Class<?> namespace , String sqlKey, Object po);

	
	/**
	 * 
	 * @param sqlKey :  + xml sql的 id 值
	 * @param params  更加的条件和 更新的内容 map 
	 */
	public int updateByKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params);
	
	/**
	 * 
	 * @param sqlKey
	 * @param params 更加的条件和 更新的内容 object 对象 model  
	 */
	public int updateByKeyObject(Class<?> namespace , String sqlKey, Object params);


	/**
	 * 
	 * @param sqlKey
	 * @param params 删除的条件 map 
	 */
	public int deleteByKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params);
	
	/**
	 * 
	 * @param sqlKey
	 * @param params 删除的条件  对象 model  
	 */
	public int deleteByKeyObject(Class<?> namespace , String sqlKey, Object params);

	/**
	 *  更加主键,同时删除多条记录
	 * @param ids  list 主键条件
	 */ 
	public int deleteByIds(Class<?> namespace , String sqlKey,List<?> ids);

	/**
	 * 查询单个PO
	 * 
	 * @param id 主键
	 * @return
	 */
	public Object getByKeyMap(Class<?> namespace , String sqlKey,Map<String, Object> params);
	
	/**
	 * 返回单条数据 
	 * 
	 * @param sqlKey 
	 * @param params 查询条件 obj model 
	 * @return
	 */
	public Object getByKeyObj(Class<?> namespace , String sqlKey, Object params);


	/**
	 * 查询count方法,传入参数
	 * 
	 * @param params 条件 map 
	 * @return
	 */
	public Integer countByKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params);

	/**
	 * 根据sqlKey进行count sql执行,支持参数传入
	 * 
	 * @param sqlKey
	 * @param params
	 * @return
	 */
	public Integer countByKeyObj(Class<?> namespace , String sqlKey, Object params);

	/**
	 *  
	 *  通过多个主键 查询 
	 * @param sqlKey
	 * @param ids List 主键条件
	 * @return
	 */
	public List<?> findByIds(Class<?> namespace , String sqlKey,List<?> ids);


	/**
	 * 返回多条数据
	 * 
	 * @param sqlKey
	 * @param params
	 *            Object 对象
	 * @return list
	 */
	public List<?> getListByKeyObj(Class<?> namespace , String sqlKey, Object params);

	/**
	 * 根据在Map配置文件中的Sql Key及参数获取实列表
	 * 
	 * @param sqlKey
	 * @param params
	 * @return list
	 */
	public List<?> findByKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params);
	
    /**
     *  
     * @param sqlKey
     * @param params  map 条件
     * @return 返回 map 集合的数据
     */
	public Map<?, ?> getMapBySqlKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params);
	
	/**
	 * 
	 * @param sqlKey
	 * @param params  obj 条件
	 * @return 返回 map 集合的数据
	 */
	public Map<?, ?> getMapBySqlKeyObj(Class<?> namespace , String sqlKey, Object params);
	

    /**
     *  分页查询
     * @param sqlKey
     * @param params 分页条件 map 
     * @param page 分页参数
     * @return
     */
	public List<?> findPagedByKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params,
			PageBounds page);
	
	
	/**
     *  分页查询
     * @param sqlKey
     * @param params 分页条件  obj
     * @param page 分页参数
     * @return
     */
	public List<?> findPagedByKeyObj(Class<?> namespace , String sqlKey,  Object params,
			PageBounds page);
	
	
	

}

dao实现类

package com.stylefeng.guns.core.db;

import java.util.List;
import java.util.Map;










import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.github.miemiedev.mybatis.paginator.domain.PageBounds;


/**
 *  通用的sql 调用类,消灭 dao ,不需要额外的再写  dao 了 ,专注于 业务代码即可 , 写好了 xml 直接调用即可 
 * @author leshang
 *  备注:  sqlKey :  xml sql的 id 值
 */
@Repository
public class BaseDbDaoImpl implements BaseDbDao{
	
	@Autowired
	private SqlSessionTemplate sqlSessionTemplate;
	
	/**
	 * 
	 * @param namespace 对应的sql xml 里面的 namespace 对应的类
	 * 可以输入 null ,代表 sqlKey 为完整的 请求 id路径了
	 * @param sqlKey xml 里面 sql 的 id
	 * @return 完整的 sqlKey
	 */
	private String getAllSqlKey(Class<?> namespace , String sqlKey) {
		
		if (namespace ==null) {
			return sqlKey;
		}
		
		return namespace.getName()+"."+sqlKey;
		
	}
	
	
    @Transactional
	@Override
	public int create(Class<?> namespace , String sqlKey, Object po) {
		// TODO   自定义  公共字段    插入内容可以在这里进行补充 
    	
    	String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
    	
		return sqlSessionTemplate.insert(allSqlKey, po);
	}

    @Transactional
	@Override
	public int updateByKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params) {
    	
    	String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
    	
    	return sqlSessionTemplate.update(allSqlKey, params);
	}

    @Transactional
	@Override
	public int updateByKeyObject(Class<?> namespace , String sqlKey, Object params) {
		// TODO 自定义  公共字段  更新字段也可以在这里进行补充 
    	String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
    	return sqlSessionTemplate.update(allSqlKey, params);
	}

    @Transactional
	@Override
	public int deleteByKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params) {
    	String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
    	return sqlSessionTemplate.delete(allSqlKey, params);
	}

    @Transactional
	@Override
	public int deleteByKeyObject(Class<?> namespace , String sqlKey, Object params) {
    	String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
    	return sqlSessionTemplate.delete(allSqlKey, params);
		
	}

    @Transactional
	@Override
	public int deleteByIds(Class<?> namespace , String sqlKey, List<?> ids) {
    	String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
    	return sqlSessionTemplate.delete(allSqlKey, ids);
	}

	@Override
	public Object getByKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		return sqlSessionTemplate.selectOne(allSqlKey, params);
	}

	@Override
	public Object getByKeyObj(Class<?> namespace , String sqlKey, Object params) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		return sqlSessionTemplate.selectOne(allSqlKey, params);
	}

	@Override
	public Integer countByKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		Integer result = sqlSessionTemplate.selectOne(allSqlKey, params);
		if(result ==null){
			return 0;
		}
		return result;
	}

	@Override
	public Integer countByKeyObj(Class<?> namespace , String sqlKey, Object params) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		Integer result = sqlSessionTemplate.selectOne(allSqlKey, params);
		if(result ==null){
			return 0;
		}
		return result;
	}

	@Override
	public List<?> findByIds(Class<?> namespace , String sqlKey, List<?> ids) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		return sqlSessionTemplate.selectList( allSqlKey , ids);
	}

	@Override
	public List<?> getListByKeyObj(Class<?> namespace , String sqlKey, Object params) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		return sqlSessionTemplate.selectList(allSqlKey, params);
	}

	@Override
	public List<?> findByKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		return sqlSessionTemplate.selectList(allSqlKey, params);
	}

	@Override
	public Map<?, ?> getMapBySqlKeyMap(Class<?> namespace , String sqlKey, Map<String, Object> params) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		return sqlSessionTemplate.selectOne(allSqlKey, params);
	}

	@Override
	public Map<?, ?> getMapBySqlKeyObj(Class<?> namespace , String sqlKey, Object params) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		return sqlSessionTemplate.selectOne(allSqlKey, params);
	}

	@Override
	public List<?> findPagedByKeyMap(Class<?> namespace , String sqlKey,
			Map<String, Object> params, PageBounds page) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		return sqlSessionTemplate.selectList(allSqlKey, params, page );
	}

	@Override
	public List<?> findPagedByKeyObj(Class<?> namespace , String sqlKey, Object params,
			PageBounds page) {
		String allSqlKey =this.getAllSqlKey(namespace,sqlKey);
		return sqlSessionTemplate.selectList(allSqlKey, params, page);
	}

	

}

大家参考吧, 其实一般有点水平的,百度肯定都很多了。。。 分页插件使用的是

<dependency>
			<groupId>com.github.miemiedev</groupId>
			<artifactId>mybatis-paginator</artifactId>
			<version>1.2.17</version>
		</dependency>

转载于:https://my.oschina.net/ouminzy/blog/1477371

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值