Java Mybaties In查询无法返回结果映射对象

问题描述:

在Springboot mybaties mapper.xml下 使用in查询参数由Java后台拼接字符串而来,执行查询后,Java后台收到的响应结果为null,但是将sql放至数据库查询时,发现能查到数据


Java Mybaties In查询无法返回结果映射对象_第1张图片


Java Mybaties In查询无法返回结果映射对象_第2张图片


上图为一个列表数据,人员和资质为一对多的关系,一个人员有多个资质

对应的数据库表设计为:safePerson(人员表), SafeQualificat(资质表)



Java Mybaties In查询无法返回结果映射对象_第3张图片


Java Mybaties In查询无法返回结果映射对象_第4张图片

其中,qualificat_ids(值为:id1|id2|id3)和id为关联id。一个id对应这资质表中的一条数据


创建一些测试数据..


Java Mybaties In查询无法返回结果映射对象_第5张图片



人员表里的资质id关联到资质表的主键,project_id为项目id,因为在项目树上可以点击某个项目 从而过滤出刚项目下的所有作业人员 前期的准备工作完成后,开始写Java后台代码(Springboot+mybaties基于mapper.xml实现)


设计思路:

先通过项目id过滤查询到,项目下所有的作业人员,在通过查询到的作业人员的资质id去关联查询到人员所属资质...(理论上 可以通过一条sql来完成所有的查询逻辑)

简易的sql如下:

SELECT

b.*

FROM

safequalificat b

WHERE

b.id IN (

SELECT

a.qualificat_ids

FROM

safeperson a

LEFT JOIN safeproject b ON a.project_id = b.id

WHERE

b.id = '78c96e18490c4eb0b4cb190cd6af7522'

AND a.person_name LIKE '%嘿%'

)

问题在于:我们的id格式为

a4b7de4e6a384d4dbc558cb0003c09b3|60745f57db514d40a74e83c77b15be2d|c1a6cf42da124733b27231ea20fcb95a

需要通过Mysql函数方法将之转为:

‘a4b7de4e6a384d4dbc558cb0003c09b3’,’60745f57db514d40a74e83c77b15be2d’,’c1a6cf42da124733b27231ea20fcb95a’

目前没找到这种方法,所有只有在Java程序对id就行转换中,然后查询两次

首先,在mapper层中,定义一个查询人员集合的方法,在mapper.xml中进行实现


Java Mybaties In查询无法返回结果映射对象_第6张图片

在定义一个通过人员资质id,去获取资质的接口


Java Mybaties In查询无法返回结果映射对象_第7张图片

看起来没有什么问题,执行的时候。通过查看日志,sql执行了 并且参数也是带进去了


Java Mybaties In查询无法返回结果映射对象_第8张图片

可是我们的页面上,是看不到人员的资质。


Java Mybaties In查询无法返回结果映射对象_第9张图片

将控制台的sql放入数据库里执行,发现也能查询数据。也就是说sql是没问题的



难道是响应对象的问题?我们在xml中自定义映射到响应类时,结果是一样的。

其实,问题在于#符号,因为mybaties的参数占位符以#字符开头时,在处理请求参数时,会自动将参数值加上双引号和一些字符过滤处理防止sql注入


In查询时将参数占位符用$时,表示不会给参数加引号及其额外的处理

你可能感兴趣的:(Java Mybaties In查询无法返回结果映射对象)