package com.viathink.frame.core.dao.impl;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import com.viathink.frame.core.dao.BaseDao;
import com.viathink.frame.core.dao.constants.SqlId;
import com.viathink.frame.core.dao.domain.Identifiable;
import com.viathink.frame.core.exception.DaoException;
import com.viathink.frame.core.utils.BeanUtils;
import com.viathink.frame.core.utils.UUIDUtils;
/**
* 基础Dao接口实现类,实现改类的子类必须设置泛型类型
* @author LiuJunGuang
* @date 2014年3月3日下午1:02:31
*/
public abstract class BaseDaoImpl<T extends Identifiable> implements BaseDao<T> {
@Autowired(required = true)
protected SqlSession sqlSessionTemplate;
public static final String SQLNAME_SEPARATOR = ".";
/**
* @fields sqlNamespace SqlMapping命名空间
*/
private String sqlNamespace = getDefaultSqlNamespace();
/**
* 获取泛型类型的实体对象类全名
* @author LiuJunGuang
* @return
* @date 2014年3月3日下午6:17:46
*/
protected String getDefaultSqlNamespace() {
Class<?> genericClass = BeanUtils.getGenericClass(this.getClass());
return genericClass == null ? null : genericClass.getName();
}
/**
* 获取SqlMapping命名空间
* @author LiuJunGuang
* @return SqlMapping命名空间
* @date 2014年3月4日上午12:33:15
*/
public String getSqlNamespace() {
return sqlNamespace;
}
/**
* 设置SqlMapping命名空间。 以改变默认的SqlMapping命名空间,
* 不能滥用此方法随意改变SqlMapping命名空间。
* @author LiuJunGuang
* @param sqlNamespace SqlMapping命名空间
* @date 2014年3月4日上午12:33:17
*/
public void setSqlNamespace(String sqlNamespace) {
this.sqlNamespace = sqlNamespace;
}
/**
* 将SqlMapping命名空间与给定的SqlMapping名组合在一起。
* @param sqlName SqlMapping名
* @return 组合了SqlMapping命名空间后的完整SqlMapping名
*/
protected String getSqlName(String sqlName) {
return sqlNamespace + SQLNAME_SEPARATOR + sqlName;
}
/**
* 生成主键值。 默认使用{@link UUIDUtils#create()}方法
* 如果需要生成主键,需要由子类重写此方法根据需要的方式生成主键值。
* @param entity 要持久化的对象
*/
protected String generateId() {
return UUIDUtils.create();
}
/* (non-Javadoc)
* @see com.viathink.core.dao.BaseDao#selectOne(java.io.Serializable)
*/
@Override
public <V extends T> V selectOne(T query) {
Assert.notNull(query);
try {
Map<String, Object> params = BeanUtils.toMap(query);
return sqlSessionTemplate.selectOne(getSqlName(SqlId.SQL_SELECT), params);
} catch (Exception e) {
throw new DaoException(String.format("查询一条记录出错!语句:%s", getSqlName(SqlId.SQL_SELECT)), e);
}
}
/* (non-Javadoc)
* @see com.viathink.core.dao.BaseDao#selectById(java.io.Serializable)
*/
@Override
public <V extends T> V selectById(String id) {
Assert.notNull(id);
try {
return sqlSessionTemplate.selectOne(getSqlName(SqlId.SQL_SELECT_BY_ID), id);
} catch (Exception e) {
throw new DaoException(String.format("根据ID查询对象出错!语句:%s", getSqlName(SqlId.SQL_SELECT_BY_ID)), e);
}
}
/* (non-Javadoc)
* @see com.viathink.core.dao.BaseDao#selectList(java.io.Serializable)
*/
@Override
public <V extends T> List<V> selectList(T query) {
try {
Map<String, Object> params = BeanUtils.toMap(query);
return sqlSessionTemplate.selectList(getSqlName(SqlId.SQL_SELECT), params);
} catch (Exception e) {
throw new DaoException(String.format("查询对象列表出错!语句:%s", getSqlName(SqlId.SQL_SELECT)), e);
}
}
/* (non-Javadoc)
* @see com.viathink.core.dao.BaseDao#selectAll()
*/
@Override
public <V extends T> List<V> selectAll() {
try {
return sqlSessionTemplate.selectList(getSqlName(SqlId.SQL_SELECT));
} catch (Exception e) {
throw new DaoException(String.format("查询所有对象列表出错!语句:%s", getSqlName(SqlId.SQL_SELECT)), e);
}
}
/* (non-Javadoc)
* @see com.viathink.core.dao.BaseDao#selectMap(java.io.Serializable, java.lang.String)
*/
@Override
public <K, V extends T> Map<K, V> selectMap(T query, String mapKey) {
Assert.notNull(mapKey, "[mapKey] - must not be null!");
try {
Map<String, Object> params = BeanUtils.toMap(query);
return sqlSessionTemplate.selectMap(getSqlName(SqlId.SQL_SELECT), params, mapKey);
} catch (Exception e) {
throw new DaoException(String.format("查询对象Map时出错!语句:%s", getSqlName(SqlId.SQL_SELECT)), e);
}
}
/**
* 设置分页
* @param pageInfo 分页信息
* @return SQL分页参数对象
*/
protected RowBounds getRowBounds(Pageable pageable) {
RowBounds bounds = RowBounds.DEFAULT;
if (null != pageable) {
bounds = new RowBounds(pageable.getOffset(), pageable.getPageSize());
}
return bounds;
}
/**
* 获取分页查询参数
* @param query 查询对象
* @param pageable 分页对象
* @return Map 查询参数
*/
protected Map<String, Object> getParams(T query, Pageable pageable) {
Map<String, Object> params = BeanUtils.toMap(query, getRowBounds(pageable));
if (pageable != null && pageable.getSort() != null) {
String sorting = pageable.getSort().toString();
params.put("sorting", sorting.replace(":", ""));
}
return params;
}
/* (non-Javadoc)
* @see com.viathink.core.dao.BaseDao#selectList(com.viathink.core.dao.domain.Identifiable, org.springframework.data.domain.Pageable)
*/
@Override
public <V extends T> List<V> selectList(T query, Pageable pageable) {
try {
return sqlSessionTemplate.selectList(getSqlName(SqlId.SQL_SELECT), getParams(query, pageable));
} catch (Exception e) {
throw new DaoException(String.format("根据分页对象查询列表出错!语句:%s", getSqlName(SqlId.SQL_SELECT)), e);
}
}
/* (non-Javadoc)
* @see com.viathink.core.dao.BaseDao#selectPageList(com.viathink.core.dao.domain.Identifiable, org.springframework.data.domain.Pageable)
*/
@Override
public <V extends T> Page<V> selectPageList(T query, Pageable pageable) {
try {
List<V> contentList = sqlSessionTemplate.selectList(getSqlName(SqlId.SQL_SELECT),
getParams(query, pageable));
return new PageImpl<V>(contentList, pageable, this.selectCount(query));
} catch (Exception e) {
throw new DaoException(String.format("根据分页对象查询列表出错!语句:%s", getSqlName(SqlId.SQL_SELECT)), e);
}
}
/* (non-Javadoc)
* @see com.viathink.core.dao.BaseDao#selectMap(com.viathink.core.dao.domain.Identifiable, java.lang.String, org.springframework.data.domain.Pageable)
*/
@Override
public <K, V extends T> Map<K, V> selectMap(T query, String mapKey, Pageable pageable) {
try {
return sqlSessionTemplate.selectMap(getSqlName(SqlId.SQL_SELECT), getParams(query, pageable), mapKey);
} catch (Exception e) {
throw new DaoException(String.format("根据分页对象查询列表出错!语句:%s", getSqlName(SqlId.SQL_SELECT)), e);
}
}
/* (non-Javadoc)
* @see com.viathink.core.dao.BaseDao#selectCount()
*/
@Override
public Long selectCount() {
try {
return sqlSessionTemplate.selectOne(getSqlName(SqlId.SQL_SELECT_COUNT));
} catch (Exception e) {
throw new DaoException(String.format("查询对象总数出错!语句:%s", getSqlName(SqlId.SQL_SELECT_COUNT)), e);
}
}
/* (non-Javadoc)
* @see com.viathink.core.dao.BaseDao#selectCount(java.io.Serializable)
*/
@Override
public Long selectCount(T query) {
try {
Map<String, Obje
没有合适的资源?快使用搜索试试~ 我知道了~
spring4+mybatis3+maven-项目Demo
共192个文件
js:50个
png:39个
css:34个
5星 · 超过95%的资源 需积分: 9 2.2k 下载量 181 浏览量
2014-03-10
18:51:43
上传
评论 9
收藏 760KB ZIP 举报
温馨提示
采用目前最新的框架Spring MVC + Mybatis3 + Maven 整合的框架,可以直接作为项目底层框架使用,由于最近比较忙,博客就先不弄了,以后会加上的! 博客地址: http://blog.csdn.net/afgasdg/article/details/20942115
资源推荐
资源详情
资源评论
收起资源包目录
spring4+mybatis3+maven-项目Demo (192个子文件)
bootstrap.css 118KB
bootstrap.min.css 98KB
easyui.css 47KB
bootstrap-theme.css 15KB
bootstrap-theme.min.css 13KB
tabs.css 8KB
datagrid.css 5KB
linkbutton.css 4KB
calendar.css 4KB
tree.css 3KB
panel.css 3KB
menu.css 2KB
jquery.pnotify.default.css 2KB
window.css 2KB
tooltip.css 2KB
icon.css 2KB
layout.css 2KB
searchbox.css 2KB
slider.css 2KB
pagination.css 2KB
spinner.css 1KB
combo.css 1017B
splitbutton.css 975B
accordion.css 835B
messager.css 761B
propertygrid.css 716B
common.css 704B
menubutton.css 685B
progressbar.css 647B
datebox.css 619B
dialog.css 487B
jquery.pnotify.default.icons.css 426B
combobox.css 393B
validatebox.css 222B
Thumbs.db 35KB
glyphicons-halflings-regular.eot 20KB
navbar.ftl 5KB
navbar-ssr-tester.ftl 5KB
listDictionary.ftl 3KB
editDictionary.ftl 3KB
addDictionary.ftl 2KB
viewDictionary.ftl 2KB
common.ftl 2KB
navbar-sys-admin.ftl 1KB
navbar-ssr-admin.ftl 1KB
page.ftl 958B
modal.ftl 470B
footer.ftl 269B
loading.gif 2KB
blank.gif 43B
blank.gif 43B
BaseDaoImpl.java 11KB
SysDictionaryDaoImplTest.java 6KB
BaseController.java 6KB
BaseDao.java 5KB
BaseService.java 5KB
BaseControllerImpl.java 4KB
ControllerPath.java 3KB
UUIDUtils.java 3KB
BaseServiceImpl.java 3KB
SysDictionary.java 2KB
BeanUtils.java 2KB
ViewController.java 1KB
Result.java 1KB
ViewExcel.java 1KB
StringEx.java 935B
SysDictionaryController.java 910B
SysDictionaryServiceImpl.java 775B
ViewPDF.java 771B
ControllerException.java 770B
SysDictionaryQuery.java 765B
DaoException.java 725B
DateConverter.java 560B
SqlId.java 541B
PagePrefix.java 489B
SysDictionaryDaoImpl.java 459B
ServiceException.java 435B
EnumDictionaryType.java 428B
Identifiable.java 416B
EnumStatus.java 360B
SysDictionaryVo.java 322B
SysDictionaryService.java 308B
SysDictionaryDao.java 295B
BaseEnum.java 265B
jquery.easyui.min.js 315KB
jquery-1.11.0.js 276KB
jquery-1.11.0.min.js 94KB
jquery.datagrid.js 58KB
bootstrap.js 54KB
jquery.pnotify.js 33KB
bootstrap.min.js 28KB
jquery.treegrid.js 26KB
jquery.tree.js 25KB
bootstrap-paginator.js 20KB
jquery.pnotify.min.js 16KB
jquery.tabs.js 15KB
jquery.panel.js 12KB
jquery.layout.js 11KB
jquery.combo.js 11KB
jquery.combobox.js 10KB
共 192 条
- 1
- 2
java爱好者
- 粉丝: 698
- 资源: 149
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- mmqrcode1714153659780.png
- Screenshot_2024-04-27-06-08-58-486_com.baidu.xin.aiqicha.jpg
- 基于Javaweb+Tomcat+MySQL的大学生公寓管理系统+sql文件.zip
- 实训作业基于javaweb的订单管理系统源码+数据库+实训报告.zip
- 多机调度问题贪心算法基于最小堆和贪心算法求解多机调度问题.zip
- 基于同态加密技术的匿名电子投票系统源码.zip
- Pyqt5项目框架-PyQt项目开发实践
- 基于C通过MQTT的智能农业大棚管理系统(本科毕业设计)
- python+CNN的网络入侵检测算法源码.zip
- js 实现记住密码功能 js.cookie.min.js
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页