最近在开发一套自主取数系统,项目中用到mybatis,着实获得了一些新技能。
1、sql xml文件没有编译
问题原因:启动函数在启动时会通过
new SpringApplicationBuilder().sources(RunMain.class).run(args);会找到resources的application.properties文件中的配置,里面mybatis.mapperLocations=classpath*:com/pamirs/fd/**/*.xml,发现xml文件不在这个目录下
解决方法:将xml文件放到resources文件下,
然后mybatis.mapperLocations=classpath:xml/*.xml
2、mysql配置问题
问题:批量插入时,
<update id="updateBatch">
<foreach collection="list" item="item" separator=";">
update report_form_query_indexs_info set
report_form_name = #{item.reportFormName},field_name=#{item.fieldName},field_value=#{item.fieldValue},modifier=#{item.modifier},fieldType=#{item.fieldType}
,matchCondition=#{item.matchCondition},formats=#{item.formats},regular=#{item.regular},isRequired=#{item.isRequired},status=#{item.status},gmt_modify=#{item.gmtModify}
where id = #{item.id}
</foreach>
</update>
sql语句正确,但运行时一直报错,### The error may involve defaultParameterMap
### The error occurred while setting parameters
问题原因:mysql配置没有加上允许批量操作。
解决方案:
3、问题:要查询数据库,但查询的字段未定,需要根据传入的参数来定(List<String>)。
解决方案:
4、批量保存
5、查询写法
前面是数据库字段、后面是DO字段。
6、参数是对象,不定条件查询写法(jdbcType=VARCHAR可以去掉)
/*
*
* **/
List<TraceInfoDO> selectData(@Param("queryDTO") QueryDTO queryDTO);
<select id="selectData" parameterType="com.pamirs.fast.trace.web.model.QueryDTO" resultType="com.pamirs.fast.trace.web.model.TraceInfoDO">
SELECT
<include refid="select_mapping"/>
from trace_info
<where>
<if test=" queryDTO!=null">
<if test="queryDTO.traceId!=null and queryDTO.traceId != '' ">
trace_id = #{queryDTO.traceId}
</if>
<if test="queryDTO.businessId!=null and queryDTO.businessId!='' ">
and business_id = #{queryDTO.businessId,jdbcType=VARCHAR}
</if>
<if test="queryDTO.serviceId!=null and queryDTO.serviceId!='' ">
and service_id = #{queryDTO.serviceId,jdbcType=VARCHAR}
</if>
<if test="queryDTO.dataSource!=null and queryDTO.dataSource!='' ">
and data_source = #{queryDTO.dataSource,jdbcType=VARCHAR}
</if>
<if test="queryDTO.fieldName!=null and queryDTO.fieldName!='' ">
and field_name = #{queryDTO.fieldName,jdbcType=VARCHAR}
</if>
<if test="queryDTO.tableName!=null and queryDTO.tableName!='' ">
and table_name=#{queryDTO.tableName,jdbcType=VARCHAR}
</if>
<if test="queryDTO.startTime!=null">
and operation_time <![CDATA[>=]]> #{queryDTO.startTime}
</if>
<if test="queryDTO.endTime!=null">
and operation_time <![CDATA[<=]]> #{queryDTO.endTime}
</if>
</if>
</where>
</select>
<select id="selectDataByDTO" parameterType="com.pamirs.fast.trace.web.model.NodeInfoQueryDTO" resultType="com.pamirs.fast.trace.web.model.NodeInfoDO"> SELECT <include refid="select_mapping"/> from node_info where table_des = #{nodeInfoQueryDTO.fieldName} and status =0 <if test="nodeInfoQueryDTO.dataSource!=null"> and field1 = #{nodeInfoQueryDTO.dataSource} </if> <if test="nodeInfoQueryDTO.tableName!=null"> and field2 = #{nodeInfoQueryDTO.tableName} </if> <if test="nodeInfoQueryDTO.rank!=null"> and rank = #{nodeInfoQueryDTO.rank} </if> </select>