Mybatis报红 Could not set parameters for mapping: ParameterMapping{property=‘id‘, mode=IN, javaType=cl
·
可以看到最后一行有一段是sql 条件语句

结果运行就报红了

原因:主要是因为在多行注释中嵌套了#注释的原因,只要在#注释前面加个\转义符号就好了
StudentMapper.java
public interface StudentMapper {
/**
* 查询所有的学生信息,以及对应的老师的信息
* @return
*/
public List<Student> getStudent();
}
StudentMapper.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.dao.StudentMapper">
<!--
这里的resultType是在核心配置里面设置了别名,所以是Student
思路:
1.查询所有学生信息
2.根据查询出来的学生tid,去查找对应的老师
-->
<select id="getStudent" resultMap="StudentTeacher">
select * from student;
</select>
<resultMap id="StudentTeacher" type="Student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<!--
复杂的属性:我们需要单独处理
不能像普通属性单单这样写,是错误的!!(这里举的例子是之前结果集映射时候的)
<result property="password" column="pwd"/>
如果Student类的属性是一个对象: association 关联的意思
如果Student类的属性是一个集合: collection 集合的意思
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
解析:为什么后面要跟一个javaType 和 select呢?
javaType:
因为我们知道这个属性(property="teacher")是一个引用类型(Teacher)
所以就是说明这个属性是什么类型的,因为这个成员变量teacher是一个对象
所以要给这个对象设置一个类型
select:
我们的目的是什么?就是将teacher的信息给查询出来,那么就需要根据column的值即tid的值
就是获得学生类里的tid然后用这个tid去老师表里再查返回一个teacher对象
和子查询很像mysql子查询(in)的实现
#SELECT * from student s ,teacher t WHERE s.tid in (SELECT t.id from teacher t)
-->
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
</resultMap>
<select id="getTeacher" resultType="Teacher">
/*
一种解析(有错误的):
1.student中有teacher成员变量,而teacher不是基本类型,因此需要告诉mybatis这个对象从哪来(就是怎么才能查到并且初始化一个对象)
2.在查询学生的语句中,写上resultMap来告诉mybatis我的teacher成员变量来自名为studentTeacher的结果映射
3.在StudentTeacher结果映射中,我们需要写出teacher怎么来的,property写出teacher成员变量,select告诉mybatis我是通过下边的getTeacher获得teacher
4.column标识getTeacher中缺省参数casual 值的来源是student表中的tid (ps:casual是随便的意思,你想填什么名字都可以)
另一种解析(这说的没毛病):前面写的tid没用,都没给getTeacher传参不信你把 where id=\#{id}去掉照样能查出来,因为他建的表只有一个老师 看不出来
*/
select * from mybatis.teacher where id=#{id}
</select>
</mapper>
MyTest类
public class MyTest {
@Test
public void testStudent(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> student = mapper.getStudent();
for (Student stu : student) {
System.out.println(stu);
}
sqlSession.close();
}
}
更多推荐
所有评论(0)