[[toc]]

第三节 给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 {

  1. Employee selectEmployee(Integer empId);
  2. Employee selectEmployeeByName(@Param("empName") String empName);
  3. int insertEmployee(Employee employee);
  4. int deleteEmployee(Integer empId);
  5. 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注入。

上一节 回目录 下一节