一、mybatis是對JDBC的封裝,在JDBC中占位符使用的是?,在mybatis中占位符有兩種形式,分別是#{}和${}
大多數情況下使用#{},少數需要使用${}
二、#{}和${}的區別在於,使用#{}占位符,當傳遞給sql 的參數替換占位符時會進行轉譯,如果傳遞的參數是字符串,在替換占位符時,會加上一對''號;而參數在替換${}時是直接拼接
三、當需要為不帶引號的字符串進行占位時可以使用${}占位符
四、舉例對比
根據字段name進行模糊查詢
1、使用${}占位符
mapper.xml文件中:
<select id="findLike" resultType="com.qxzh.Emp">
select * from emp where name like '%${name}%'
</select>
java中:
public static List<Emp> findLike(){
List<Emp> list =null;
try {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(in).openSession();
//封裝參數
// Emp emp=new Emp();
// emp.setName("劉");
// list = sqlSession.selectList("EmpMapper.findLike", emp);
//或者:
HashMap<String, String> map = new HashMap<>();
map.put("name","陳");
list = sqlSession.selectList("EmpMapper.findLike", map);
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
2、使用#{}占位符
mapper.xml中:
<select id="findLike2" resultType="com.qxzh.Emp">
select * from emp where name like #{name}
</select>
java中:
public static List<Emp> findLike(){
List<Emp> list =null;
try {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(in).openSession();
//封裝參數
// Emp emp=new Emp();
// emp.setName("%劉%");
// list = sqlSession.selectList("EmpMapper.findLike2", emp);
//或者
HashMap<String, String> map = new HashMap<>();
map.put("name","%陳%");
list = sqlSession.selectList("EmpMapper.findLike2", map);
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
