0 0

Mybaties foreach in 查询 5

现在问题是这样的,我想使用in查询,于是使用了两种方式:
1:java代码中 用 String ids = “‘aa’,'bb'” xml文件为
where id in (#{ids})
查询结果为零,原因是这种字符串拼接好像mybaties不认,不知道各位大牛有没有什么解决方案
2:使用foreach查询
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">  #{item}  </foreach>
但是这种查询,如果我的list为:
List<String> ids = new ArrayList<String>();
ids.add("'aa'");
ids.add("'bb'");

查询报错:
2015-01-08 21:45:19,183 [main] DEBUG n.core.resource.getResourcesByAuthoritys -==>  Preparing: select count(1) from (select distinct ID, NAME, SORT, RESOURCE_TYPE, VALUE, MODIFY_TIME, MODIFIER, CREATE_TIME, CREATOR from IC_RESOURCE where ID in ( select resource_authority.resource_id from ic_resource_authority resource_authority where resource_authority.authority_id in ( select role_authority.authority_id from ic_role_authority role_authority where role_authority.authority_id in ( ? , ? ) ) )) tmp_count
2015-01-08 21:45:19,339 [main] DEBUG n.core.resource.getResourcesByAuthoritys -==> Parameters: '297e8282280f11ed01280f170e950002'(String), '297e8282280f11ed01280f18e4920005'(String)
2015-01-08 21:45:19,370 [main] ERROR esource.service.impl.ResourceServiceImpl -nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: java.lang.NullPointerException
### The error may exist in file [C:\workspace\tuban\WebRoot\WEB-INF\classes\cn\sh\tuban\core\resource\mapping\ResourceMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### Cause: java.lang.NullPointerException
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: java.lang.NullPointerException
### The error may exist in file [C:\workspace\tuban\WebRoot\WEB-INF\classes\cn\sh\tuban\core\resource\mapping\ResourceMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### Cause: java.lang.NullPointerException
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:365)
at $Proxy18.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:195)
at cn.sh.tuban.core.resource.dao.imp.ResourceDaoImp.getResourcesByAuthoritys(ResourceDaoImp.java:53)
at cn.sh.tuban.core.resource.service.impl.ResourceServiceImpl.getResourcesByAuthoritys(ResourceServiceImpl.java:61)
at cn.sh.tuban.core.resource.service.impl.ResourceServiceImpl$$FastClassByCGLIB$$ae9d6179.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
at cn.sh.tuban.core.resource.service.impl.ResourceServiceImpl$$EnhancerByCGLIB$$9958d3da.getResourcesByAuthoritys(<generated>)
at mybatis.MybatisTest.testRelation(MybatisTest.java:111)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: java.lang.NullPointerException
### The error may exist in file [C:\workspace\tuban\WebRoot\WEB-INF\classes\cn\sh\tuban\core\resource\mapping\ResourceMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### Cause: java.lang.NullPointerException
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:107)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:98)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:355)
... 45 more
Caused by: java.lang.NullPointerException
at cn.sh.tuban.framework.pulgin.mybatis.plugin.PagePlugin.intercept(PagePlugin.java:105)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:57)
at $Proxy29.prepare(Unknown Source)
at org.apache.ibatis.executor.ReuseExecutor.prepareStatement(ReuseExecutor.java:73)
at org.apache.ibatis.executor.ReuseExecutor.doQuery(ReuseExecutor.java:53)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:259)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:132)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:105)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104)
... 51 more
2015年1月08日 21:46

1个答案 按时间排序 按投票排序

0 0

bboss持久层的foreach循环操作,可以参考以下:
bboss 动态sql使用foreach循环示例

2015年1月09日 10:00

相关推荐

    测试mybatis里foreach用法

    总的来说,MyBatis的`&lt;foreach&gt;`标签是处理动态SQL和集合数据的关键工具,它可以优雅地解决批量操作、条件查询等问题,让SQL语句的编写更加灵活和高效。正确理解和熟练运用`&lt;foreach&gt;`,能显著提升MyBatis的开发效率...

    详解mybatis foreach collection示例

    MyBatis foreach collection是一个非常强大的功能,它允许开发者动态构建In集合条件查询。该功能可以指定一个集合,声明集合项和索引变量,这些变量可以在元素体内使用。此外,该功能还允许开发者指定开放和关闭的...

    mybatis foreach标签的使用详解

    MyBatis 中的 foreach 标签是非常常用的标签之一,它可以用来遍历集合,构建 in 条件语句或者批量操作语句。本文将详细介绍 MyBatis foreach 标签的使用详解。 foreach 标签的基本使用 foreach 标签的基本使用方式...

    Mybatis中foreach标签带来的空格\换行\回车问题及解决方案

    "Mybatis foreach标签带来的空格、换行、回车问题及解决方案" Mybatis 中的 foreach 标签是一个功能强大的工具,允许开发者在 SQL 语句中循环遍历集合对象。但是,在使用 foreach 标签时,经常会遇到空格、换行、...

    mybatis中foreach报错:_frch_item_0 not found的解决方法

    在MyBatis中,`&lt;foreach&gt;`标签是用于遍历集合对象并生成SQL语句的重复部分,例如IN语句的括号内元素。然而,当你遇到“_frch_item_0 not found”这样的错误时,通常是由于在使用`&lt;foreach&gt;`时出现了配置或编码上的...

    Mybatis foreach标签使用不当导致异常的原因浅析

    Mybatis的`foreach`标签是其动态SQL功能的一部分,它允许我们方便地处理集合数据,例如在批量插入、更新或删除操作中构建SQL语句。然而,如果不正确地使用`foreach`,可能会导致各种异常,这通常是由于对标签属性的...

    Mybatis多参数查询与列表查询不同方式实现

    在Mybatis这个强大的持久层框架中,多参数查询与列表查询是常见的操作,尤其是在处理复杂的业务逻辑时。本文将深入探讨Mybatis如何实现这两种查询方式,并提供多种实现方法。 首先,我们来理解Mybatis的基本概念。...

    mybatis 中 foreach collection的用法小结(三种)

    MyBatis 中的 foreach Collection 用法小结(三种) MyBatis 中的 foreach 语句是用来迭代一个集合,以便在 SQL 语句中生成相应的条件语句。foreach 语句的主要用途是在构建 in 条件中,例如 select * from blog ...

    MyBatis中Foreach参数问题.doc

    ### MyBatis中Foreach参数问题详解 #### 一、问题背景 在使用MyBatis进行数据库操作时,经常会遇到一些参数传递的问题,特别是在使用`foreach`语句处理集合数据时,很容易出现“Parameter 'xxxList' not found. ...

    mybatis简单查询

    **条件查询**:MyBatis提供了多种动态SQL标签,如`choose`(相当于`switch`)、`when`、`otherwise`,`if`(相当于`if...else`),`where`(用于避免在无条件时生成多余的`WHERE`关键字),`trim`(修剪SQL片段的...

    MyBatis传入数组集合类并使用foreach遍历

    "MyBatis传入数组集合类并使用foreach遍历" MyBatis是一款流行的Java持久层框架,提供了强大的数据访问能力,今天我们来讨论如何在MyBatis中传入数组集合类并使用foreach遍历。 在实际开发中,我们经常需要将数组...

    Mybatis中动态SQL,if,where,foreach的使用教程详解

    在处理复杂查询时,MyBatis的动态SQL功能显得尤为重要。动态SQL是基于OGNL(Object-Graph Navigation Language)表达式,能够帮助我们在SQL语句中实现逻辑判断和条件组合,使得SQL的生成更具灵活性。 1. **if**标签:...

    MyBatis的foreach语句详解

    MyBatis的`foreach`语句是其动态SQL功能中的一个重要组成部分,主要用于处理SQL语句中的循环和集合数据。在数据库操作中,特别是在构建`IN`条件时,`foreach`非常实用,它可以避免手动拼接SQL字符串,提高代码的...

    MyBatis模糊查询

    - **`foreach`标签**:当需要对集合进行遍历时非常有用,例如在执行IN子查询时。 #### 五、注意事项 1. **参数类型**:确保`parameterType`属性与传递给查询的实际参数类型一致。 2. **结果映射**:确保`...

    解决Mybatis中foreach标签带来的空格,换行,回车问题

    通过网上找到order by排序可以有效解决这个问题,返回与查询时的产品id顺序一致。还有一点,List时有序的 这里先附带上这个sql语句(只能在数据库中成功) select prod_id, prod_name, price, `describe`, prod_date, ...

    mybatis基础分页,高级查询

    例如,可以使用 `&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;` 等标签来实现复杂的 WHERE 子句,或者利用 `&lt;foreach&gt;` 标签遍历集合参数,生成 IN 或 NOT IN 条件。这种方式避免了硬编码 SQL,提高了代码的可维护性...

    springmybatis

    mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...

    【持久化框架】Mybatis查询

    持久化框架Mybatis查询知识点 Mybatis是一种流行的持久化框架,用于将Java应用程序与数据库集成。它提供了强大的查询功能,能够满足复杂的查询需求。下面将从Mybatis查询的角度,详细介绍条件查询、多对一、一对多...

    MyBatis的项目。实现增删改查,以及多表联查和对标签的使用。批量删除。

    MyBatis可以通过`&lt;delete&gt;`标签配合`&lt;foreach&gt;`来实现,例如,传入一个ID列表,MyBatis会生成一个包含所有ID的IN子句,从而一次性删除多条记录。 - 另外,批量删除还可以结合存储过程来提高性能,MyBatis允许调用...

    mybatis常用语句和lyaui 多条件查询加分页

    ### MyBatis常用语句详解及Lyaui多条件查询加分页 #### 一、概述 在本篇文章中,我们将详细介绍MyBatis框架中的几种常用SQL语句编写方法及其应用场景,特别是针对数据库的增删改查操作。这些操作是任何Web应用开发...

Global site tag (gtag.js) - Google Analytics