Mybatis通用操作数据库方法类总结
作者:网络转载 发布时间:[ 2014/6/18 10:56:48 ] 推荐标签:Mybatis 数据库
|
//=================================以下代码为myBatis实现的常用方法(后缀加BySql)===========================//
/**
* 往库表中插入记录
* @param statementId 调用myBatis的mapper文件的声明段名,
* 规则名:mapper的namespace+"." + 该mapper文件某片段的id
* @param value 要操作的对象
* @return 插入成功的记录数
*/
public int insertBySql(String statementId, Object value) {
return sqlSession.insert(statementId, value);
}
/**
* 删除库表中的记录(可批量删除),返回删除成功的记录数。
*
* @param statementId 调用myBatis的mapper文件的声明段名,
* 规则名:mapper的namespace+"." + 该mapper文件某片段的id
* @param value 删除条件值
* @return 删除成功的记录数
*/
public int deleteBySql(String statementId, Object value) {
return sqlSession.delete(statementId, value);
}
/**
* 更新库表中的记录(可批量更新),返回更新成功的记录数。
*
* @param statementId 调用myBatis的mapper文件的声明段名,
* 规则名:mapper的namespace+"." + 该mapper文件某片段的id
* @param value 更新条件值值
* @return 更新成功的记录数
*/
public int updateBySql(String statementId, Object value) {
return sqlSession.update(statementId, value);
}
/**
* 查询符合条件的记录,生成List返回。
*
* @param statementId 调用myBatis的mapper文件的声明段名,
* 规则名:mapper的namespace+"." + 该mapper文件某片段的id
* @param value 查询条件值
* @return list 找到的记录
*/
public List selectListBySql(String statementId, Object value) {
List list = sqlSession.selectList(statementId, value);
//数据库含有空格的字段值(char类型),装载到myBatis生成的持久对象属性中,是否自动去掉属性值左右两边的空格
//如果需要去掉空格,则使用如下方式
//list = Config.getPropertyBool("po.propertyvalue.trimable", true) ? BeanUtil.trim(list) : list
return list;
}
/**
* 查询单个符合条件的记录,生成Object返回</br>
* @param statementId 调用myBatis的mapper文件的声明段名,
* 规则名:mapper的namespace+"." + 该mapper文件某片段的id
* @param parameter 查询条件值
* @return list 找到的记录
*/
public Object selectOneBySql(String statementId, Object parameter) {
Object bean = sqlSession.selectOne(statementId, parameter);
//数据库含有空格的字段值(char类型),装载到myBatis生成的持久对象属性中,是否自动去掉属性值左右两边的空格
//如果需要去掉空格,则使用如下方式
//bean = Config.getPropertyBool("po.propertyvalue.trimable", true) ? BeanUtil.trim(bean) : bean
return bean;
}
/**
* myBatis分页查询符合条件的记录
* <p>
* 注意:调用该方法,必须在myBatis的mapper文件中存在statementId_COUNT片段</br>
* <b>特别说明:由于该命令采用的分页技术不是数据库本身的分页技术,而是采用ResultSet的absolute定位技术,<br>
* 需要把查询结果全部装入ResultSet再定位。如果查询结果较大(1万条记录以上),效率会很低。<br>
* 建议使用Hibernate的query方法或在mapper的XML中使用数据库内部分页技术<br>
* (即把pageId,pageSize作为参数传入SQL语句的类似limit n,m中)来查询。
* </b>
* </p>
* @param statementId 调用myBatis的mapper文件的声明段名,规则名:mapper的namespace+"." + 该sqlMap文件某片段的id
* @param parameter 查询条件对象
* @param offset 返回查询结果的起始行,从0开始
* @param pageSize 返回查询结果的大行数
* @throws com.fbd.crm.exception.BaseUncheckedException
* @return com.fbd.crm.common.QueryResult
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public QueryResult selectListForPagingBySql(String statementId, Object parameter) throws Exception{
Assert.hasText(statementId, "传入的SQL配置ID不能为空.");
//计算总页数
Integer count = null;
try {
count = (Integer)sqlSession.selectOne(statementId + "_COUNT", parameter);
} catch (Exception e) {
String msg = "配置文件中不存在COUNT语句或发生其它例外,无法执行总数统计. SqlMap id:" + statementId;
log.error(msg, e);
throw new Exception(e);
}
if ((count == null) || (count.intValue() <= 0)) {
log.info("执行COUNT后,返回的结果数为0,表示该SQL执行无结果数据返回.因此提前终止其数据查询并立即返回空集.");
return new QueryResult(new ArrayList(), 0);
}
List resultList = sqlSession.selectList(statementId, parameter);
QueryResult result = new QueryResult(resultList, count);
return result;
}
/**
* myBatis带汇总查询
* </b>
* </p>
* @param statementId 调用myBatis的mapper文件的声明段名,规则名:mapper的namespace+"." + 该sqlMap文件某片段的id
* @param parameter 查询条件对象
* @throws com.fbd.crm.exception.BaseUncheckedException
* @return com.fbd.crm.common.QueryResult
*/
public QueryResult selectListWithTotal(String statementId, Object parameter) throws Exception{
Assert.hasText(statementId, "传入的SQL配置ID不能为空.");
//计算总页数
Integer count = null;
try {
count = (Integer)sqlSession.selectOne(statementId + "_COUNT", parameter);
} catch (Exception e) {
String msg = "配置文件中不存在COUNT语句或发生其它例外,无法执行总数统计. SqlMap id:" + statementId;
log.error(msg, e);
throw new Exception(e);
}
if ((count == null) || (count.intValue() <= 0)) {
log.info("执行COUNT后,返回的结果数为0,表示该SQL执行无结果数据返回.因此提前终止其数据查询并立即返回空集.");
return new QueryResult(new ArrayList(),new ArrayList(), 0);
}
List resultList = sqlSession.selectList(statementId, parameter);
List totalList = sqlSession.selectList(statementId + "_TOTAL", parameter);
QueryResult result = new QueryResult(resultList, totalList, count);
return result;
}
/**
* 执行sql
* @category 该事务不在spring事务管理机制内
* @param sql
* @return List
* @throws SQLException
*/
public List executeQueryBySql(String sql) throws SQLException{
Connection con = null;
Statement stmt = null;
List list = new ArrayList();
try {
con = this.getConnection();//sqlSession.getConnection();
con.setAutoCommit(false);
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rSet = stmt.executeQuery(sql);
ResultSetMetaData md = rSet.getMetaData();
int num = md.getColumnCount();
while (rSet.next()) {
Map mapOfColValues = new HashMap(num);
for (int i = 1; i <= num; i++) {
mapOfColValues.put(md.getColumnName(i), rSet.getObject(i));
}
list.add(mapOfColValues);
}
con.commit();
} catch (Exception e) {
e.printStackTrace();
throw new SQLException("sql执行失败");
}finally {
if (stmt != null) {
stmt.close();
}
// 此处不关闭,连接关闭由org.springframework.jdbc.datasource.DataSourceTransactionManager自动完成
if (con != null) {
con.close();
}
}
return list;
}
}
|
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
在测试数据库性能时,需要注意哪些方面的内容?测试管理工具TC数据库报错的原因有哪些?怎么解决?数据库的三大范式以及五大约束编程常用的几种时间戳转换(java .net 数据库)优化mysql数据库的几个步骤数据库并行读取和写入之Python实现深入理解数据库(DB2)缓冲池(BufferPool)国内三大云数据库测试对比预警即预防:6大常见数据库安全漏洞数据库规划、设计与管理数据库-事务的概念SQL Server修改数据库物理文件存在位置使用PHP与SQL搭建可搜索的加密数据库用Python写一个NoSQL数据库详述 SQL 中的数据库操作详述 SQL 中的数据库操作Java面试准备:数据库MySQL性能优化

sales@spasvo.com