昨天自己写了一个 公共的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>