修复亲属关系列表分页SQL拼接问题
This commit is contained in:
@@ -47,7 +47,7 @@
|
|||||||
FROM ccdi_staff_fmy_relation r
|
FROM ccdi_staff_fmy_relation r
|
||||||
LEFT JOIN ccdi_base_staff s ON r.person_id = s.id_card
|
LEFT JOIN ccdi_base_staff s ON r.person_id = s.id_card
|
||||||
<where>
|
<where>
|
||||||
r.is_emp_family = 1
|
AND r.is_emp_family = 1
|
||||||
<if test="query.personId != null and query.personId != ''">
|
<if test="query.personId != null and query.personId != ''">
|
||||||
AND r.person_id = #{query.personId}
|
AND r.person_id = #{query.personId}
|
||||||
</if>
|
</if>
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
FROM ccdi_staff_fmy_relation r
|
FROM ccdi_staff_fmy_relation r
|
||||||
LEFT JOIN ccdi_base_staff s ON r.person_id = s.id_card
|
LEFT JOIN ccdi_base_staff s ON r.person_id = s.id_card
|
||||||
<where>
|
<where>
|
||||||
r.is_emp_family = 1
|
AND r.is_emp_family = 1
|
||||||
<if test="query.personId != null and query.personId != ''">
|
<if test="query.personId != null and query.personId != ''">
|
||||||
AND r.person_id = #{query.personId}
|
AND r.person_id = #{query.personId}
|
||||||
</if>
|
</if>
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
package com.ruoyi.info.collection.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationQueryDTO;
|
||||||
|
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
|
||||||
|
import org.apache.ibatis.mapping.BoundSql;
|
||||||
|
import org.apache.ibatis.mapping.Environment;
|
||||||
|
import org.apache.ibatis.mapping.MappedStatement;
|
||||||
|
import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver;
|
||||||
|
import org.apache.ibatis.session.Configuration;
|
||||||
|
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
|
||||||
|
import org.apache.ibatis.type.TypeAliasRegistry;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
class CcdiStaffFmyRelationMapperTest {
|
||||||
|
|
||||||
|
private static final String RESOURCE = "mapper/info/collection/CcdiStaffFmyRelationMapper.xml";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void selectRelationPage_shouldRenderWhitespaceBeforeDynamicAndClause() throws Exception {
|
||||||
|
MappedStatement mappedStatement = loadMappedStatement(
|
||||||
|
"com.ruoyi.info.collection.mapper.CcdiStaffFmyRelationMapper.selectRelationPage");
|
||||||
|
|
||||||
|
CcdiStaffFmyRelationQueryDTO queryDTO = new CcdiStaffFmyRelationQueryDTO();
|
||||||
|
queryDTO.setPersonId("320101199001010011");
|
||||||
|
String sql = renderSql(mappedStatement, Map.of(
|
||||||
|
"page", new Page<>(1, 10),
|
||||||
|
"query", queryDTO
|
||||||
|
));
|
||||||
|
|
||||||
|
assertTrue(sql.contains("WHERE r.is_emp_family = 1 AND r.person_id = ?"), sql);
|
||||||
|
assertFalse(sql.contains("1AND"), sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MappedStatement loadMappedStatement(String statementId) throws Exception {
|
||||||
|
Configuration configuration = new Configuration();
|
||||||
|
configuration.setEnvironment(new Environment("test", new JdbcTransactionFactory(), new NoOpDataSource()));
|
||||||
|
registerTypeAliases(configuration.getTypeAliasRegistry());
|
||||||
|
configuration.getLanguageRegistry().register(XMLLanguageDriver.class);
|
||||||
|
configuration.addMapper(CcdiStaffFmyRelationMapper.class);
|
||||||
|
|
||||||
|
try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream(RESOURCE)) {
|
||||||
|
XMLMapperBuilder xmlMapperBuilder =
|
||||||
|
new XMLMapperBuilder(inputStream, configuration, RESOURCE, configuration.getSqlFragments());
|
||||||
|
xmlMapperBuilder.parse();
|
||||||
|
}
|
||||||
|
return configuration.getMappedStatement(statementId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String renderSql(MappedStatement mappedStatement, Map<String, Object> params) {
|
||||||
|
BoundSql boundSql = mappedStatement.getBoundSql(new HashMap<>(params));
|
||||||
|
return boundSql.getSql().replaceAll("\\s+", " ").trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerTypeAliases(TypeAliasRegistry typeAliasRegistry) {
|
||||||
|
typeAliasRegistry.registerAlias("map", Map.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class NoOpDataSource implements DataSource {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public java.sql.Connection getConnection() {
|
||||||
|
throw new UnsupportedOperationException("Not required for SQL rendering tests");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public java.sql.Connection getConnection(String username, String password) {
|
||||||
|
throw new UnsupportedOperationException("Not required for SQL rendering tests");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public java.io.PrintWriter getLogWriter() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLogWriter(java.io.PrintWriter out) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLoginTimeout(int seconds) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLoginTimeout() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public java.util.logging.Logger getParentLogger() {
|
||||||
|
return java.util.logging.Logger.getGlobal();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T unwrap(Class<T> iface) {
|
||||||
|
throw new UnsupportedOperationException("Not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isWrapperFor(Class<?> iface) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user