【发布时间】:2019-08-06 10:32:11
【问题描述】:
我是初学者(对不起,我的解释不好,请随时纠正我)在 MyBatis Spring-Boot 中,我有问题要理解并使其工作@Many
我正在使用 3 层逻辑编程(表示层、服务层、数据层)
感谢您的帮助:)
我有 3 个表(屏幕截图中是 TB_Products 而不是 TB_Product):
我想获取数据表 TB_Users 和 TB_Products 以将其“放入”DTO
我创建4个java对象类SearchEntity、ProductEntity(用于数据层)
我创建了一个接口 SearchRepositoryMapper。
我还创建了一个 SearchService 接口和 SearchServiceImpl。
Java 对象类:
搜索实体
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 .....
}
产品实体
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
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
@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 请求时,我会收到以下错误消息:
{
"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);
但我不知道如何解决它。我写代码的方式不对
谢谢指正
【问题讨论】:
标签: spring-boot mybatis spring-mybatis