springboot整合mybatis无法绑定entities的解决方法

出现这个问题的原因有好几个,所以我们逐步的来解释并解决问题;

1、首先,要明确一点的是,Dao层的抽象方法中的参数一般情况下默认的是一个参数或者一个对象;

例如:

public interface StudentDao {
    
    

int selectById(int id);

int insert(Student stu);

}

这两种是正常的方式,不会出现什么问题,mappper中的对应取值都是用#{}这种方式;

例如:

<insert id="insert" parameterType="com.yoho.crm.dal.model.student"><!--注意参数的类型要与对象类对应,也就是这个类的路径-->

insert into inbox_template (name,age)

values (#{name},#{age})

</insert>

上面如果是student对象作为参数,那么mapper中不能少了parameterType,否则会找不对应的属性

2、当传多个参数时,就容易出现问题了,问题重现,如果像下面那样写就会出现标题中的错误,找不到参数;

public interface StudentDao {
    
    

int selectBySelective(int id,String name);

}

解决办法就是在每个参数前加上@param注解,括号中注解的名称就是mapper中映射的值,如下:

import org.apache.ibatis.annotations.Param;

public interface StudentDao {
    
    

int selectBySelective(@Param("id")int id,@Param("name")String name);

}

mapper中还是那样写,可以使用${}或者#{}任意一种方式:

<select id="selectBySelective" resultMap="BaseResultMap">
    select * from student


where name = #{id} and id = #{name}</select>

3、既有参数又有对象时,对象也需要注解,一般参数的直接取,对象的需要对象.属性,如下:

mapper:

<select id="selectBySelective" resultMap="BaseResultMap">select * from student
where name = #{stu.name} and id = #{stu.id} limit 0 ,#{page}</select>

4、像这种有公共的属性,例如分页都要传开始的index和pagesize,然后还要在传对象,就是3中的案例,可以为了方便管理,自己再新建一个类,里面封装了page的属性,同时又有对象,如下:

建一个page类:

public class Page {
    
    

	private int pageNo;
	
	private int pageSize;
	
	private Object obj;
	
	public Page(int page,int pageSize,Object obj){
    
    
		this.pageNo=page;
		this.pageSize=pageSize;
		this.obj=obj;
	}
	
	public int getPageNo() {
    
    
		return pageNo;
	}
	
	public void setPageNo(int pageNo) {
    
    
		this.pageNo = pageNo;
	}


	public int getPageSize() {
    
    
		return pageSize;
	}
	
	public void setPageSize(int pageSize) {
    
    
		this.pageSize = pageSize;
	}
	
	public Object getObj() {
    
    
		return obj;
	}
	
	public void setObj(Object obj) {
    
    
		this.obj = obj;
	}

}

在处理时直接new page对象中自己定义好的构造函数,然后直接把page作为参数传到dao:

Student stu = new Student();
		stu.setName("aa");
		stu.setId(1);
		stu.setAge(12);
		Page page = new Page(1, 10,stu);
dao:



public interface StudentDao {
    
    

	int update(Page page);

}

mapper:

<update id="update" parameterType="com.yoho.crm.dal.model.student"><!--此时obj则是对应page中的属性了-->

update inbox_template

set 

name = #{obj.name},

age = #{obj.age}

where id = #{obj.id}

</update>

猜你喜欢

转载自blog.csdn.net/GBS20200720/article/details/121169100