mybatis查询的结果,用list来接收map类型的数据怎么写
时间: 2024-02-26 15:57:37 浏览: 118
使用MyBatis查询的结果是一个List<Map<String, Object>>类型的数据,其中每一个Map对象代表一条记录,Map的key为列名,value为对应的值。如果你想要用List来接收这个结果,可以按照以下方式进行代码编写:
```
List<Map<String, Object>> resultList = sqlSession.selectList("yourSqlStatement");
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for(Map<String, Object> map : resultList){
list.add(map);
}
```
这样,你就可以将查询结果转换为List<Map<String, Object>>类型的数据了。
相关问题
mybatis一对多查询,多的部分需要使用map接收
好的,针对你的问题,我可以给你提供以下思路:
1. 在 MyBatis 的映射文件中,使用 resultMap 标签定义结果映射关系,其中使用 collection 标签定义多个子查询结果的映射关系,并使用 column 标签指定用于关联的列名。
2. 在 Java 代码中,定义一个包含多个子查询结果的 Map 对象,使用 MyBatis 的 SqlSession 对象执行查询操作,并将查询结果映射到 Map 对象中。
下面是一个示例的 MyBatis 映射文件和 Java 代码:
MyBatis 映射文件:
```xml
<!-- 定义 resultMap -->
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="orders" column="id" javaType="java.util.List" ofType="Order"
resultMap="orderMap"/>
</resultMap>
<resultMap id="orderMap" type="Order">
<id property="id" column="id"/>
<result property="name" column="name"/>
</resultMap>
<!-- 定义查询语句 -->
<select id="getUser" resultMap="userMap">
SELECT u.id, u.name, o.id, o.name
FROM user u INNER JOIN order o ON u.id = o.user_id
WHERE u.id = #{id}
</select>
```
Java 代码:
```java
Map<String, Object> userMap = new HashMap<>();
userMap.put("id", 1);
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUser(userMap);
System.out.println(user);
} finally {
sqlSession.close();
}
```
注意,这里的 User 和 Order 是自定义的实体类,用于封装查询结果。同时,User 中包含了一个 List 类型的 orders 属性,用于存储多个 Order 对象。
用Java写,mybatis的xml文件sql,接收参数是PageResult<CustomerCompanyDO>的分页查询带有查询条件
假设你的查询语句是在 `CustomerCompanyMapper.xml` 文件中,以下是一个示例的 SQL 语句,可以实现带查询条件的分页查询:
```xml
<!-- 分页查询 SQL,其中 #{condition} 是动态条件,#{offset} 和 #{limit} 是分页参数 -->
<select id="selectByCondition" resultType="CustomerCompanyDO">
SELECT *
FROM customer_company
<where>
<if test="condition != null and condition != ''">
AND (
company_name LIKE CONCAT('%', #{condition}, '%')
OR company_address LIKE CONCAT('%', #{condition}, '%')
)
</if>
</where>
ORDER BY id DESC
LIMIT #{offset}, #{limit}
</select>
```
在 Java 代码中,可以使用 MyBatis 的 `RowBounds` 对象来传递分页参数,使用 `Map` 对象来传递查询条件。以下是一个示例代码:
```java
// 定义查询条件和分页参数
String condition = "test"; // 假设查询条件是 "test"
int pageNum = 1; // 分页页码
int pageSize = 10; // 分页大小
// 构造查询条件和分页参数的 Map 对象
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("condition", condition);
paramMap.put("offset", (pageNum - 1) * pageSize);
paramMap.put("limit", pageSize);
// 创建 RowBounds 对象
RowBounds rowBounds = new RowBounds((pageNum - 1) * pageSize, pageSize);
// 调用 MyBatis 的分页查询方法
List<CustomerCompanyDO> resultList = sqlSession.selectList("selectByCondition", paramMap, rowBounds);
// 封装查询结果到 PageResult 对象中,例如:
PageResult<CustomerCompanyDO> pageResult = new PageResult<>();
pageResult.setList(resultList);
pageResult.setPageNum(pageNum);
pageResult.setPageSize(pageSize);
// ... 其他分页信息的设置
```
需要注意的是,以上代码中的 `sqlSession` 对象是通过 `SqlSessionFactory` 创建的,可以在 MyBatis 的配置文件中配置。另外,需要在代码中处理异常和关闭资源等操作。
阅读全文