1対多
必須
アカウントテーブルの外部キーはユーザーテーブルの主キーを参照するため、アカウントテーブルはスレーブテーブルであり、ユーザーテーブルはマスターテーブルです。
1対多の関係マッピング:メインテーブルエンティティには、テーブルエンティティからの参照のコレクションが含まれている必要があります
前提:
- 2つのテーブル:ユーザーテーブルユーザー、アカウントテーブルアカウント
- ユーザーテーブルの主キーを参照するアカウントテーブルに外部キーがあります
- ユーザーテーブルのエンティティクラスとアカウントテーブルのエンティティクラスのtoStringを書き換える必要があります(そうしないと、クエリ時に表示されません)
成し遂げる
- UserDaoでメソッドを定義する
public interface UserDao{
//查询所有用户和
List<User> findAll();
}
- Userエンティティクラスのプロパティ
public User{
private Integer id;
private String name;
private String password;
//一对多的关系映射,主表实体中有从表是实体的集合引用
private List<Account> accounts;
//重写toString
//get set方法
}
- 事前に準備したSQL文
select
u.*,a.id as aid ,a.uid,a.money
from
user u
left join
account a
on
u.id = a.uid
- マッピング関係をマッピングファイルに書き込む
<!--定义User的resultMap 一对多查询-->
<!--id 随便起一个名字 type:类型仍然是一个User 配置了别名所以直接写类名-->
<resultMap id="UserAccountMap" type="User">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="password" column="password"></result>
<!--配置user对象中accounts集合的映射-->
<!--property:User对象的Account属性名-->
<!--ofType:集合中元素的类型(用了别名 不然要写权限定类名)-->
<!--一对多需要用 collection标签 -->
<collection property="accounts" ofType="Account">
<id property="id" column="aid"></id>
<result property="uid" column="uid"></result>
<result property="money" column="money"></result>
</collection>
</resultMap>
为什么是column是aid 因为查询的有两个id 一个用户id 一个 账户id 为了区分在起了个别名
同时 sql语句也要写上 a.id as aid
- テストクラスを書く
これは結果を問い合わせます。
次の記事の更新:mybatisマルチテーブルクエリ、多対多