起初发现这个问题是因为导入文件时,用户输入的导入参数不规范,在字段中有逗号和空格一起出现,就会导致mybatis保存时发生sql异常。
异常数据张这样:
INSERT INTO enterprise_stratification (
id,
create_date,
create_by,
update_date,
update_by,
del_flag,
remarks,
platform_code,
company_name,
tax_level,
industry_attribute,
listing_attribute,
primary_business,
classification_industry,
equity_financing,
financ_level,
is_credit_stain,
is_equity_transfer,
is_loss_personnel,
annual_profit,
business_income,
financ_type,
financ_amount,
finance_rate,
fund_use,
build_project,
under_investment_project,
third_party_agency,
policy_subsidy,
shareholder_num,
employee_num,
legal_representative_name,
id_number,
phone_number,
contact_name,
contact_number,
credit_service_demand,
equity_service_needs,
financ_service_demand,
financ_smart_service,
relisting_service,
COMMENT,
contact_time,
referrer,
submitter,
submit_time
)
VALUES
(
'49f2495472774163a6469540ad8a12aa',
'2023-11-14 20:31:28.32',
'1',
'2023-11-14 20:31:28.32',
'1',
'0',
NULL,
'1',
'山西七曜生物科技有限公司',
'以上都不是',
'科技型中小企业',
'以上都不是',
'大健康饮品,茶饮料',
'零售业',
'获得过',
'小于等于100万',
'否',
'是',
'否',
'10',
'30',
'其他',
'100',
'5%以内',
'新品研发和产品销售推广',
'生产基地',
'新品研发及渠道建设',
'其他机构',
'20',
'3',
'10',
'李曜',
'140421199510083666',
'15235566543',
'李曜',
'15235566543',
专项信用深度报告分析,信用评级评价(七牌一证), 信用档案, 信用会员招募,
股权架构设计服务, 股权估值服务,股权质押融资服务,员工持股计划服务,
普惠必贷金融产品, 公司股权、债权、贷款、并购融资规模提升服务,
市场营销管理服务, 法律服务, ,投行推荐咨询服务,特色化标签评定(农业龙头、专精特新、科技型中小企业),
精准帮扶服务产品, 股权优化服务产品,股权确权服务产品, 券商推荐服务产品,
'多开展活动和宣传',
'3',
'政府机构',
'小太阳',
'2023-11-02'
)
其中,有些数据是没有用引号引起来,导致mysql认为他们是不同的字段的值
解决的办法:
1、在实体类保存时,添加去空格的校验
public void setFinancType(String financType) {
if(StringUtils.isNotBlank(financType)){
financType = financType.replaceAll("\\s", "");
}
this.financType = financType;
}
if(StringUtils.isNotBlank(financType)){
financType = financType.replaceAll("\\s", "");
}
首先做判空,不为空时去除空格,\\s为所有的空格符。
2、在mybatis中不使用#{value_name} 对实体和数据库字段做赋值,通过${value_name}来赋值