mybatis上的报错处理,分页查询、批量处理

5 篇文章 0 订阅
2 篇文章 0 订阅

一、MyBatis之java.lang.UnsupportedOperationException异常解决方案

原因就在于resultType代表的是List中的元素类型,而不应该是List本身,究其原因就在于被dao中的方法声明

切记:resultType返回的是集合中的元素类型,而不是集合本身

二、mybatis模糊查询出现“索引 1 超出范围”

在mapper文件中,把入参的 #{xxx},换成${xxx}

三、Mybatis异常There is no getter for property named 'XXX' in 'class java.lang.String'

1.当入参为 string类型时 (包括java.lang.String.)

我们使用#{xxx}引入参数.会抛异常There is no getter for property named 'XXX' in 'class java.lang.String'

2.解决方法一:把#{xxx}修改为 #{_parameter} 即可

3.解决方法二:可以在方法中提前定义:

public int  methodName(@Param(value="state") String state ){

..

}

4.原因:Mybatis默认采用OGNL解析参数,所以会自动采用对象树的形式取 string.xxx 值,如果没在在方法中定义,则会抛异常报错。

四、分页查询的写法

根据输入的key 查询

mapper文件里面的写法:

<select id="searchFile" resultType="com.alibaba.fastjson.JSONObject">
        select top ${pageSize}
        <include refid="Base_Column_List"/>
        from lyg_file
        where name like '%${key}%'
        and type = 'file'
        AND id not in (SELECT top ${begin} id from lyg_file where parentId = #{parentId,jdbcType=INTEGER}
        AND type = 'file' ORDER BY createTime DESC)
        ORDER BY createTime DESC;
    </select>

五 批量查询的写法

xml的方式

 

1、如果是一个参数的时:

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
 
TestDAO.getItermByList(list);
//DAO的接口:
//public List<HashMap<String,String>> getItermByList(List<Integer> list)
 
xml中的sql:
<select id="getItermByList" resultType="java.util.HashMap">
        SELECT id,display_name as name from t_recommendation_info where id in
        <foreach item="item" index="index" collection="list"
                 open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>

 

2、如果是一个map多个参数的时候:

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
HashMap<String,Object> parames = new HashMap<String,Object>();
 
parames.put("mapList",list);
TestDAO.getItermByList(parames);
//DAO接口:
//public List<HashMap<String,String>> getItermByList(HashMap<String,Object> parames);
 
xml中的sql:
<select id="getItermByList" resultType="java.util.HashMap">
        SELECT id,display_name as name from t_recommendation_info where id in
        <foreach item="item" index="index" collection="mapList"
                 open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>


注意collection给的值

3、如果是一个对象:

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
 
//TestModel  的实现
public class TestModel {
 
    private List<Integer> searchList;
 
    public List<Integer> getSearchList() {
        return searchList;
    }
 
    public void setSearchList(List<Integer> searchList) {
        this.searchList = searchList;
    }
}
 
TestModel tm = new TestModel();
tm.setSearchList(list);
TestDAO.getItermByList(tm)
 
//DAO接口:
//public List<HashMap<String,String>> getItermByList(TestModel parames);
//XML中的sql:
<select id="getItermByList" resultType="java.util.HashMap">
        SELECT id,display_name as name from t_recommendation_info where id in
        <foreach item="item" index="index" collection="searchList"
                 open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>

注意collection中的参数和对象的变量是一样的。

注解的方式:

@Select({
    "<script>" 
    	+ "SELECT "
    	+ "orders.orderId, product_sku.productId, product_sku.skuName, "
    	+ "orders.number, orders.orderPrice,product_sku.skuPrice, "
    	+ "orders.orderCreate, customer.mobile, shop_keeper.mobile1 as shopKeeperMobile, "
    	+ "shop.name, orders.shopId, shop.address, shop.cityCode "
    	+ "FROM orders, product_sku, customer, shop, shop_keeper "
    	+ "WHERE orders.skuId=product_sku.skuId "
    	+ "AND orders.customerId = customer.customerId "
    	+ "<if test='orderStatus != null'>"  
    	+      "AND orders.orderStatus IN "
    	+      "<foreach item='status' index='index' collection='orderStatus' open='(' separator=',' close=')'>"
        +           "#{status} "
        +      "</foreach>"
        + "</if>"
    	+ "AND orders.shopId = shop.shopId "
        + "AND orders.shopId = shop_keeper.shopId "
    	+ "ORDER BY customer.mobile DESC, orders.shopId DESC ,orders.orderCreate DESC"
    + "</script>"
    })
    List<Map<String, Object>> selectOrders(@Param(value="orderStatus")List<Short> orderStatus);
    
    @Update({
    "<script>"
        + "UPDATE orders SET orderStatus = #{orderStatus} WHERE orderId in "
        + "<foreach item='item' index='index' collection='orderId' open='(' separator=',' close=')'>"
        +       "#{item}"
        + "</foreach>" 
    +"</script>" 
    })
    int updateOrderStatus(@Param("orderStatus") Short orderStatus,@Param("orderId") String[] orderList);

属性说明:

collection: 指定要遍历的集合(三种情况 list,array,map) !!!!在这种使用注解sql的情况下,这里请填写mapper方法中集合的名称      
item:将当前遍历出的元素赋值给指定的变量 (相当于for循环中的i)
separator:每个元素之间的分隔符 
open:遍历出所有结果拼接一个开始的字符 
close:遍历出所有结果拼接一个结束的字符 
index:索引。遍历list的时候是index就是索引,item就是当前值 
#{变量名}就能取出变量的值也就是当前遍历出的元素

来源:https://blog.csdn.net/liyantianmin/article/details/50516076

https://blog.csdn.net/weixin_39923425/article/details/79373573 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当启动Spring Boot整合MyBatis-Plus时出现启动报错,可能会遇到不同的错误信息。一种常见的错误是"Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled"。这个错误通常是由于依赖导入错误或注解配置问题引起的。另一种常见的错误是在浏览器输入地址后返回500错误。这可能是由于代码逻辑问题、注解报错或无法自动注入bean的错误导致的。如果遇到类似的问题,可以先检查依赖是否正确导入,然后检查注解配置是否正确。如果以上步骤都没有问题,可以尝试使用debug模式运行应用程序以获取更详细的错误信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [spring boot整合mybatis-plus启动报错问题及解答.pdf](https://download.csdn.net/download/Conquer24/12686490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Springboot整合Mybatis报错大集合(保姆式排错)](https://blog.csdn.net/yy12345_6_/article/details/123896812)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值