关于MyBatis通用Dao的实现
2016-01-29 15:06
513 查看
现在越来越多的开发者使用MyBatis作为ORM的框架,它开发迅速,上手容易,开源代码多。但是在进行数据库操作的时候的独自生成的DaoMaper业务太多,在相互调用的业务之间,容易产生这样那样的事务问题。因此本人一直想寻找一个类似Hibernate一样的通用数据库管理Dao,采用Spring注入的方式即可。
MyBatis已经改成了SqlSessionTemplate来连接数据库,话不多说直接上代码。
public class IbatisGeneralDAOImpl implements GeneralDAO {
private Logger _logger = Logger.getLogger(getClass());
private SqlSessionTemplate sqlSession;
@Autowired
public void setSqlSession(SqlSessionTemplate sqlMapClient) {
this.sqlSession = sqlMapClient;
_logger.debug("Mybatis数据库连接对象注入GeneralDAO完成");
}
/*
*查单条记录 CTH
*/
public <T> T queryObject(String sqlId, Object param) {
return sqlSession.selectOne(sqlId, param);
}
/*
*查多条记录,并实现分页功能
*/
public <T> List<T> queryForList(String sqlId, Object param) {
List<T> list = null;
if (ActionUtil.isPage_app()) {//手机APP分页
List<T> list2 = sqlSession.selectList(sqlId,param,new RowBounds(ActionUtil.getStart(),ActionUtil.getLimit()));
if (ListUtil.isEmpty(list2)) return new ArrayList<T>();
if (ActionUtil.isDirection_pre() && (ActionUtil.getStart()==0)){
list = new ArrayList<T>();
for (int i=list2.size()-1;i>-1;i--) list.add(list2.get(i));
} else list = list2;
} else if (ActionUtil.isPage_web()) //Web端分页
list = sqlSession.selectList(sqlId, param,new RowBounds(ActionUtil.getStart(),ActionUtil.getLimit()));
else list = sqlSession.selectList(sqlId, param);//不分页
Integer total = sqlSession.selectOne("systemMap.getListCount");
ActionUtil.setTotal(total);
return list;
}
MyBatis已经改成了SqlSessionTemplate来连接数据库,话不多说直接上代码。
public class IbatisGeneralDAOImpl implements GeneralDAO {
private Logger _logger = Logger.getLogger(getClass());
private SqlSessionTemplate sqlSession;
@Autowired
public void setSqlSession(SqlSessionTemplate sqlMapClient) {
this.sqlSession = sqlMapClient;
_logger.debug("Mybatis数据库连接对象注入GeneralDAO完成");
}
/*
*查单条记录 CTH
*/
public <T> T queryObject(String sqlId, Object param) {
return sqlSession.selectOne(sqlId, param);
}
/*
*查多条记录,并实现分页功能
*/
public <T> List<T> queryForList(String sqlId, Object param) {
List<T> list = null;
if (ActionUtil.isPage_app()) {//手机APP分页
List<T> list2 = sqlSession.selectList(sqlId,param,new RowBounds(ActionUtil.getStart(),ActionUtil.getLimit()));
if (ListUtil.isEmpty(list2)) return new ArrayList<T>();
if (ActionUtil.isDirection_pre() && (ActionUtil.getStart()==0)){
list = new ArrayList<T>();
for (int i=list2.size()-1;i>-1;i--) list.add(list2.get(i));
} else list = list2;
} else if (ActionUtil.isPage_web()) //Web端分页
list = sqlSession.selectList(sqlId, param,new RowBounds(ActionUtil.getStart(),ActionUtil.getLimit()));
else list = sqlSession.selectList(sqlId, param);//不分页
Integer total = sqlSession.selectOne("systemMap.getListCount");
ActionUtil.setTotal(total);
return list;
}
相关文章推荐
- 附加/分离存储的源代码分析
- oracle合理的使用索引原则
- Oracle 表类型变量的使用
- 十三、中国特色社会主义实质是全体人民普遍幸福主义
- strange problems while you are using Intellij IDEA
- ngrok 反向代理
- Android百度定位导航之基于百度地图移动获取位置和自动定位
- JBoss7.1.1+Spring4+Hibernate4分布式系统的配置
- 构建高性能web
- Android Recipes笔记
- java websocket
- Facebook存储技术方案:找出“暖性BLOB”数据
- 如何执行oracle存储过程,就exec一下?
- SSIS故障排除
- Azure上的MongoDB:如何选择正确的实例类型?
- Azure上的MongoDB:如何选择正确的实例类型?
- CListCtrl 虚拟列表技术
- TProfiler部署文档--笔记
- spring项目执行dao.update等更新操作失败
- 二进制 十进制和byte之间相互转换