您的位置:首页 > 其它

(8)集合映射:list(@OrderBy)、map(@MapKey、map遍历方法)

2017-11-13 16:08 555 查看
通常情况下在一对多中用set即可,但是也可以用list、map

一、list :在Javaee中他是有序表,所以有@OrderBy注解,这个注解的含义是一对多端输出时,可以按照多端某个字段排序输出,建表语句没有任何影响,只是从一端输出多端时,会排序输出,在默认情况下,是按照主键升序输出

Group类

@Entity
@Table(name="_Group")
public class Group {

private int id;
private String gname;
private List<User> users=new ArrayList<User>();//一般用set,用list可以利用@OrderBy对任意字段进行排序

@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

@OneToMany(mappedBy="group",cascade={CascadeType.ALL})
@OrderBy("name ASC")
/*
* 该注解是对有序列表进行映射,默认情况是对id排序。
*/

public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}


User类

@Entity
@Table(name="_User")//对表重命名
public class User {

private int id;
private String name;
private Group group;

@Id //必须加在getId上面
@GeneratedValue

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

@ManyToOne(cascade={CascadeType.ALL})
/*
*
*/
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
}


Test

假设存了 u1 u2

则从组端取出的组员姓名依次是u2 u1

@org.junit.Test

public void UserDefaultOrder() {
UserSave();

Session session=sf.getCurrentSession();
session.beginTransaction();
Group g=(Group) session.get(Group.class, 1);
for(int i=0;i<g.getUsers().size();i++){
System.out.println(g.getUsers().get(i).getName());
}

session.getTransaction().commit();
}


二、map:是键值对,所以要有唯一 的键 @MapKey

@Entity
@Table(name="_Group")
public class Group {

private int id;
private String name;
private Map<Integer,User> users=new HashMap<Integer,User>();

@Id
@GeneratedValue
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;
}

@OneToMany(mappedBy="group",cascade={CascadeType.ALL})
@MapKey(name="id")
public Map<Integer, User> getUsers() {
return users;
}
public void setUsers(Map<Integer, User> users) {
this.users = users;
}
}


//User表无变化

首先对高级for循环,来做解释 for(元素类型 元素名:数组(集合名))

g1.getUsers().entrySet() 将map集合中每个元素看成一个对象 , 返回此映射所包含的映射关系的 Set 视图。

public Set

@org.junit.Test

public void UserDefaultOrder() {

Session session2=sf.getCurrentSession();
session2.beginTransaction();

Group g1=(Group) session2.get(Group.class, 1);
for(Entry<Integer, User> entry:g1.getUsers().entrySet()){
System.out.println(entry.getValue().getName());
}
session2.getTransaction().commit();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: