ibatis作为一个轻量级的orm工具现在非常流行,我在使用中发现,有时仅仅希望返回一个类型为map的list就可以了,
比如简单的查询统计之类的,没有必要定义太多的pojo,因此想能不能在ibatis中直接传入sql语句来执行,然后返回map呢?
从网上搜了一下, 还真有,实验成功后总结一下,大家共同进步。
其实很简单,就是在配置文件中添加以下的配置,
<!-- 测试Sql -->
<select id="sqlQuery" parameterClass="java.lang.String" resultClass="java.util.HashMap" remapResults="true">
<![CDATA[
$sql$
]]>
</select>
<select id="getMapList" remapResults="true" resultClass="java.util.HashMap" >
<![CDATA[
select ID,USERNAME,PASSWORD,CREATETIME from Account
]]>
</select>
注意以上配置中的 remapResults="true",之前就因为没有加这个参数,导致使用不的sql查询时出错的问题。
使用方法就更简单了,拼好sql语句后,调用
sqlMapper.queryForList("sqlQuery", sql)就得到了查询结果,
当然这个结果为List,并且list中的元素为Map类型,循环List,就得到查询明细。
以上方法对 于分类汇总类的查询统计功能尤其实用。如果只是count()的话,就取List的第一个元素就行了。
我们可以把这个方法抽出来写到一个util类中,方法如下
public static List queryForList(String sql){
List rtn = null;
try{
rtn = sqlMapper.queryForList("sqlQuery", sql);
}catch(SQLException sqle){
sqle.printStackTrace();
}
return rtn;
}
@SuppressWarnings("unchecked")
@Override
public List<?> getMapList() {
List<?> list = new ArrayList();
try {
list = getSqlMapClientTemplate().queryForList(namespace + ".getMapList");
} catch (Exception e) {
System.out.println(namespace + ".getMapList()异常!"
+ e.getMessage());
}
return list;
}
这样用的用法省去很多代码,不需要在声明实体类,直接使用map作为实体类来看,大家可以试试看
分享到:
相关推荐
在使用iBATIS(现已被MyBatis取代)进行数据库操作时,我们常常需要传递参数到SQL语句中。在iBATIS中,有两种主要的方式来处理这些参数:使用`$`和`#`。这两种方式在不同的场景下有不同的效果。 首先,让我们来看看...
在iBatis中,`<iterate>`标签是一个非常实用的功能,它允许我们处理集合数据,如数组、List或Map等,进行循环遍历并生成动态SQL语句。下面我们将详细探讨`<iterate>`标签的用法及其示例。 `<iterate>`标签的主要...
4. **动态SQL**:iBatis支持动态SQL,可以在XML中使用if、choose、when、otherwise等标签实现条件判断。 5. **使用SqlSession**:在Java代码中,通过SqlSessionFactory创建SqlSession对象,然后通过SqlSession执行...
在 ibatis 中,可以使用 `<select>` 元素来定义 SQL 查询,并通过 `resultClass` 属性指定结果集的类型。为了使查询结果能够适应变化的列名和列数,我们需要设置 `remapResults` 属性为 `true`。 ```xml <!-- ...
`<update id="updateUsersIterate" parameterClass="java.util.Map">`示例展示了如何根据`list`集合中的ID值批量更新`users`表中的`user_name`字段。注意,这里的`parameterClass`被设置为`java.util.Map`,这意味着...
4. **SqlSession**: Ibatis的工作核心,用于执行SQL语句并获取结果。 **环境搭建** 在Eclipse或MyEclipse中搭建Ibatis开发环境主要涉及以下步骤: 1. **添加依赖**: 首先需要在项目中引入Ibatis的JAR包或者通过...
iBatis多对多关系详解 iBatis是一种流行的持久层框架,用于简化Java应用程序...我们使用了三个数据库表来存储学生和教师之间的多对多关系,并使用iBatis来映射数据库表和Java对象。最后,我们实现了DAO来访问数据库。
Ibatis 的一大亮点是支持动态 SQL,开发者可以在 SQL 映射文件中使用条件判断、循环等结构,使得 SQL 语句能够根据传入参数的不同而变化。 **4. MyBatis vs Ibatis** 尽管 Ibatis 在后期演进成了 MyBatis,两者在...
对于Hibernate,我们可以使用`Criteria` API或`HQL`(Hibernate查询语言)进行查询,然后将返回的结果集包装到`ResultWrapper`中进行后续处理。 此外,我们还可以参考JQuery的延迟加载(lazy loading)概念,以优化...
#### 四、ibatis3.0中使用`IN`的关键元素——`<foreach>` 在ibatis3.0中,为了实现动态SQL的功能,引入了`<foreach>`标签来处理集合数据。下面详细介绍`<foreach>`标签的属性及其用法: 1. **`item`**: 表示当前...
final List<Map, Object>> tempList = list; try { if (list != null && !list.isEmpty()) { getSqlMapClientTemplate().execute( new SqlMapClientCallback() { @Override public Object doInSqlMapClient...
2. **动态SQL**: IBatis支持动态SQL,这意味着开发者可以在SQL语句中根据条件自由拼接,无需在代码中进行复杂的字符串拼接。 3. **结果映射**: IBatis可以自动将查询结果映射到Java对象,也可以自定义映射规则,...
// 创建并返回分页结果对象 PageResult<YourEntity> pageResult = new PageResult(params.get("pageNumber").toString(), params.get("pageSize").toString(), total, entities); return pageResult; } } ``` 5...
本文将深入探讨Ibatis实现分页的相关知识点,并基于提供的标签“源码”和“工具”,分享如何在实际项目中运用Ibatis进行分页处理。 首先,了解Ibatis的基本概念。Ibatis是由Apache基金会维护的一个开源项目,它是一...
部分内容:这段部分提供了ibatis用户指南的警告,关于从文档复制代码的问题,以及ibatis的概述、如何开始使用ibatis、构建SqlSessionFactory的方法(包括通过XML和不使用XML的方式)、获取SqlSession的过程、探索...
- **iBATIS v3**:采用了新的标签`<mappers>`,并在其中使用`<mapper resource=".../>`来引用映射文件。 这一改变使得iBATIS v3能够更灵活地处理多个映射文件,同时也增强了框架的可扩展性。 #### sqlMap 映射中...
5. **执行SQL**: 在服务实现类中,使用`SqlSession`的`selectOne`、`selectList`、`insert`、`update`或`delete`方法执行SQL,并处理返回的结果。 **C#与IBATIS** 虽然原生的IBATIS是为Java设计的,但C#也有类似的...
本文将深入探讨如何使用Ibatis框架来调用Oracle数据库中的存储过程,并实现返回自定义类型的处理方法。 #### Oracle自定义类型简介 Oracle支持用户自定义数据类型,这为复杂数据结构的应用提供了极大的便利。...
在`IBatisDao.java`中,可能会有一个`selectList()`方法返回一个对象列表: ```java List<User> selectUsers(); ``` 4. **动态SQL**:`IBatis`的动态SQL功能非常强大,可以在映射文件中编写条件语句,如`if`, `...