package cn.jeesoft.mvc.dao;
import java.util.List;
import org.apache.ibatis.exceptions.TooManyResultsException;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.MyBatisSystemException;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;
import cn.jeesoft.core.exception.DbException;
import cn.jeesoft.core.exception.PrivilegeException;
import cn.jeesoft.core.model.BaseBean;
import cn.jeesoft.core.model.PagerModel;
import cn.jeesoft.core.utils.StringUtils;
/**
* 封装mybatis最基本的数据库操作
* @author king
*/
@Repository("baseDao")
public class BaseDao extends SqlSessionDaoSupport {
private static final boolean selectPrivilege = false;
/**
* 打开session,mybatis中的session能进行数据库基本的操作
* @return
*/
private SqlSession openSession() {
try {
return super.getSqlSession();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 查询一条记录
* @param arg0
* @return
*/
public <M extends BaseBean> M selectOne(String arg0) {
SqlSession session = openSession();
return session.selectOne(arg0);
}
/**
* 查询一条记录
* @param arg0
* @return
*/
public <M extends BaseBean> M selectOne(String arg0, int id) {
if (id <= 0) {
return null;
}
SqlSession session = openSession();
return session.selectOne(arg0, id);
}
/**
* 查询一条记录
*
* @param arg0
* @param arg1
* @return
*/
public <M extends BaseBean> M selectOne(String arg0, M param) {
if (param == null) {
return null;
}
SqlSession session = openSession();
M bean = null;
try {
bean = session.selectOne(arg0, param);
} catch (MyBatisSystemException e) {
if (e != null && e.getCause() instanceof TooManyResultsException) {
} else {
throw e;
}
}
return bean;
}
/**
* 分页查询
*
* @param selectList
* @param selectCount
* @param param
* @return
*/
public <M extends BaseBean, Q extends BaseBean, P extends PagerModel<M, Q>> P selectPageList(String selectList,
String selectCount, P param) {
if (param == null) {
return null;
}
SqlSession session = openSession();
List<M> list = session.selectList(selectList, param);
Object oneC = session.selectOne(selectCount, param);
int count = StringUtils.toInt(oneC, 0);
if (list==null || list.isEmpty()) {
list = null;
}
param.setList(list);
param.setTotal(count);
return param;
}
/**
* 查询多条记录
*
* @param arg0
* @return
*/
public <M extends BaseBean> List<M> selectList(String arg0) {
SqlSession session = openSession();
List<M> datas = session.selectList(arg0);
if (datas==null || datas.isEmpty()) {
datas = null;
}
return datas;
}
/**
* 查询多条记录
*
* @param arg0
* @param arg1
* @return
*/
public <M extends BaseBean> List<M> selectList(String arg0, M arg1) {
SqlSession session = openSession();
List<M> datas = session.selectList(arg0, arg1);
if (datas == null || datas.isEmpty()) {
datas = null;
}
return datas;
}
/**
* 查询总数
*
* @param arg0
* @param arg1
* @return
*/
public int getCount(String arg0) {
SqlSession session = openSession();
return session.selectOne(arg0);
}
/**
* 插入一条记录
*
* @param arg0
* @return
*/
public int insert(String arg0) {
if(selectPrivilege){
throw new PrivilegeException("只具备查询的权限!");
}
SqlSession session = openSession();
return session.insert(arg0);
}
/**
* 插入一条记录,成功则返回插入的ID;失败则抛出异常
*
* @param arg0
* @param bean
* @return
*/
public int insert(String arg0, BaseBean bean) {
if(selectPrivilege){
throw new PrivilegeException("只具备查询的权限!");
}
if (bean == null) {
return -1;
}
SqlSession session = openSession();
int row = session.insert(arg0, bean);
if(row == 1){
return bean.getId();
}
throw new DbException("数据插入异常");
}
/**
* 更新一条记录
*
* @param arg0
* @return
*/
public int update(String arg0) {
if(selectPrivilege){
throw new PrivilegeException("只具备查询的权限!");
}
SqlSession session = openSession();
return session.update(arg0);
}
/**
* 更新一条记录
*
* @param arg0
* @param bean
* @return
*/
public int update(String arg0, BaseBean bean) {
if(selectPrivilege){
throw new PrivilegeException("只具备查询的权限!");
}
if (bean == null) {
return -1;
}
SqlSession session = openSession();
return session.update(arg0, bean);
}
/**
* 删除一条记录
*
* @param arg0
* @return
*/
public int delete(String arg0) {
if(selectPrivilege){
throw new PrivilegeException("只具备查询的权限!");
}
SqlSession session = openSession();
return session.delete(arg0);
}
/**
* 删除一条记录
*
* @param arg0
* @param id
* @return
*/
public int delete(String arg0, int id) {
if(selectPrivilege){
throw new PrivilegeException("只具备查询的权限!");
}
if (id <= 0) {
return -1;
}
SqlSession session = openSession();
return session.delete(arg0, id);
}
/**
* 删除一条记录
*
* @param arg0
* @param bean
* @return
*/
public int delete(String arg0, BaseBean bean) {
if(selectPrivilege){
throw new PrivilegeException("只具备查询的权限!");
}
if (bean == null) {
return -1;
}
SqlSession session = openSession();
return session.delete(arg0, bean);
}
}