首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyBatis @多/ Spring-Boot

MyBatis @多/ Spring-Boot
EN

Stack Overflow用户
提问于 2019-08-06 10:32:11
回答 1查看 446关注 0票数 0

我是初学者(很抱歉我的错误解释,请随时纠正我)在MyBatis Spring-Boot,我有问题要理解并使它工作@许多

我使用3层逻辑编程(表示层、服务层、数据层)

(谢谢你的帮助:)

我有3个表(它是TB_Products,而不是屏幕截图中的TB_Product ):

我想让数据表TB_Users和TB_Products把它放在DTO中。

  • 我创建了4个java对象类SearchEntity,ProductEntity (用于数据层)
  • 我创建了一个接口SearchRepositoryMapper。
  • 我还创建了一个SearchService接口和SearchServiceImpl。

Java对象类:

SearchEntity

代码语言:javascript
复制
public class SearchEntity implements Serializable{

    private static final long serialVersionUID = -9143930742617602050L;

    private String id;
    private String firstName;
    private String lastName;
    private List<ProductEntity> products;


                       // Getters and Setters code .....

}

ProductEntity

代码语言:javascript
复制
public class ProductEntity implements Serializable{

    private static final long serialVersionUID = -6525703679290992635L;

    private String id;
    private String productId;
    private String product;
    private String number;
    private String date;
    private String description;


                       // Getters and Setters code .....
}

SearchRepositoryMapper

代码语言:javascript
复制
public interface SearchRepositoryMapper {

    // Get some fields from TB_Users and all fields from TB_Products 
    @Select("SELECT * FROM TB_Users WHERE id = #{id}")
    @Results({
            @Result(property = "id", column ="id"),
            @Result(property = "firstName", column = "firstName"),
            @Result(property = "lastName", column= "lastName"),
            @Result(property = "products", javaType = List.class, column="id",
                    many = @Many(select = "getProductIdByUserId"))})
    public SearchEntity findAllInfoByUserId(@Param("id") int id);


    @Select("SELECT *, productId FROM TB_Products WHERE productId = #{id}")
    public ArrayList<ProductEntity> getProductIdByUserId(@Param("id") int id);



    // Find id by uderId and return null if it doesn't exist
    @Select("SELECT id FROM TB_Users WHERE userId = #{userId}")
    int findIdByUserId(@Param("userId") String userId);
}

SearchServiceImpl

代码语言:javascript
复制
@Service
public class SearchServiceImpl implements SearchService {

    @Autowired
    SearchRepositoryMapper searchRepository;

    @Override
    public SearchDto getAllInfoByUserId(String id) {

        SearchDto returnValue = new SearchDto();                                // Init returnValue as SearchDto
        int searchId = searchRepository.findIdByUserId(id);                             // Init searchId with the TB_Users id


        SearchEntity searchEntity = searchRepository.findAllInfoByUserId(searchId);

        BeanUtils.copyProperties(searchEntity, returnValue);

        return returnValue;
    }

}

因此,当我执行代码并执行GET请求时,会得到以下错误消息:

代码语言:javascript
复制
{
    "message": "nested exception is org.apache.ibatis.executor.ExecutorException: Statement returned more than one row, where no more than one was expected."
}

我从地图和SearchEntity searchEntity = searchRepository.findAllInfoByUserId(searchId);那里发现的

但我不知道怎么解决。我写代码的方式是错误的

谢谢你纠正我

EN

回答 1

Stack Overflow用户

发布于 2019-08-06 16:45:19

异常清楚地表明查询返回多个结果。请验证表中的数据是否正确。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57374071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档