一、一对一(举个例子 用户和身份证的关系)
实体类:
①用户
User.java
package com.sun.entity;
public class User {
private int uid;
private String uname;
private Card card;
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String uname) {
super();
this.uname = uname;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
}
User.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 2017-8-22 14:32:20 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="com.sun.entity.User" table="USER"> <id name="uid" type="int"> <column name="UID" /> <!--主键--> <generator class="native" /> </id> <property name="uname" type="java.lang.String"> <column name="UNAME" /> </property> <one-to-one name="card" class="com.sun.entity.Card" cascade="all-delete-orphan"></one-to-one>
</class></hibernate-mapping><!--一对一-->
②身份证
Card.java
Card.hbm.xmlpackage com.sun.entity; public class Card { private int uid; private String cnum; private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Card() { super(); } public Card(String cnum) { super(); this.cnum = cnum; } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getCnum() { return cnum; } public void setCnum(String cnum) { this.cnum = cnum; } }
<?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 2017-8-22 14:32:20 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="com.sun.entity.Card" table="CARD"> <id name="uid" type="int"> <column name="UID" /> <generator class="foreign"> <!--外键--> <param name="property">user</param> </generator> </id> <property name="cnum" type="java.lang.String"> <column name="CNUM" /> </property> <one-to-one name="user" class="com.sun.entity.User"></one-to-one>
</class><!--一对一-->
</hibernate-mapping> 测试:
package com.sun.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.sun.entity.Card; import com.sun.entity.User; public class TestOneToOne { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void before(){ Configuration configuration=new Configuration().configure(); sessionFactory = configuration.buildSessionFactory(); session = sessionFactory.openSession(); transaction = session.beginTransaction(); } @After public void after(){ transaction.commit(); session.close(); sessionFactory.close(); } //增加 public void testAdd(){ User user=new User("张三"); Card card=new Card("43110731"); //互设 user.setCard(card); card.setUser(user); session.save(user); session.save(card); } //根据id查询 public void testGet(){ User user=session.get(User.class, 1); System.out.println(user.getCard().getCnum()); } //删除 public void testDelete(){ //删除主表 // User user=session.get(User.class, 2); // session.delete(user); //删除从表 Card card=session.get(Card.class, 3); card.getUser().setCard(null); session.delete(card); } }
二、一对多(举个例子 省和市)
实体类:
①Province.java
package com.sun.entity; import java.util.HashSet; import java.util.Set; public class Province { private int pid; private String pname; private Set<City> cities=new HashSet<City>(); public Set<City> getCities() { return cities; } public void setCities(Set<City> cities) { this.cities = cities; } public Province() { super(); } public Province(String pname) { super(); this.pname = pname; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } }
Province.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 2017-8-22 15:14:11 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="com.sun.entity.Province" table="PROVINCE"> <id name="pid" type="int"> <column name="PID" /> <generator class="native" /> </id> <property name="pname" type="java.lang.String"> <column name="PNAME" /> </property> <set name="cities" table="city" cascade="save-update"> <!--cascde级联--> <key column="pid"></key> <one-to-many class="com.sun.entity.City"/> </set> </class> </hibernate-mapping>
②City.java
package com.sun.entity; public class City { private int cid; private String cname; private Province province; public Province getProvince() { return province; } public void setProvince(Province province) { this.province = province; } public City() { super(); // TODO Auto-generated constructor stub } public City(String cname) { super(); this.cname = cname; } public int getCid() { return cid; } public void setCid(int cid) { this.cid = cid; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } }
City.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 2017-8-22 15:14:11 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="com.sun.entity.City" table="CITY"> <id name="cid" type="int"> <column name="CID" /> <generator class="native" /> </id> <property name="cname" type="java.lang.String"> <column name="CNAME" /> </property> <!-- <property name="pid" type="int"> <column name="PID" /> </property> --> <many-to-one name="province" class="com.sun.entity.Province" column="pid"></many-to-one> </class> </hibernate-mapping>
测试:
package com.sun.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.sun.entity.Card; import com.sun.entity.City; import com.sun.entity.Province; import com.sun.entity.User; public class TestOneToMany { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void before(){ Configuration configuration=new Configuration().configure(); sessionFactory = configuration.buildSessionFactory(); session = sessionFactory.openSession(); transaction = session.beginTransaction(); } @After public void after(){ transaction.commit(); session.close(); sessionFactory.close(); }@Test public void testAdd(){ //增加(级联) Province province=new Province("湖南省"); City city1=new City("长沙市"); City city2=new City("娄底市"); City city3=new City("其他市"); province.getCities().add(city1); province.getCities().add(city2); province.getCities().add(city3); city1.setProvince(province); city2.setProvince(province); city3.setProvince(province); session.save(province); } }
三、多对多(举个例子 用户和角色)
实体类:
①Users.java
package com.sun.entity; import java.util.HashSet; import java.util.Set; public class Users { private int uid; private String uname; private Set<Roles> roles=new HashSet<Roles>(); public Set<Roles> getRoles() { return roles; } public void setRoles(Set<Roles> roles) { this.roles = roles; } public Users() { super(); // TODO Auto-generated constructor stub } public Users(String uname) { super(); this.uname = uname; } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } }
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 2017-8-22 15:41:45 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="com.sun.entity.Users" table="USERS"> <id name="uid" type="int"> <column name="UID" /> <generator class="native" /> </id> <property name="uname" type="java.lang.String"> <column name="UNAME" /> </property> <set name="roles" table="u_r" cascade="save-update"> <key column="uid"></key> <many-to-many class="com.sun.entity.Roles" column="rid"></many-to-many> </set> </class> </hibernate-mapping>
②Roles.java
package com.sun.entity; import java.util.HashSet; import java.util.Set; public class Roles { private int rid; private String rname; private Set<Users> users=new HashSet<Users>(); public Set<Users> getUsers() { return users; } public void setUsers(Set<Users> users) { this.users = users; } public Roles() { super(); } public Roles(String rname) { super(); this.rname = rname; } public int getRid() { return rid; } public void setRid(int rid) { this.rid = rid; } public String getRname() { return rname; } public void setRname(String rname) { this.rname = rname; } }
Roles.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 2017-8-22 15:41:45 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="com.sun.entity.Roles" table="ROLES"> <id name="rid" type="int"> <column name="RID" /> <generator class="native" /> </id> <property name="rname" type="java.lang.String"> <column name="RNAME" /> </property> <set name="users" table="u_r"> <key column="rid"></key> <many-to-many class="com.sun.entity.Users" column="uid"></many-to-many><!--多对多--> </set> </class> </hibernate-mapping>
测试:
package com.sun.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.sun.entity.Card; import com.sun.entity.City; import com.sun.entity.Province; import com.sun.entity.Roles; import com.sun.entity.User; import com.sun.entity.Users; public class TestManyToMany { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void before(){ Configuration configuration=new Configuration().configure(); sessionFactory = configuration.buildSessionFactory(); session = sessionFactory.openSession(); transaction = session.beginTransaction(); } @After public void after(){ transaction.commit(); session.close(); sessionFactory.close(); } @Test public void testAdd(){ Users users1=new Users("辉辉"); Users users2=new Users("静静"); Roles roles1=new Roles("老公"); Roles roles2=new Roles("老婆"); Roles roles3=new Roles("儿子"); Roles roles4=new Roles("孙子"); users1.getRoles().add(roles1); users1.getRoles().add(roles3); users1.getRoles().add(roles4); users2.getRoles().add(roles2); users2.getRoles().add(roles4); session.save(users1); session.save(users2); } }
公共的pop.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>hibernate02</groupId> <artifactId>hibernate02</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>hibernate02 Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <argLine>-Dfile.encoding=UTF-8</argLine> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0-b07</version> <scope>provided</scope> </dependency> <!-- 加入hibernate依赖 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.10.Final</version> </dependency> <!-- Mysql依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.43</version> </dependency> </dependencies> <build> <finalName>hibernate02</finalName> </build> </project>
公共的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">password</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> <property name="hibernate.connection.username">root</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <mapping resource="com/sun/entity/User.hbm.xml"/> <mapping resource="com/sun/entity/Card.hbm.xml"/> <mapping resource="com/sun/entity/Province.hbm.xml"/> <mapping resource="com/sun/entity/City.hbm.xml"/> <mapping resource="com/sun/entity/Users.hbm.xml"/> <mapping resource="com/sun/entity/Roles.hbm.xml"/> </session-factory> </hibernate-configuration>