添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
慈祥的饺子  ·  瞭解 AJAX UpdatePanel ...·  9 月前    · 
朝气蓬勃的薯片  ·  提示react ...·  1 年前    · 
Mybatis报红 Could not set parameters for mapping: ParameterMapping{property=‘id‘, mode=IN, javaType=cl 2021-06-08 23:45:15
<?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();
                                    如果你使用的是xml文件配置mapper,并且传入了null值,则也会引发这个错误:
Exception in thread "main" org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for...
                                    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping
                                    Could not set parameters for mapping: ParameterMapping{property=‘id’, mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId=‘null’, jdbcTypeName=‘null’, expression=‘n...
                                    Error updating database.  Cause: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property=‘id’, mode=IN, javaType=int, jdbcType=null, numericScale=null, resultMapId=‘null’, jdbcTypeName=‘null’, expression=‘null’
                                    报错信息:
"nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='id', mode=IN, javaType=class java.lang.Long, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expres
                                    错误及解决方法
因为担心@Builder的注解的类不支持mybatis做查询,刚好也有了一个错误,跟了一圈发现不是mybatis的问题,是自己mapper的like写错导致。记录一下跟踪过程,做个总结。
这个错误的原因是mapper的参数和要导入的参数数量不一致,我这里的原因是把参数写在''里了,导致mapper没有解析到这个参数。
错误的写法'#{userNamePinyin}%',正确的写法#...
                                    当问们遇到Could not set parameters for mapping: ParameterMapping
错误时,多数为我们的mapper映射写的有问题,检查我们的sql语句。
如:中英文符号、大于小于号等 ,特别是小于号。只要细心,都不是问题。
&lt; 小于号  &gt; 大于号
                                    1.今天上午来的时候,在我们自己UAT环境遇到一个奇怪的错误,从dao层到mybatis里面遇到一个错误,Could not set parameters for mapping…等等,这很显然,是告诉我们sql语句里面的动态传值有误,但是我检查了好几次,没发现有错误呀,全部用的#占位符,毫无问题,但是 上到uat环境里面就报错,很是纳闷。
2.随后我仔细观察,发现我在sql语句里面注释了一条语句...