好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

mybatis 传入null值的解决方案

mybatis 传入null值解决

前端传入两个值,如果其中一个为null时,很多时候我们都很困惑,明明传入的是null,为啥mybatis 的xml文件中的if条件判断无效?

?

1

public String getPersonInfo( @PathParam ( "Name" ) String Name, @PathParam ( "IDCard" ) String IDCard)

dao层

?

1

public List<Map> getPersonInfo( @Param ( "name" ) String name, @Param ( "idcard" ) String idcard);

xml文件内容

?

1

2

3

4

< if test = "name == null or name == '0'.toString()" > 

    <![CDATA[ and (b.identity_id = #{idcard,javaType=String,jdbcType=VARCHAR})

    group by name,id_card,birthTime,sex  ]]>

</ if >

每次执行都是失败的,网上很多都说要在dao层添加@param注解和xml文件内容中要加入jdbcType类型就能解决,最后还是没解决

其实还有一个点忽略了,就是传入时的null值其实是个字符串null,根本就不是null,它是个字符串null

?

1

2

3

4

5

6

        if (Name == null || "null".equalsIgnoreCase(Name)) {

            Name = null;

        }

        if (IDCard == null || "null".equalsIgnoreCase(IDCard)) {

            IDCard = null;

        }

问题解决!

mybatis 注入老是为null

今天遇到个很弱智的问题,以此记录!时刻提醒自己

?

1

2

3

4

5

6

7

8

9

10

public int delExhibion(List<String> ids){

     Integer result = null ;

     ExhibitionManager exhibitionManager = new ExhibitionManager();

     for (String id : ids){

         exhibitionManager.setId(id);

         exhibitionManager.setDelFlag( "1" );

          result += exhibitionManagerMapper.delete(id);

     }

     return result;

}

发现老是执行 delete 的时候 ,老是报 空指针异常

然后尝试使用:  @Param  给参数加上命令     

?

1

int delete( @Param ( "id" ) String id);  

结果还是不行,

然后在尝试使用:对象传参,这样总该注入进去了吧 

?

1

int delete(Object dx);

结果还是不行,

然后在尝试使用:Mybatis 单个参数动态语句引用:

是当我们的参数为String时,在sql语句中#{id} 会去我们传进来的参数调getId()方法获取参数,很明显,String没有对应的方法,所以报错了,那我们这里要如何引用id呢,需要采用下面的写法:

?

1

2

3

4

5

6

7

8

< delete id = "delete" parameterType = "java.lang.String" >  

          SELECT * FROM table

          < where >  

                    < if test = "_parameter != null" >  

                            AND id= #{id}  

                    </ if >  

          </ where >  

</ select >

单Mybatis传参为单个参数时,在sql语句中需要使用  _parameter 来引用这个参数

结果还是不行。  

终于过了一会儿,看代码时突然顿悟

?

1

2

3

4

5

6

7

    public int delExhibion(List<String> ids){

        Integer result = null ;

        for (String id : ids){

              result += exhibitionManagerMapper.delete(id);

        }

        return result;

    }

Integer  result  我给他设置默认值  为null,   并且还让  reuslt  这个对象   result +=   

加等于在执行数据库操作返回结果时 用 result 去接收。 这不就一定是空指针了吗。

我给 Integer result = 0;  设置个默认值为0   那也不会出现这种情况!

或者 result =   给result  初始化赋值     也不会报  空指针异常!  不过这样做在我的业务中是不对的哦。  只是不会报错. 但是获取不到我想要的执行成功条数

?

1

2

Integer result = null ;

result =  exhibitionManagerMapper.delete(id);

真的是被自己气到了。以此记录!时刻提醒自己   

?

1

2

3

4

5

6

7

  public int delExhibion(List<String> ids){

        Integer result = 0 ;

        for (String id : ids){

              result += exhibitionManagerMapper.delete(id);

        }

        return result;

    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/u013343616/article/details/78124908

查看更多关于mybatis 传入null值的解决方案的详细内容...

  阅读:44次