package com.award.dao;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.commons.lang.StringUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import com.award.dao.Page;
import com.award.dao.SaveTable;
public class BaseDao
{
private JdbcTemplate jdbcTemplate;
/**
* 注入数据源
* @param dataSource
*/
public void setDataSource(DataSource dataSource)
{
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
/**
* 得到JdbcTemplate实例
*
* @return
*/
public JdbcTemplate getJdbcTemplate()
{
return this.jdbcTemplate;
}
/**
* 添加 ,属性和数据库字段名一致,返回主键
*
* @param _objForSave
* ,实现SaveTable 的接口的类
*
*
* @return
*/
public Number saveAndReturnKey(SaveTable _objForSave)
{
return saveAndReturnKey(_objForSave, _objForSave.getTableName(),
_objForSave.getKeyColumns());
}
/**
* 添加实体,返回主键
*
* @param _objForSave
* @param sTableName
* @param sKeyColumns
* @return
*/
public Number saveAndReturnKey(Object _objForSave, String sTableName,
String... sKeyColumns)
{
SimpleJdbcInsert _insertActor = getSimpleJdbcInsert();
_insertActor.setTableName(sTableName);
_insertActor.usingGeneratedKeyColumns(sKeyColumns);
Number _newId = 0;
try
{
_newId = _insertActor
.executeAndReturnKey(new BeanPropertySqlParameterSource(
_objForSave));
}
catch (Exception e) {
e.printStackTrace();
}
traceSql(_insertActor.getInsertString());
return _newId;
}
/**
* @param _objForSave
* 插入数据库的类
*
*
* @return
*/
public void save(SaveTable _objForSave)
{
SimpleJdbcInsert _insertActor = getSimpleJdbcInsert();
_insertActor.setTableName(_objForSave.getTableName());
_insertActor.execute(new BeanPropertySqlParameterSource(_objForSave));
traceSql(_insertActor.getInsertString());
}
/**
*
* @param sTableName
* @param _columnAndValue
* @param sKeyColumns
* @return
*/
public Number saveAndReturnKey(String sTableName,
Map<String, Object> _columnAndValue, String... sKeyColumns)
{
SimpleJdbcInsert _insertActor = getSimpleJdbcInsert();
_insertActor.setTableName(sTableName);
_insertActor.usingGeneratedKeyColumns(sKeyColumns);
Number _newId = _insertActor.executeAndReturnKey(_columnAndValue);
traceSql(_insertActor.getInsertString());
return _newId;
}
/**
* 更新/删除
*
* @param sSql
* @param args
*/
public void update(String sSql, Object... _args)
{
getJdbcTemplate().update(sSql, _args);
}
/**
* 更新/删除
*
* @param sSql
* @param _paramMap
*/
public void update(String sSql, Map<String, ?> _paramMap)
{
getMyNamedParameterJdbcTemplate().update(sSql, _paramMap);
}
/**
* 反回一条数据并映射成对象 注 :“多条记录异常”
*
*
*
* @param sSql
* sql语句
* @param _args
* 条件
* @param _rowMapper
* @return
*/
public Object findForObject(String sSql, Object[] _args,
RowMapper _rowMapper)
{
return getJdbcTemplate().queryForObject(sSql, _args, _rowMapper);
}
/**
* 反回一条数据并映射成对象 注 :“多条记录异常”
*
*
*
* @param sSql
* sql语句
* @param _paramMap
* 查询条件,对应sql语句条件
* @param _rowMapper
* @return
*/
public Object findForObject(String sSql, Map<String, ?> _paramMap,
RowMapper _rowMapper)
{
return getMyNamedParameterJdbcTemplate().queryForObject(sSql,
_paramMap, _rowMapper);
}
/**
*
* @param sSql
* sql语句
* @param _params
* 查询条件,对应sql语句条件
* @param _rowMapper
* @return
*/
public List findForList(String sSql, Object[] _params, RowMapper _rowMapper)
{
return getJdbcTemplate().queryForList(sSql, _params, _rowMapper);
}
/**
*
* @param sSql
* @param _classzz
* @return
*/
public List findForList(String sSql, Class _classzz)
{
return getJdbcTemplate().queryForList(sSql, _classzz);
}
/**
*
* @param sSql
* @param _rowMapper
* @return
*/
public List findForList(String sSql, RowMapper _rowMapper)
{
return getJdbcTemplate().query(sSql, _rowMapper);
}
/**
*
* @param sSql
* @param _paramMap
* @param _rowMapper
* @return
*/
public List findForList(String sSql, Map<String, ?> _paramMap,
RowMapper _rowMapper)
{
return getMyNamedParameterJdbcTemplate().query(sSql, _paramMap,
_rowMapper);
}
/**
* 构造MySQL数据分页SQL
*
* @param sQueryString
* @param _startIndex
* @param pageSize
* @return
*/
public String getMySQLPageSQL(String sQueryString, Integer _startIndex,
Integer _pageSize)
{
String sResult = "";
if (null != _startIndex && null != _pageSize)
{
sResult = sQueryString + " limit " + _startIndex + "," + _pageSize;
}
else if (null != _startIndex && null == _pageSize)
{
sResult = sQueryString + " limit " + _startIndex;
}
else
{
sResult = sQueryString;
}
return sResult;
}
/**
* 构造数据总数查询 SQL
*
* @param sQueryString
* @return
*/
private String getCountQuerySQL(String sQueryString)
{
String sSql = "";
if (StringUtils.isNotEmpty(sQueryString))
{
sSql = "select count(*) from (" + sQueryString + ") xCount";
}
return sSql;
}
/**
* 分页数据查询
*
* @param sQueryString
* @param _startIndex
* @param _pageSize
* @return
*/
public Page getPageBySQL(String sQueryString, Integer _startIndex,
Integer _pageSize, RowMapper _rowMapper)
{
String sPageQueryString = sQueryString;
int iStartIndex = 0;
if (null != _startIndex && null != _pageSize)
{
iStartIndex = (_startIndex - 1) * _pageSize;
sPageQueryString = this.getMySQLPageSQL(sQueryString, iStartIndex,
_pageSize);
}
Integer count = this.getCount(this.getCountQuerySQL(sQueryString));
List _items = this.getJdbcTemplate()
.query(sPageQueryString, _rowMapper);
Page _page = new Page(iStartIndex, count, _pageSize, _items);
return _page;
}
/**
* 分页数据查询
*
* @param sQueryString
* @param _startIndex
* @param _pageSize
* @return
*/
public Page getPageBySQL(String sQueryString, Integer _startIndex,
Integer _pageSize,Map<String, ?> _paramMap, RowMapper _rowMapper)
{
String sPageQueryString = sQueryString;
int iStartIndex = 0;
if (null != _startIndex && null != _pageSize)
{
iStartIndex = (_startIndex - 1) * _pageSize;
sPageQueryString = this.getMySQLPageSQL(sQueryString, iStartIndex,
_pageSize);
}
Integer count = this.getCount(this.getCountQuerySQL(sQueryString),_paramMap);
List _items = this.getMyNamedParameterJdbcTemplate()
.query(sPageQueryString,_paramMap, _rowMapper);
Page _page = new Page(iStartIndex, count, _pageSize, _items);
return _page;
}
/**
*
* @param sQueryString
* @param Map<String, ?> _paramMap
* @return
*/
public Integer getCount(String sQueryString, Map<String, ?> _paramMap)
{
Integer count = this.getMyNamedParameterJdbcTemplate().queryForInt(sQueryString,
_paramMap);
return count;
}
/**
*
* @param sQueryString
* @param _values
* @return
*/
public Integer getCount(String sQueryString, Object... _values)
{
Integer count = this.getJdbcTemplate().queryForInt(sQueryString,
_values);
return count;
}
/**
* 得到NamedParameterJdbcTemplate 对象
*
* @return
*/
public NamedParameterJdbcTemplate getMyNamedParameterJdbcTemplate()
{
return new NamedParameterJdbcTemplate(getJdbcTemplate());
}
// ----tools
public SimpleJdbcInsert getSimpleJdbcInsert()
{
return new SimpleJdbcInsert(getJdbcTemplate());
}
public void traceSql(String sSql)
{
System.out.println("JDBC:" + sSql);
}
}