mybatis心得

最近在开发一套自主取数系统,项目中用到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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值