美文网首页
Mybatis配置中#{}与${}的区别

Mybatis配置中#{}与${}的区别

作者: 我是邱邱 | 来源:发表于2018-09-07 09:41 被阅读0次

    **#{} **

    (1)防止sql注入。使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,sql语句中如果存在参数则会使用?作占位符,我们知道这种方式可以防止sql注入。

    (2)组成sql语句的时候把参数默认为字符串。在使用#{}时形成的sql语句,已经带有引号,例,select * from table1 where id=#{id} 在调用这个语句时我们可以通过后台看到打印出的sql为:select * from table1 where id='2' 加入传的值为2.也就是说在组成sql语句的时候把参数默认为字符串。

    ${}

    (1)原样输出,即参数是什么就输出什么,在sql语句中不会当做字符串处理
    例如select * from table1 where id=${id} 在调用这个语句时控制台打印的为:select * from table1 where id=2 ,假设传的参数值为2

    (2)基本类型不能使用${}

    对于以下情况必须使用{}:但是当使用{}查询数据库某张表中的所有数据的时候:参数为基本数据类型时也会报错,即

    image image

    测试代码为:

    image

    在MyBatis中,一般会优先选择#{}使用。

    MyBatis中,sql语句中用到的参数,本质上会自动封装为一个map对象,所以上述代码中可以使用map,即正确的代码如下:

    sql语句如下:

    image

    测试代码如下:

    // selectList查询多条语句List list =session.selectList(Person.class.getName() + ".findAll3");
    public void findAll3(){SqlSession session = sessionFactory.openSession();
    System.out.println(list.size());
    System.out.println(list.get(0).getName());
    session.commit();
    session.close();
    }
    
    
    image

    相关文章

      网友评论

          本文标题:Mybatis配置中#{}与${}的区别

          本文链接:https://www.haomeiwen.com/subject/kemqgftx.html