2301_78464877 2024-07-16 13:54 采纳率: 50%
浏览 34
已结题

想在mybatis实现无实体类查询怎么做

用springboot的框架去查询数据库的数值,按理来说要构建实体类,但是现在由于需求,要求进行动态查询,表名不唯一,不能构建List map 作为mybatis的返回值,听说可以使用 List<Map<String, Object>> map 作为查询返回的结果,但是没成功,
这是方法,里面参数有 tablename,动态输入的表名,HashMap<String, String> columnMap 这是一个map,其中key是 数据库表字段名,String 是sql语句中要填写的sql别名

    List<Map<String, Object>> getAllData(@Param("tablename")String tablename,@Param("columnMap")HashMap<String, String> columnMap);

xml配置 中对应的语句大概为 select key1 as value1…… from tablename where del =0,
现在xml怎么写

  • 写回答

5条回答 默认 最新

  • GISer Liu 2024-07-16 13:56
    关注

    该回答引用自GPT-3.5, 由博主 GISer Liu 编写:

    问题分析

    用户希望在Spring Boot框架中使用MyBatis进行动态查询,不需要构建实体类,而是使用List<Map<String, Object>>作为查询返回的结果。用户已经定义了一个方法getAllData,并希望在MyBatis的XML配置文件中编写相应的SQL语句。

    解决方案

    为了实现动态查询并返回List<Map<String, Object>>,我们需要在MyBatis的XML配置文件中使用动态SQL和参数映射。以下是详细的解决方案:

    1. 定义Mapper接口

      import org.apache.ibatis.annotations.Param;
      import java.util.HashMap;
      import java.util.List;
      
      public interface DynamicQueryMapper {
          List<Map<String, Object>> getAllData(@Param("tablename") String tablename, @Param("columnMap") HashMap<String, String> columnMap);
      }
      
    2. 编写MyBatis的XML配置文件
      resources目录下创建一个XML文件,例如DynamicQueryMapper.xml,内容如下:

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      
      <mapper namespace="com.example.mapper.DynamicQueryMapper">
          <select id="getAllData" resultType="java.util.Map">
              SELECT
              <foreach collection="columnMap" index="key" item="value" separator=",">
                  ${key} AS ${value}
              </foreach>
              FROM ${tablename}
              WHERE del = 0
          </select>
      </mapper>
      
    3. 解释XML配置

      • <foreach>标签用于遍历columnMap,其中index是数据库表字段名,item是SQL语句中的别名。
      • ${key}${value}分别代表数据库表字段名和别名。
      • ${tablename}用于动态插入表名。
    4. 在Spring Boot配置文件中配置MyBatis
      确保在application.propertiesapplication.yml中配置了MyBatis的Mapper扫描路径:

      # application.properties
      mybatis.mapper-locations=classpath:mapper/*.xml
      
    5. 使用Mapper接口进行查询
      在你的服务类或控制器中注入DynamicQueryMapper并调用getAllData方法:

      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
      import java.util.HashMap;
      import java.util.List;
      
      @Service
      public class DynamicQueryService {
          @Autowired
          private DynamicQueryMapper dynamicQueryMapper;
      
          public List<Map<String, Object>> queryData(String tablename, HashMap<String, String> columnMap) {
              return dynamicQueryMapper.getAllData(tablename, columnMap);
          }
      }
      

    总结

    通过上述步骤,你可以在Spring Boot框架中使用MyBatis实现无实体类的动态查询,并返回List<Map<String, Object>>类型的结果。关键在于使用MyBatis的动态SQL和参数映射功能,确保SQL语句能够根据传入的参数动态生成。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月20日
  • 已采纳回答 8月12日
  • 创建了问题 7月16日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画