parameterType
写在mapper文件中的一个属性,代表dao接口中方法的参数类型, 类型的完全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过反射机制,推断出具体传入语句的参数,默认值为未设置( unset)。 接口中方法的参数从 java 代码传入到mapper 文件的 sql 语句。
int 或 java.lang.Integer
hashmap 或 java.util.HashMap
list 或 java.util.ArrayList
student 或 com.bjpowernode.domain.Student
例如存在接口:public Student selectStudentById(Integer id);
@Testpublic void testSelectStudentById() {SqlSession sqlSession = MyBatisUtils.getSqlSession();StudentDao studentDao = sqlSession.getMapper(StudentDao.class);Student student = studentDao.selectStudentById(1001);System.out.println(student);}
传入一个简单类型的参数
- 简单类型:java基本类型和String, sql语句中在对应的位置采用占位符:
#{任意字符}, 和方法的参数名无关。实现原理
在使用#{}后,mybatis执行sql是使用jdbc中的PreparedStatement对象
由mybatis执行下面的代码:
- mybatis创建Connection,PreparedStatement对象
- 执行sql,封装为resultType对象
传入多个参数
使用@param命名参数【重要】
在接口中使用,在方法的形参前面加入 @Param("自定义参数名") 对应的在mapper文件中使用 #{自定义参数名}
public List<Student> selectStudentMultiParam(@Param("myname") String name,@Param("myage") Integer age);
<select id="selectStudentMultiParam" resultType="com.liangwei.entity.Student">select id, name, email, age from student where name=#{myname} or age=#{myage}</select>
使用对象传参【重要】
- 前提:有一个对象,能够对应数据库中的字段
- 在mapper文件中, 使用
#{类中的成员变量名称} - 完整格式为:
#{变量名称, javaType=java的全限定名, jdbcType=jdbc中的类型名称}(后面两个可以省略)
按位置传参(了解)
参数位置从 0 开始, 引用参数语法 #{ arg ``位置 ``}, 第一个参数是#{arg0}, 第二个是#{arg1}注意: mybatis-3.3 版本和之前的版本使用#{0},#{1}方式, 从 mybatis3.4 开始使用#{arg0}方式。
使用map存放
Map 集合可以存储多个值, 使用Map向 mapper 文件一次传入多个参数。Map 集合使用 String的 key,Object 类型的值存储参数。 mapper 文件使用 # { key } 引用参数值。

#和$的区别
- #
select id, name, email, age from student where id=#{studentId}
结果:select id, name, email, age from student where id=?
- $ -> 使用Statement对象执行,效率比PreparedStatement低-> 可能产生 SQL注入
select id, name, email, age from student where id=${studentId}
结果:select id, name, email, age from student where id=1001
字符串拼接的方式:String sql = "select id, name, email, age from student where id=" + "1001"
【说明】${}更常用在替换列名、表名上面。
例如:select * from student order by ${colName}
