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 星