4.1MyBatis传参
传入参数
从java代码中把数据传入到mapper文件的sql语句中
- parameterType : 写在mapper文件中的 一个属性。 表示dao接口中方法的参数的数据类型。例如
StudentDao
接口public Student selectStudentById(Integer id)
- 一个简单类型的参数:简单类型: mybatis把java的基本数据类型和String都叫简单类型。在mapper文件获取简单类型的一个参数的值,使用 #{任意字符}
接口:
public Student selectStudentById(Integer id)
mapper:
select id,name, email,age from student where id=#{studentId}
当然,不写parameterType,MyBatis自己也会自动识别
传入多个参数
如果查询需要传入多个参数,我们可以使用@Param注解
接口
public interface StudentDao {
List<Student> selectStudentParam(@Param("myname") String name,
@Param("myage") Integer age);
}
mapper映射文件
<select id="selectStudentParam" resultType="com.mybatis.domain.Student">
select id,name,email,age from student where name=#{myname} or age=#{myage}
</select>
调用类
@Test
public void test01ByParam(){
SqlSession sqlSession= MyBatisUtils.getSqlSession();
StudentDao dao=sqlSession.getMapper(StudentDao.class);
List<Student> l=dao.selectStudentParam("中文",22);
for (Student s: l) {
System.out.println(s);
}
System.out.println(l);
}
传入多个参数(使用java对象作为接口中方法的参数)
接口方法(QueryParam类自行编写,也可以拿现有的Student类,类型比较灵活)
List<Student> selectStudentObject(QueryParam queryParam);
mapper文件
标准语法:#{属性名,javaType=类型名称,jdbcType=数据类型};javaType指在java中的属性数据类型,jdbcType指在数据库中的数据类型;具体的对应可以看mybatis的文档;但是这种标准语法很少用,所以我们用下面的简化版
<select id="selectStudentObject" resultType="com.mybatis.domain.Student">
select id,name,email,age from student where name=#{paramName} or age=#{paramAge}
</select>
调用方法
@Test
public void test01ByObject(){
SqlSession sqlSession= MyBatisUtils.getSqlSession();
StudentDao dao=sqlSession.getMapper(StudentDao.class);
QueryParam queryParam=new QueryParam();
queryParam.setParamName("nego");
queryParam.setParamAge(44);
List<Student> l=dao.selectStudentObject(queryParam);
for (Student s: l) {
System.out.println(s);
}
System.out.println(l);
}
多个参数(按位置)
<select id="selectStudentObject" resultType="com.mybatis.domain.Student">
select id,name,email,age from student where name=#{arg0} or age=#{arg1}
</select>
mybatis3.4前格式为 #{0};mybatis3.3后格式为 #{0};这种方法很少用
多个参数(Map存储参数方法)--不推荐用(略)
关于 # 和 $
在mapper文件中我们除了可以用 # 之外,也可以用 是通过连接的原理来执行sql语句的==>select id,name, email,age from student where id=" + "1001"
但是一般不建议,因为使用 用Statement
),而且还存在安全隐患, # 能够避免sql注入, $ 有sql注入的风险