mybatis 多对多 在collection中使用select查询报错。。求解

website类

public class Website {
    private Integer id;
    private String name;
    private String websiteAddress;
    private List<Category> categoryList;
    private List<Score> scoreList;

    public Website() {
        super();
    }

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }
    public String getWebsiteAddress() {
        return websiteAddress;
    }
    public void setWebsiteAddress(String websiteAddress) {
        this.websiteAddress = websiteAddress == null ? null : websiteAddress.trim();
    }
    public List<Category> getCategoryList() {
        return categoryList;
    }
    public void setCategoryList(List<Category> categoryList) {
        this.categoryList = categoryList;
    }
    public List<Score> getScoreList() {
        return scoreList;
    }
    public void setScoreList(List<Score> scoreList) {
        this.scoreList = scoreList;
    }
}

category类

public class Category {
    private Integer id;
    private String name;
    private Integer parentCategoryId;
    private List<User> userList;
    private List<Website> websiteList;
    
    public Integer getId() {
        return id;
    }
    public Category() {
        super();
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }
    public Integer getParentCategoryId() {
        return parentCategoryId;
    }
    public void setParentCategoryId(Integer parentCategoryId) {
        this.parentCategoryId = parentCategoryId;
    }
    public List<User> getUserList() {
        return userList;
    }
    public void setUserList(List<User> userList) {
        this.userList = userList;
    }
    public List<Website> getWebsiteList() {
        return websiteList;
    }
    public void setWebsiteList(List<Website> websiteList) {
        this.websiteList = websiteList;
    }
}

中间类

public class WebsiteToCategory {
    private Integer websiteId;
    private Integer categoryId;

    public WebsiteToCategory() {
        super();
    }
    
    public Integer getWebsiteId() {
        return websiteId;
    }
    public void setWebsiteId(Integer websiteId) {
        this.websiteId = websiteId;
    }
    public Integer getCategoryId() {
        return categoryId;
    }
    public void setCategoryId(Integer categoryId) {
        this.categoryId = categoryId;
    }
}

websitemapper:

 <resultMap id="BaseResultMap" type="com.wechat.bean.score.Website">
      <id column="id" jdbcType="INTEGER" property="id"/>
      <result column="name" jdbcType="VARCHAR" property="name"/>
      <result column="website_address" jdbcType="VARCHAR" property="websiteAddress"/>
      <collection property="categoryList" column="{website_id=id}"
                  select="com.wechat.dao.WebsiteToCategoryMapper.selectCategoryByWebsiteId"/>
  </resultMap>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
  select *
  from website
  where id = #{id,jdbcType=INTEGER}
</select>

categorymapper:

<resultMap id="BaseResultMap" type="com.wechat.bean.score.Category">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="parent_category_id" jdbcType="INTEGER" property="parentCategoryId" />
    <collection property="websiteList" ofType="com.wechat.bean.score.Website" column="category_id" select="com.wechat.dao.WebsiteToCategoryMapper.selectWebsiteByCategoryId" />
  </resultMap>

  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select *
    from category
    where id = #{id,jdbcType=INTEGER}
  </select>
</mapper>

中间类mapper:

<!--根据网站id查分类-->
<resultMap id="BaseResultMap1" type="com.wechat.bean.score.Category">
  <id column="id" jdbcType="INTEGER" property="id" />
  <result column="name" jdbcType="VARCHAR" property="name" />
  <result column="parent_category_id" jdbcType="INTEGER" property="parentCategoryId" />
</resultMap>
<select id="selectCategoryByWebsiteId" parameterType="Integer" resultMap="BaseResultMap1">
  SELECT c.* FROM category c,website_to_category wc WHERE c.id=wc.category_id and wc.website_id=#{website_id}
</select>

<!--根据分类id查网站-->
<resultMap id="BaseResultMap2" type="com.wechat.bean.score.Website">
  <id column="id" jdbcType="INTEGER" property="id"/>
  <result column="name" jdbcType="VARCHAR" property="name" />
  <result column="website_address" jdbcType="VARCHAR" property="websiteAddress" />
</resultMap>
<select id="selectWebsiteByCategoryId" parameterType="Integer" resultMap="BaseResultMap2">
  SELECT w.* FROM website w,website_to_category wc WHERE w.id=wc.website_id and wc.category_id=#{category_id}
</select>


直接执行中间类的两个方法是都可以查询出来的,但放在collection中子查询就不行


开始我在websitemapper中的resultmap中的collenction的column写的市sebsite_id,查询出来的对象list是空的

又改成column="{website_id=id}"想让他强制执行,结果就一直报错

Error instantiating class java.lang.Integer with invalid types () or values (). Cause: java.lang.NoSuchMethodException: java.lang.Integer.<init>()


慕粉4241372
浏览 7044回答 3
3回答

精慕门9254224

parameterType 要写成java.lang.Integer
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java