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")),即可。