#叫做占位符
Mybatis是封装的JDBC 增强版 内部还是用的jdbc
每遇到一个#号 这里就会变为?占位符
一个#{}就是对应一个问号 一个占位符

用这个对象执行sql语句没有sql注入的风险
当 Dao 接口方法有多个参数,需要通过名称使用参数:在方法形参前面加入@Param(“自定义参数名 ”),mapper 文件使用#{自定义参数名}。

- <select id = "selectMulitParam" resultType="com.lifang.domain.Student">
- select id,name,email,age from student where name = #{myname} or age = #{myage}
-
- public List
selectMulitParam(@Param("myname") String name, - @Param("myage") Integer age);
- @org.junit.Test
- public void test04(){
- SqlSession sqlSession = MybatisUtils.getSqlSession();
- StudentDao dao = sqlSession.getMapper(StudentDao.class);
- List
students = dao.selectMulitParam("李四",23); - students.forEach(student -> System.out.println(student));
-
- }

使用 java 对象传递参数, java 的属性值就是 sql 需要的参数值。 灵活又方便


语法格式: #{ property属性名,javaType=java 数据类型的全限定名称,jdbcType=Mybatis定义的数据库中类型的名称 }
javaType, jdbcType 的类型 MyBatis 可以通过反射获取,一般不需要设置。
常用格式 #{ property }
- public class QueryParam {
- private String queryName;
- private Integer queryAge;
- <select id = "selectMultiObject" resultType="com.lifang.domain.Student">
- select id,name,email,age from student where name = #{queryName} or age =#{queryAge}
-
public List selectMultiObject(QueryParam queryParam);
- @org.junit.Test
- public void test05(){
- SqlSession sqlSession = MybatisUtils.getSqlSession();
- StudentDao dao = sqlSession.getMapper(StudentDao.class);
- QueryParam queryParam = new QueryParam("王五",23);
- List
students = dao.selectMultiObject(queryParam); - students.forEach(student -> System.out.println(student));
- }
所以我们传参的时候灵活一点,参数可以是现成的java对象,如Student;或者用自定义的java对象QueryParam:
- public List
selectMultiObject(QueryParam queryParam); -
- public List
selectMultiStudent(Student student);
-
- <select id = "selectMultiObject" resultType="com.lifang.domain.Student">
- select id,name,email,age from student where name = #{queryName} or age =#{queryAge}
- select>
-
-
- <select id = "selectMultiStudent" resultType = "com.lifang.domain.Student">
- select id,name,email,age from student where name = #{name} or age = #{age}
- select>
十、多个参数-使用对象