There is no getter for property named '_goods' i报错
接口类:
package com.imooc.mybatis.dao;
import com.imooc.mybatis.entity.Goods;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectKey;
import java.util.List;
public interface GoodsDAo {
//使用Select注释编写sql语句并将@Param映射的变量名称以#{变量名称}填写
@Select("select * from t_goods where current_price between #{min} and #{max} limit 0,#{limit}")
//定义需要传入的变量,并用@Param映射给一个名称,方法的返回类型,就是select语句的返回类型
public List<Goods> selectByPriceRange(@Param("min") float a, @Param("max") float z, @Param("limit") int limit);
@Insert("insert t_goods(title,sub_title,original_cost,current_price,discount,is_free_delivery,category_id) values(#{_goods.title},#{_goods.subTitle},#{_goods.originalCost},#{_goods.currentPrice},#{_goods.discount},#{_goods.isFreeDelivery},#{_goods.categoryId})")
// * SelectKey数据回显查询主键
//statement代表执行用来查询的语句
//before代表执行的顺序是在sql语句之前(true)还是之后(false)
//keyProperty="goodsId",代表那个属性是主键
//resultType=Integer.class,代表返回的主键类型,要写包装对象的类对象
@SelectKey(statement = "select last_insert_id()",before = false,keyProperty="goodsId",resultType=Integer.class)
public int insert(Goods goods);
}测试类:
@Test
public void testInsert() throws Exception {
SqlSession sqlSession=null;
try{
sqlSession=MyBatisUtils.openSession();
Goods goods1=new Goods();
goods1.setTitle("注释添加");
goods1.setSubTitle("副标题");
goods1.setOriginalCost(180f);
goods1.setCurrentPrice(160f);
goods1.setDiscount(0.5f);
goods1.setIsFreeDelivery(1);
goods1.setCategoryId(43);
// 执行后返回本次插入的记录数
GoodsDAo goodsDao=sqlSession.getMapper(GoodsDAo.class);
int num=goodsDao.insert(goods1);
System.out.println(num);
sqlSession.commit();
System.out.println(goods1.getGoodsId());
}catch (Exception e){
if(sqlSession!=null){
sqlSession.rollback();
}
throw e;
}finally {
MyBatisUtils.closeSession(sqlSession);
}
}19
收起
正在回答
6回答
同学你好,非常抱歉前面是老师没有表达清楚意思,导致理解有些小误差。
当参数只有一个请求是一个Java Bean的时候是可以不写@Param注解的。就像这里的insert方法,其参数Goods就是一个JavaBean。JavaBean可以看成一种类,对其属性和方法进行了封装。
此时Goods对象直接对属性进行解析,不用再加@Param进行别名的命名。

但是同学在解析属性时,加上了goods,相当于别名的内容,所以要加上@Param进行别名的命名

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程



恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星