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上
所以,通常情况下,使用#{}
而如果需要引用的是一个列名,使用${}