原创

换一种思路达到xml中动态设置resulttype

温馨提示:
本文最后更新于 2022年10月27日,已超过 918 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

一 项目需求

通过数据库表名获取数据

二 实现思路

数据库框架使用的是mybatis

1. 在mapper.xml中自定义sql

    <select id="getDataByTableName" resultType="java.lang.Object">
        select * from ${tableName}
    </select>

使用Object对象进行返回值映射,只能查询出一列数据,想要查询出多列,需要将返回值设置为Map

2.设置resultType为map类型

1.xml

    <select id="getDataByTableName" resultType="map">
        select * from ${tableName}
    </select>

2.mapper

    List<Map<String,Object>> getDataByTableName(@Param("tableName") String tableName);

3. 用户表查询结果

{
    "code": 200000,
    "data": [
        {

            "password": "d191ea03b17c9722f8c33177fb5952a2",
            "loginname": "user1",
            "phone": "12236658742",
            "name": "德玛西亚",
            "id": "a97fbcc1-87b4-4354-8553-a45a9132feff"
        },
        {

            "password": "d191ea03b17c9722f8c33177fb5952a2",
            "loginname": "admin",
            "phone": "13348852569",
            "name": "张三丰",
            "id": "b1b66631-4e02-4a11-ab5b-d286f56a0e8c",
            "roletypeid": "2b4a8e27-515d-41ba-9981-5588a6c4c040"
        }
    ],
    "message": "请求成功"
}

4 补充

当某些数据库字段为空时,上述方式将不能返回这些为空的字段。此时可以根据数据库表名获取实体类,通过json处理即可。

1.数据库表名处理

此处的数据库表名为小写下划线命名,实体类名称为数据库表名的驼峰命名

    tableName = tableName.substring(0,1).toUpperCase()+tableName.substring(1);
2.定义实体类的完整路径

包名加表名

    String entity = "com.xxx.pojo.entity."+tableName;
3.通过json处理数据
    //dataTempList(查询出来的集合)
    JSON.parseArray(JSON.toJSONString(dataTempList), Class.forName(entity))
4. JSON依赖
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
5. 处理后的效果
{

    "code": 200000,
    "data": [
        {

            "id": "a97fbcc1-87b4-4354-8553-a45a9132feff",
            "loginname": "user1",
            "organizationid": null,
            "name": "德玛西亚",
            "password": "d191ea03b17c9722f8c33177fb5952a2",
            "phone": "12236658742",
            "roletypeid": null,
            "filerightid": null
        },
        {

            "id": "b1b66631-4e02-4a11-ab5b-d286f56a0e8c",
            "loginname": "admin",
            "organizationid": null,
            "name": "张三丰",
            "password": "d191ea03b17c9722f8c33177fb5952a2",
            "phone": "13348852569",
            "roletypeid": "2b4a8e27-515d-41ba-9981-5588a6c4c040",
            "filerightid": null
        }
    ],
    "message": "请求成功"
}
正文到此结束