MyBatis #{} 和 ${} 引用值的用法

1.#{} 引用值的用法

UserMapper配置文件:

    <select id="queryOne" resultType="cn.tedu.mybatis.beans.User">
        select * from user where id = #{id}
    </select>

测试:

    // 根据配置文件创建sqlSessionFactory
    private SqlSessionFactory factory = null;
    @Before
    public void before() throws Exception{
        //1.读取MyBatis核心配置文件
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.根据配置文件创建sqlSessionFactory
        factory = new SqlSessionFactoryBuilder().build(in);
    }

  /** * #{} 用法 */ @Test public void test05(){ User user = new User(); user.setName("cjj"); user.setAge(24); // 1.创建sqlSession SqlSession session = factory.openSession(); // 2.执行操作 session.insert("cn.tedu.mybatis.beans.UserMapper.insertUser",user); // 3.提交事务,mybatis自动开启事务,但是并不会自动提交,需要手动提交事物 session.commit(); }

2.${} 引用值的用法

在UserMapper.xml中配置:

在此处通过${xxx}的语法用来引用属性

    <!-- ${} 的用法 -->
    <select id="queryAllOrder" resultType="cn.tedu.mybatis.beans.User">
        select * from user order by ${cname}
    </select>

测试类:

    // 根据配置文件创建sqlSessionFactory
    private SqlSessionFactory factory = null;
    @Before
    public void before() throws Exception{
        //1.读取MyBatis核心配置文件
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.根据配置文件创建sqlSessionFactory
        factory = new SqlSessionFactoryBuilder().build(in);
    }
    
    /**
     * ${} 的用法
     */
    @Test
    public void test06(){
        // 1.通过map,准备参数
        Map<String,String> map = new HashMap<String,String>();
        map.put("cname", "age");
        // 2.创建sqlSession
        SqlSession session = factory.openSession();
        // 3.执行操作
        List<User> list = session.selectList("cn.tedu.mybatis.beans.UserMapper.queryAllOrder",map);
        // 4.遍历结果
        System.out.println(Arrays.toString(list.toArray()));
    }

3. #{} 和 ${} 区别

#{} 在引用时,如果发现目标是一个字符串,则会将其值作为一个字符串拼接在sql上

${} 在引用时,即使发现目标是一个字符串,也不会作为字符串而是直接使用将其拼接到sql上

所以,通常情况下,使用#{}

而如果需要引用的是一个列名,使用${}

 

原文地址:https://www.cnblogs.com/chuijingjing/p/9857468.html