Springboot结合Mybatis注解版进行一对一一对多联查

参考资料:https://blog.csdn.net/KingBoyWorld/article/details/78966789

参考自以上链接的这个大哥。写的很全,就不多赘述了,同学么可以跟着他的博客做一下。

不过有几个遗漏的地方,本人在此处加上一些补充

1、没有给出@mapper映射或者@MapperScan,

2、在mapper中,没有将属性映射写全,导致有些属性对应不上

public interface UserRepository {

    @Select("SELECT * FROM user WHERE id=#{id}")
    @Results({// results的作用其实是做一个映射的集合
            // 其中每一个result都是一个映射,
            // 当只有property和column的时候,property写出的是实体类中的属性名字,column给出的是表中的字段名
            // 当有many或者one的时候,many和one中写的是具体查找这些对象的方法的全类名+函数名,
            // column中给出的值,其实是传递给这个函数的参数
            @Result(property = "id",column = "id"),
            @Result(property = "addressId",column = "address_id"),
//            @Result(property = "",column = ""),
            @Result(property = "address",column = "address_id",
            one = @One(select = "com.shangguigu.sprigboot06datamybatis.mapper.AddressRepository.findAddressById")),
            @Result(property = "cars",column = "id",
            many = @Many(select = "com.shangguigu.sprigboot06datamybatis.mapper.CarRepository.findCarByUserId"))
    })
    User findUserWithAddress(Long id);
}
public interface CarRepository {

    @Select("SELECT * FROM car WHERE user_id=#{id}")
    @Results({
            @Result(property = "userId",column = "user_id")
    })
    List findCarByUserId(Long id);
}

3、本人一直不懂,我既然没有自己调用实体类中的get/set方法,所以我是不是可以不写这几个方法

所以我将这几个方法注释掉之后,进行了试验。

可以看出在代码中,确实可以将数据查出并映射到实体类上。

Springboot结合Mybatis注解版进行一对一一对多联查_第1张图片

但是数据在作为json串返回的过程中。无法执行

Springboot结合Mybatis注解版进行一对一一对多联查_第2张图片

4、在实现的过程中,遇到了这个warning,虽然waring对程序员来说没啥问题,但是还是好奇查了一下

Springboot结合Mybatis注解版进行一对一一对多联查_第3张图片

原因以及解决方法在https://blog.csdn.net/fanpeizhong/article/details/79737144中

你可能感兴趣的:(java,SpringBoot)