现在问题是这样的,我想使用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
相关推荐
总的来说,MyBatis的`<foreach>`标签是处理动态SQL和集合数据的关键工具,它可以优雅地解决批量操作、条件查询等问题,让SQL语句的编写更加灵活和高效。正确理解和熟练运用`<foreach>`,能显著提升MyBatis的开发效率...
MyBatis foreach collection是一个非常强大的功能,它允许开发者动态构建In集合条件查询。该功能可以指定一个集合,声明集合项和索引变量,这些变量可以在元素体内使用。此外,该功能还允许开发者指定开放和关闭的...
MyBatis 中的 foreach 标签是非常常用的标签之一,它可以用来遍历集合,构建 in 条件语句或者批量操作语句。本文将详细介绍 MyBatis foreach 标签的使用详解。 foreach 标签的基本使用 foreach 标签的基本使用方式...
"Mybatis foreach标签带来的空格、换行、回车问题及解决方案" Mybatis 中的 foreach 标签是一个功能强大的工具,允许开发者在 SQL 语句中循环遍历集合对象。但是,在使用 foreach 标签时,经常会遇到空格、换行、...
在MyBatis中,`<foreach>`标签是用于遍历集合对象并生成SQL语句的重复部分,例如IN语句的括号内元素。然而,当你遇到“_frch_item_0 not found”这样的错误时,通常是由于在使用`<foreach>`时出现了配置或编码上的...
Mybatis的`foreach`标签是其动态SQL功能的一部分,它允许我们方便地处理集合数据,例如在批量插入、更新或删除操作中构建SQL语句。然而,如果不正确地使用`foreach`,可能会导致各种异常,这通常是由于对标签属性的...
在Mybatis这个强大的持久层框架中,多参数查询与列表查询是常见的操作,尤其是在处理复杂的业务逻辑时。本文将深入探讨Mybatis如何实现这两种查询方式,并提供多种实现方法。 首先,我们来理解Mybatis的基本概念。...
MyBatis 中的 foreach Collection 用法小结(三种) MyBatis 中的 foreach 语句是用来迭代一个集合,以便在 SQL 语句中生成相应的条件语句。foreach 语句的主要用途是在构建 in 条件中,例如 select * from blog ...
### MyBatis中Foreach参数问题详解 #### 一、问题背景 在使用MyBatis进行数据库操作时,经常会遇到一些参数传递的问题,特别是在使用`foreach`语句处理集合数据时,很容易出现“Parameter 'xxxList' not found. ...
**条件查询**:MyBatis提供了多种动态SQL标签,如`choose`(相当于`switch`)、`when`、`otherwise`,`if`(相当于`if...else`),`where`(用于避免在无条件时生成多余的`WHERE`关键字),`trim`(修剪SQL片段的...
"MyBatis传入数组集合类并使用foreach遍历" MyBatis是一款流行的Java持久层框架,提供了强大的数据访问能力,今天我们来讨论如何在MyBatis中传入数组集合类并使用foreach遍历。 在实际开发中,我们经常需要将数组...
在处理复杂查询时,MyBatis的动态SQL功能显得尤为重要。动态SQL是基于OGNL(Object-Graph Navigation Language)表达式,能够帮助我们在SQL语句中实现逻辑判断和条件组合,使得SQL的生成更具灵活性。 1. **if**标签:...
MyBatis的`foreach`语句是其动态SQL功能中的一个重要组成部分,主要用于处理SQL语句中的循环和集合数据。在数据库操作中,特别是在构建`IN`条件时,`foreach`非常实用,它可以避免手动拼接SQL字符串,提高代码的...
- **`foreach`标签**:当需要对集合进行遍历时非常有用,例如在执行IN子查询时。 #### 五、注意事项 1. **参数类型**:确保`parameterType`属性与传递给查询的实际参数类型一致。 2. **结果映射**:确保`...
通过网上找到order by排序可以有效解决这个问题,返回与查询时的产品id顺序一致。还有一点,List时有序的 这里先附带上这个sql语句(只能在数据库中成功) select prod_id, prod_name, price, `describe`, prod_date, ...
例如,可以使用 `<if>`、`<choose>`、`<when>`、`<otherwise>` 等标签来实现复杂的 WHERE 子句,或者利用 `<foreach>` 标签遍历集合参数,生成 IN 或 NOT IN 条件。这种方式避免了硬编码 SQL,提高了代码的可维护性...
mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...
持久化框架Mybatis查询知识点 Mybatis是一种流行的持久化框架,用于将Java应用程序与数据库集成。它提供了强大的查询功能,能够满足复杂的查询需求。下面将从Mybatis查询的角度,详细介绍条件查询、多对一、一对多...
MyBatis可以通过`<delete>`标签配合`<foreach>`来实现,例如,传入一个ID列表,MyBatis会生成一个包含所有ID的IN子句,从而一次性删除多条记录。 - 另外,批量删除还可以结合存储过程来提高性能,MyBatis允许调用...
### MyBatis常用语句详解及Lyaui多条件查询加分页 #### 一、概述 在本篇文章中,我们将详细介绍MyBatis框架中的几种常用SQL语句编写方法及其应用场景,特别是针对数据库的增删改查操作。这些操作是任何Web应用开发...