此篇文章记录在使用MyBatis的时候遇到的一些问题,不持续更新~


1:Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

原因:这个问题的情况是,根据表中的一些字段筛选数据的时候,比如resultType='java.lang.String'  但是表中根据这些筛选条件得到的数据不唯一,而且在mapper中的返回类型是String  就会出现上边的这种问题

办法:在mapper中将对应方法的返回值改为List<String>  然后再service中将重复数据(list中的数据都是一样的).get(0)就好(这里需要注意list中有数据,否则会有边界异常)


2:Mybatis中对MYSQL的批量操作

说明:批量操作的好处就是减少与数据库的交互次数,在大数据量下降低系统压力,提升业务效率,不多说直接上代码

2.1:批量添加

  mapper文件:参数为list

     Integer insertIntoCdcDelivery(List<CdcDeliveryEntity> records);
 xml文件:使用foreach标签实现批量操作
<insert id="insertIntoCdcDelivery">
		INSERT INTO im_cdc_delivery (
			row_id,
			bill_date,
			bill_no,
			bill_type,
			corp_no,
			warehouse_no,
			customer_no,
			parent_no,
			parent_type,
			relative_no,
			relative_type,
			box_num,
			sku_num,
			bill_amount,
			bill_status,
			remark
		)
		VALUES
			<foreach collection = "list" item = "item" index="index" separator=","> 
			<![CDATA[
			(
				uuid_short(), #{item.billDate,jdbcType=DATE}, #{item.billNo,jdbcType=VARCHAR}, 
				#{item.billType,jdbcType=VARCHAR}, #{item.corpNo,jdbcType=VARCHAR}, #{item.warehouseNo,jdbcType=VARCHAR}, 
				#{item.customerNo,jdbcType=VARCHAR}, #{item.parentNo,jdbcType=VARCHAR}, #{item.parentType,jdbcType=VARCHAR}, 
				#{item.relativeNo,jdbcType=VARCHAR}, #{item.relativeType,jdbcType=VARCHAR}, #{item.boxNum,jdbcType=INTEGER}, 
				#{item.skuNum,jdbcType=INTEGER}, #{item.billAmount,jdbcType=DECIMAL}, #{item.billStatus,jdbcType=TINYINT}, 
				#{item.remark,jdbcType=VARCHAR}
			)
			]]>
			</foreach>
</insert>

2.2:批量查询

  mapper文件:
List<PscProductDimEntity> SelectProductInfoByNo(@Param("list")List<String> list);

 xml文件:resultMap就不贴出来了,还有就是mybatis的自动生成实体+mapper+xml可以参考我的这篇文章MybatisGenerator生成代码

<select id="SelectProductInfoByNo" resultMap="SelectProductInfoByNoMap">
		SELECT
			product_no,
			product_name,
			brand_no,
			brand_name,
		FROM
			psc_product_dim
		WHERE
			product_no in 
		<foreach item="item" index="index" collection="list"  open="(" separator="," close=")" > 
                #{item} 
        </foreach> 
</select>


3:org.apache.ibatis.binding.BindingException: Parameter 'planned_time_status' not found

如果出现了这种问题,你确定参数拿到了,那就最后检查下mapper中是不是没有使用@Param注解