第三节 给SQL语句传参
1、#{}方式
Mybatis会在运行过程中,把配置文件中的SQL语句里面的#{}转换为“?”占位符,发送给数据库执行。
配置文件中的SQL:
delete from t_emp where emp_id=#{empId}
实际执行的SQL:
delete from t_emp where emp_id=?
2、${}方式
将来会根据${}拼字符串
①SQL语句
②Mapper接口
注意:由于Mapper接口中方法名是作为SQL语句标签的id,不能重复,所以Mapper接口中不能出现重名的方法,不允许重载!
public interface EmployeeMapper {
Employee selectEmployee(Integer empId);
Employee selectEmployeeByName(@Param("empName") String empName);
int insertEmployee(Employee employee);
int deleteEmployee(Integer empId);
int updateEmployee(Employee employee);<br />}
③junit测试
@Test
public void testDollar() {
EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
Employee employee = employeeMapper.selectEmployeeByName("r");
System.out.println("employee = " + employee);<br />}
④实际打印的SQL
select emp_id empId,emp_name empName,emp_salary empSalary from t_emp where emp_name like ‘%r%’
⑤应用场景举例
在SQL语句中,数据库表的表名不确定,需要外部动态传入,此时不能使用#{},因为数据库不允许表名位置使用问号占位符,此时只能使用${}。
其他情况,只要能用#{}肯定不用${},避免SQL注入。