欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis实现查询返回List《Map《String,Object》》格式数据(标题不让打尖括号)

程序员文章站 2022-03-04 22:21:16
...

背景:

        Mybatis的映射生成代码给我们的开发提供了很多方便,但是Mybatis生成的代码、查询语句和数据结构通常不能满足我们的开发需求。这就需要我们对mybatis查询结果集的形式和查询语句进行扩增和更改,将Mybatis的查询结果集返回为List<Map<String,Object>>可以为我们的正常开发提供很多方便。

 操作:

        在使用Mybatis完成文件的映射后,映射需要配置的xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动包位置 -->
    <classPathEntry location="D:\maven2lib\mysql\mysql-connector-java\5.1.8" /> 
    <context id="info" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!-- 数据库链接URL、用户名、密码 -->
         <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/osg_common_test?characterEncoding=utf8" userId="root" password="***"> 
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!-- 生成模型的包名和位置 -->
        <javaModelGenerator targetPackage="com.example.demo.Model" targetProject="TargetManage/src/main/java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- 生成的映射文件包名和位置 我这里将mapper的.xml文件和.java文件是分开的-->
        <sqlMapGenerator targetPackage="com.example.demo.Mapper" targetProject="TargetManage/src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.Mapper" targetProject="TargetManage/src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
    <!-- 要生成那些表(更改tableName(表名)和domainObjectName(生成的实体对象类名)就可以) -->
        <table tableName="target_use_scene_table" domainObjectName="Use_scene" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
    </context>
</generatorConfiguration>

完成后保存,右键运行,在TargetManage/src/main/resources目录下找到对应生成的xml文件,可在在Mapper.xml文件中进行修改。首先需要自定义自己的返回对象:

<!--注意type修改为“java.util.Map”并将id定义为自己的返回值名(可直接复制自动生成的resultMap过来修改)-->
<resultMap id="MyResultMap" type="java.util.Map">
<!--“ property”属性后对应Map中的键-->
    <id column="SCENE_ID" jdbcType="VARCHAR" property="Id" />
    <result column="SCENE_CODE" jdbcType="VARCHAR" property="sceneCode" />
    <result column="SCENE_NAME" jdbcType="VARCHAR" property="sceneName" />
    <result column="SCENE_DESCRIBE" jdbcType="VARCHAR" property="sceneDescribe" />
    <result column="SCENE_STATE" jdbcType="BIT" property="sceneState" />
    <result column="UPDATE_TIME" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>

在查询语句中定义:

<!--resultMap属性修改为MyResultMap-->
<select id="selectAllMap" resultMap="MyResultMap">
    select 
    <include refid="Base_Column_List" />
    from target_use_scene_table
</select>

这时候如果查询语句对应的返回值类型为“MyResultMap”,一条结果可以用Map<String , Object>接收,多条语句可用List<Map<String,Object>>接收,我这里使用List<Map<String,Object>>接收:

List<Map<String, Object>> selectAllMap();//接收查询结果

到这里就实现了查询返回List<Map<String,Object>>格式数据,当向前台反馈数据时,如列表需要规范地使用“key”区分,便不需要去更改模型,直接put("key",list.get(i).get("Id")),即可。