mybatis的sql占位符:#{}和${}


一、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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM