Mybatis篇(四)注解方式关联查询[@One/@Many]
@One联查(一对一)
一个用户拥有一个所在公司信息。
User类
public class User { Integer id; String userName; String email; Company company; }
Company类
public class Company { Integer id; String companyName; }
CompanyDao
public interface CompanyDao { @Select("select * from company where id = #{id}") Company findCompanyById(Integer id); }
UserDao 联查User表与Company表
使用@Results配置结果集,使用@Result配置某一个数据库字段与实体类属性之间的关系。
@Result映射属性与字段之间的关系,property是类中的属性,column是数据库中的字段,one表示获取关联关系中【一】的一方。
public interface UserDao { @Select("select * from user") @Results( @Result(property = "company", column = "id", one = @One(select = "com.sample.dao.CompanyDao.findCompanyById"))) List<User> findUserWithCompany(); }
@Many联查(一对多)
一个公司Company有多个员工(用户User)。
UserDao类
@Select("select * from user where companyId = #{companyId}") List<User> findUserByCompanyId(Integer companyId);
CompanyDao类
@Select("SELECT * FROM company WHERE id=#{id}") @Results(value = { @Result(property = "id", column = "id"), @Result(property = "companyName", column = "companyName"), @Result(property = "users", column = "id", many = @Many(select = "com.sample.dao.UserDao.findUserByCompanyId"))}) Company findCompanyWithUserById_v2(Integer id);