我有两个表:人和狗。您知道这个人可能拥有不止一只狗。
我的模型是:
public class {
int personId;
List <Dog> dogs;
String name;
String surname;
}
public class Dog{
String name;
int dogId;
}
Run Code Online (Sandbox Code Playgroud)
当谈到数据库时,它非常相似:
PersonID(PK), Name (String), surname(String)
dogId(PK), name(String), IdOwner(FK)
Run Code Online (Sandbox Code Playgroud)
你能帮我在mybatis中写select吗?我尝试阅读有关@one和 的内容@many。
如果您正在使用,则参考文档MyBatis中描述了两个选项:
\n\n\n\n
\n- 嵌套选择:通过执行另一个返回所需复杂类型的映射 SQL 语句。
\n- 嵌套结果:通过使用嵌套结果映射来处理连接结果的重复子集。
\n
在您的情况下,当您想要加载多个关联时,您必须使用Nested Select,因为您无法使用fetch outer join(仅与获取的一行关联)
在此选项中,您应该需要添加对 select 的引用,该引用通过外键关系(在您的情况下是 person 的外键)加载 daya,在您的情况下该关系是dogs“ResultMap”中。
所以你应该有一个加载的查询Person表的查询:
<select id="findById" resultMap="personResult">\n SELECT * FROM PERSON WHERE NAME = #{name}\n</select>\nRun Code Online (Sandbox Code Playgroud)\n\n其方法:
\n\nPerson findById(String name); \nRun Code Online (Sandbox Code Playgroud)\n\n然后是一个按人键关系加载狗的查询:
\n\n<select id="findDogsByPerson" resultType="Dog">\n SELECT * FROM DOG WHERE ID_PERSON = #{namePerson}\n</select>\nRun Code Online (Sandbox Code Playgroud)\n\n及其方法:
\n\nList<Dog> findDogsByPerson(String namePerson);\nRun Code Online (Sandbox Code Playgroud)\n\n然后,您必须将选择添加为结果映射中的关联,引用通过外键 ( findDogsByPerson) 进行的选择。在您的情况下,有很多关联,因此您应该使用collection标签而不是association。
<resultMap id="personResult" type="Person">\n <!--Other properties maps -->\n <!-- ..... -->\n <collection property="dogs" column="id_person" javaType="Dog" select="selectDogByPerson"/>\n <!-- ..... -->\n</resultMap>\nRun Code Online (Sandbox Code Playgroud)\n\n如果你愿意,你可以用annotations它来做。它几乎是相同的,但是 和ResultMap高于Select方法。@Many它将使用引用许多关系的注释。
@Select("SELECT * FROM PERSON WHERE NAME = #{name}")\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Results(value = {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Result(property="name", column="name"),\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Result(property="surname", column="surname"),\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Result(property="dogs", javaType=List.class, column="name",\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0many=@Many(select="findDogsByPerson"))})\nPerson findById(String name); \n\n@Select("SELECT * FROM DOG WHERE ID_PERSON = #{namePerson}")\n@Results(value = {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Result(property="name", column="name"),\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Result(property="dogId", column="dogId")})\nList<Dog> findDogsByPerson(String namePerson);\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
6303 次 |
| 最近记录: |