1. 程式人生 > >LitePal一對一、多對一、多對多

LitePal一對一、多對一、多對多

一對一

一個boy對應一個girl,相應地一個girl對應一個boy

Boy類:

    public class Boy extends DataSupport {
        private int id;
        private Girl girl;
        private String name;
        private int age;

    public int getId() {
        return id;
    }

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

    public Girl getGirl() {
        return girl;
    }

    public void setGirl(Girl girl) {
        this.girl = girl;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Boy{" +
                "id=" + id +
                ", girl=" + girl +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

Girl類

public class Girl extends DataSupport {
private int id;
private Boy boy;
private int age;
private String name;

public Boy getBoy() {
    return boy;
}

public void setBoy(Boy boy) {
    this.boy = boy;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public String getName() {
    return name;
}

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

public int getId() {
    return id;
}

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

@Override
public String toString() {
    return "Girl{" +
            "id=" + id +
            ", boy=" + boy +
            ", age=" + age +
            ", name='" + name + '\'' +
            '}';
}
}

測試程式碼:

  Girl girl = new Girl();
    girl.setName("lucy");
    girl.setAge(17);
    girl.save();

    Boy boy = new Boy();
    boy.setAge(17);
    boy.setName("jack");
    boy.setGirl(girl);
    boy.save();

    Boy b = DataSupport.findLast(Boy.class, true);
    Log.e("tag", b.toString());

    Girl g = DataSupport.findLast(Girl.class, true);
    Log.e("tag", g.toString());

    int id = g.getId();
    g.setBoy(b);
    g.update(id);

測試結果:

    E/tag: Boy{id=2, girl=Girl{id=2, boy=null, age=17, name='lucy'}, name='jack', age=17}
    E/tag: Girl{id=2, boy=Boy{id=2, girl=null, name='jack', age=17}, age=17, name='lucy'}
    可以看到,一個Boy對應一個Girl,一個Girl也對應一個Boy

多對一

一張專輯有多首歌,一首歌對應一張專輯

Song:

public class Song extends DataSupport {

private int id;
private Album album;
private String name;
private int duration;

public Album getAlbum() {
    return album;
}

public void setAlbum(Album album) {
    this.album = album;
}

public int getId() {
    return id;
}

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

@Override
public String toString() {
    return "Song{" +
            "id=" + id +
            ", album=" + album +
            ", name='" + name + '\'' +
            ", duration=" + duration +
            '}';
}

public String getName() {
    return name;
}

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

public int getDuration() {
    return duration;
}

public void setDuration(int duration) {
    this.duration = duration;
}
}

Album:

public class Album extends DataSupport {
private int id;

public int getId() {
    return id;
}

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

private String name;
private int age;
private List<Song> song = new ArrayList<>();

public String getName() {
    return name;
}

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

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public List<Song> getSong() {
    return song;
}

public void setSong(List<Song> song) {
    this.song = song;
}

@Override
public String toString() {
    return "Album{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", age=" + age +
            ", song=" + song.toString() +
            '}';
}
}

測試程式碼:

    Song song1 = new Song();
    song1.setName("因為愛情");
    song1.setDuration(240);


    Song song2 = new Song();
    song2.setName("愛情轉移");
    song2.setDuration(340);


    song1.save();
    song2.save();

    Album album = new Album();
    album.getSong().add(song1);
    album.getSong().add(song2);
    album.setName("陳奕迅");
    album.setAge(10);
    album.save();

    Album album1 = DataSupport.findLast(Album.class, true);

    Song song3 = DataSupport.findLast(Song.class, true);
    Log.e("tag", song3.toString());
    Log.e("tag", album1.toString());

測試結果:

E/tag: Song{id=2, album=Album{id=1, name='陳奕迅', age=10, song=[]}, name='愛情轉移', duration=340}
E/tag: Album{id=1, name='陳奕迅', age=10, song=[Song{id=1, album=null, name='因為愛情', duration=240}, Song{id=2, album=null, name='愛情轉移', duration=340}]}
可以看到Song對應一個Album,一個Album對應多個Song

多對多

一個老師對應多個學生,一個學生對應多個老師

Teacher類

public class Teacher extends DataSupport {
private int id;
private String name ;
private int age;
private List<Student> student = new ArrayList<>();

public int getId() {
    return id;
}

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

public String getName() {
    return name;
}

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

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public List<Student> getStudent() {
    return student;
}

public void setStudent(List<Student> student) {
    this.student = student;
}

@Override
public String toString() {
    return "Teacher{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", age=" + age +
            ", student=" + student +
            '}';
}
}

Student類

public class Student extends DataSupport {
private int id;
private String name;
private int age;
private List<Teacher> teacherList =  new ArrayList<>();

public int getId() {
    return id;
}

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

public String getName() {
    return name;
}

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

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public List<Teacher> getTeacherList() {
    return teacherList;
}

public void setTeacherList(List<Teacher> teacherList) {
    this.teacherList = teacherList;
}

@Override
public String toString() {
    return "Student{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", age=" + age +
            ", teacherList=" + teacherList +
            '}';
}
}

測試程式碼:

 Student s1 = new Student();
    s1.setName("小名");
    s1.setAge(12);
    s1.save();

    Student s2 = new Student();
    s2.setName("小紅");
    s2.setAge(13);
    s2.save();

    Teacher t1 = new Teacher();
    t1.setAge(45);
    t1.setName("張老師");
    t1.getStudent().add(s1);
    t1.getStudent().add(s2);
    t1.save();

    Teacher t2 = new Teacher();
    t2.setAge(46);
    t2.setName("劉老師");
    t2.getStudent().add(s1);
    t2.getStudent().add(s2);
    t2.save();

    Student s = DataSupport.findLast(Student.class, true);
    Log.e("tag", s.toString());

    Teacher t = DataSupport.findLast(Teacher.class, true);
    Log.e("tag", t.toString());

測試結果:

E/tag: Student{id=2, name='小紅', age=13, teacherList=[Teacher{id=1, name='張老師', age=45, student=[]}, Teacher{id=2, name='劉老師', age=46, student=[]}]}
E/tag: Teacher{id=2, name='劉老師', age=46, student=[Student{id=1, name='小名', age=12, teacherList=[]}, Student{id=2, name='小紅', age=13, teacherList=[]}]}
可以看到,學生小紅對應多個老師,劉老師對應多個學生

需要注意的地方,建立了一對一、多對一、多對多的關係之後,查詢時必須使用激進查詢或者懶查詢。