1. 程式人生 > >5、hibernate第六課

5、hibernate第六課

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();
		}
	}
}