Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据

数组数据通过sql语句转为数据库表衔接到from或join后进行直接或关联查询

Mybatis之数组数据通过sql语句转为数据库表衔接到from或join后进行直接或关联查询

标题很绕,我也没想好怎么命名,所以这里详细说明一下。
某些数据可能并不是存储到当前项目的数据库中,所以我们无论通过合种方式获取到的数据,都需要进行当前项目的某些业务模块的表进行关联,如果我们不想通过程序进行关联,只需要将这些数据通过sql语句转换为数据库表,然后再与当前项目的业务模块的数据库表进行关联查询(JOIN等),这样查询会省去自己分页、排序等麻烦的操作,使用Mybatis的分页、排序等功能就可以,方便很多,废话不多说,看案例吧。

外部数据

[
	{
		serviceId: '001',
		callTime: 100,
		failureTime: 3,
		successTime: 97,
		health: 0.97
	}, {
		serviceId: '002',
		callTime: 300,
		failureTime: 30,
		successTime: 270,
		health: 0.98
	}, {
		serviceId: '003',
		callTime: 500,
		failureTime: 60,
		successTime: 440,
		health: 0.89
	}
]

当前项目表格数据(表名:service_info)

[
	{
		id: '001',
		serviceName: '服务001'
	}, {
		serviceId: '002',
		serviceName: '服务002'
	}, {
		serviceId: '003',
		serviceName: '服务003'
	}
]

将外部数据转为Table表格,与service_info关联查询

以下是在Mybatis的xml文件中使用

select 
	si.id AS id,
	si.name AS name,
	tmp.success_time AS successTime,
    tmp.failure_time AS failureTime,
    tmp.call_time AS callTime,
    tmp.health AS health
from service_info si
left join (
	<foreach collection="list" item="item" index="index" separator="union">
       select
       '${item.service_id}' as id,
       '${item.successTime}' as success_time,
       '${item.failureTime}' as failure_time,
       '${item.callTimes}' as call_time,
       '${item.health}' as health
    </foreach>
) tmp on si.id = tmp.id   
order by success_time desc 

结语

通过以上的案例,其实就是一种特殊场景的使用而已,所以并不一定会使用到,这里只是自己记录一下。

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: PostgreSQL递归查询(从子到父、从父到子)

下一篇: EMAS 移动 DevOps 解决方案 —— Mobile DevOps

精华推荐