1. 程式人生 > 實用技巧 >mybatis通過註解實現一對多查詢

mybatis通過註解實現一對多查詢

1:AddressVo.java

package com.wzh.app.address;

public class AddressVo{
    private long id;
    private long personId;
    private String address;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public long getPersonId() {
        
return personId; } public void setPersonId(long personId) { this.personId = personId; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }

2:AddressMapper.java

package com.wzh.app.address;

import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface AddressMapper { @Select("<script>" + " select id,person_id as personId,address from t_address where person_id=#{personId}" + "</script>") List
<AddressVo> selectAddressByPersonId(long personId); }

3:PersonVo.java

package com.wzh.app.users;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.wzh.app.address.AddressVo;

import java.time.LocalDate;
import java.util.List;

@JsonIgnoreProperties(value = { "handler"})
public class PersonVo {
    private Long id;

    private String name;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthday;

    private char sex;

    private List<AddressVo> addressList;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public LocalDate getBirthday() {
        return birthday;
    }

    public void setBirthday(LocalDate birthday) {
        this.birthday = birthday;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public List<AddressVo> getAddressList() {
        return addressList;
    }

    public void setAddressList(List<AddressVo> addressList) {
        this.addressList = addressList;
    }
}

4:PersonMapper.java

package com.wzh.app.users;

import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType;

import java.util.List;
import java.util.Map;

@Mapper
public interface PersonMapper {

    @Select("<script>" +
            " select id,name,birthday,sex from t_person"+
            "</script>")
    @Results({
            @Result(id=true, property = "id", column="id"),
            @Result(property = "name", column = "name"),
            @Result(property = "birthday", column = "birthday"),
            @Result(property = "addressList", column = "id",//此處id表示將此欄位作為selectAddressByPersonId查詢的條件
                    many = @Many(select = "com.wzh.app.address.AddressMapper.selectAddressByPersonId",
                    fetchType = FetchType.LAZY)
            )
    })
    List<PersonVo> selectListPerson();

}

5:測試效果

{
    "msg": "獲取使用者列表資訊",
    "code": 0,
    "data": [
        {
            "id": 5,
            "name": "趙花",
            "birthday": "2002-12-20",
            "sex": "1",
            "addressList": [
                {
                    "id": 1,
                    "personId": 5,
                    "address": "地址1"
                },
                {
                    "id": 2,
                    "personId": 5,
                    "address": "地址2"
                }
            ]
        },
        {
            "id": 6,
            "name": "李四",
            "birthday": "2001-12-20",
            "sex": "1",
            "addressList": []
        },
        {
            "id": 7,
            "name": "王五",
            "birthday": "2009-01-20",
            "sex": "1",
            "addressList": []
        }
    ]
}