5、hibernate第六課
阿新 • • 發佈:2018-12-09
Hibernate多對多對映關係
1.先建立 3個實體類
package com.zking.entity; import java.util.HashSet; import java.util.Set; public class Menus { private String mid; private String mname; private Set<Roles> sr = new HashSet<Roles>(); public Set<Roles> getSr() { return sr; } public void setSr(Set<Roles> sr) { this.sr = sr; } public Menus() { super(); // TODO Auto-generated constructor stub } public Menus(String mid, String mname, Set<Roles> sr) { super(); this.mid = mid; this.mname = mname; this.sr = sr; } public String getMid() { return mid; } public void setMid(String mid) { this.mid = mid; } public String getMname() { return mname; } public void setMname(String mname) { this.mname = mname; } }
package com.zking.entity; import java.util.HashSet; import java.util.Set; public class Roles { private String rid; private String rname; private Set<Users> su = new HashSet<Users>(); private Set<Menus> sm = new HashSet<Menus>(); public Set<Menus> getSm() { return sm; } public void setSm(Set<Menus> sm) { this.sm = sm; } public Set<Users> getSu() { return su; } public Roles(String rid, String rname, Set<Users> su, Set<Menus> sm) { super(); this.rid = rid; this.rname = rname; this.su = su; this.sm = sm; } public Roles() { super(); // TODO Auto-generated constructor stub } public void setSu(Set<Users> su) { this.su = su; } public String getRid() { return rid; } public void setRid(String rid) { this.rid = rid; } public String getRname() { return rname; } public void setRname(String rname) { this.rname = rname; } }
package com.zking.entity; import java.util.HashSet; import java.util.Set; public class Users { private String uid; private String uname; private Set<Roles>sr=new HashSet<Roles>(); public Set<Roles> getSr() { return sr; } public void setSr(Set<Roles> sr) { this.sr = sr; } public Users() { super(); // TODO Auto-generated constructor stub } public Users(String uid, String uname, Set<Roles> sr) { super(); this.uid = uid; this.uname = uname; this.sr = sr; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } }
2.hibernate.cfg.xml檔案配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">sasa</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/books?characterEncoding=utf-8</property>
<property name="hibernate.connection.username">root</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/zking/entity/Menus.hbm.xml" />
<mapping resource="com/zking/entity/Roles.hbm.xml" />
<mapping resource="com/zking/entity/Users.hbm.xml" />
</session-factory>
</hibernate-configuration>
3.配置Menus.hbm.xml和Roles.hbm.xml和Users.hbm.xml對映檔案
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-9-11 18:49:11 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.Menus" table="MENUS">
<id name="mid" type="java.lang.String">
<column name="MID" />
<generator class="guid" />
</id>
<property name="mname" type="java.lang.String">
<column name="MNAME" />
</property>
<set name="sr" table="rolemenus" cascade="sava-update" inverse="false">
<key>
<column name="mid" />
</key>
<many-to-many class="com.zking.entity.Roles" column="rid" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-9-11 18:49:11 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.Roles" table="ROLES">
<id name="rid" type="java.lang.String">
<column name="RID" />
<generator class="guid" />
</id>
<property name="rname" type="java.lang.String">
<column name="RNAME" />
</property>
<set name="su" table="userroles">
<key>
<column name="rid" />
</key>
<many-to-many class="com.zking.entity.Users" column="uid" />
</set>
<set name="sm" table="rolemenus" cascade="sava-update" inverse="true">
<key>
<column name="rid" />
</key>
<many-to-many class="com.zking.entity.Menus" column="mid" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-9-11 18:49:11 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.Users" table="USERS">
<id name="uid" type="java.lang.String">
<column name="UID" />
<generator class="guid" />
</id>
<property name="uname" type="java.lang.String">
<column name="UNAME" />
</property>
<set name="sr" cascade="sava-update" table="ROLES" inverse="true">
<key>
<column name="uid" />
</key>
<many-to-many class="com.zking.entity.Roles" column="rid"/>
</set>
</class>
</hibernate-mapping>
4 . 測試類
package com.zking.test;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.zking.entity.Menus;
import com.zking.entity.Roles;
import com.zking.entity.Users;
public class MeU {
@Test
public void add() {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
// 建立users
Users u1 = new Users();
u1.setUname("admin");
// 建立角色
Roles r1 = new Roles();
r1.setRname("Admin");
// 建立選單
Menus m1 = new Menus();
m1.setMname("sda");
// 互相設定
u1.getSr().add(r1);
r1.getSu().add(u1);
r1.getSm().add(m1);
m1.getSr().add(r1);
// 儲存
session.save(u1);
session.save(r1);
session.save(m1);
// 提交
session.beginTransaction().commit();
// 關閉
session.close();
sessionFactory.close();
}
@Test
public void query() {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Users u1 = session.get(Users.class, "cb637e3b-b5bc-11e8-9945-54e1ad416ca2");
String str=JSON.toJSONString(u1);
System.out.println(str);
session.close();
sessionFactory.close();
}
@Test
public void delete() {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Users u1 = session.get(Users.class, "cb637e3b-b5bc-11e8-9945-54e1ad416ca2");
Set<Roles> sr = u1.getSr();
for (Roles roles : sr) {
if (roles.getRname().equals("Admin")) {
roles.getSu().remove(u1);
}
session.update(u1);
session.beginTransaction().commit();
session.close();
sessionFactory.close();
}
}
}