Hibernate基本的一对多增删查改测试方法
框架
entity实体类
package com.fengjie.entity;
public class City {
private Integer cid;
private String cname;
private Province province;
public City() {}
public City(String cname) {
this.cname = cname;
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
@Override
public String toString() {
return "City [cid=" + cid + ", cname=" + cname + "]";
}
public Province getProvince() {
return province;
}
public void setProvince(Province province) {
this.province = province;
}
}
package com.fengjie.entity;
import java.util.HashSet;
import java.util.Set;
public class Province {
private Integer pid;
private String pname;
private Set<City> cities = new HashSet<City>();
public Province(String pname) {
this.pname = pname;
}
public Province() {}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public Set<City> getCities() {
return cities;
}
public void setCities(Set<City> cities) {
this.cities = cities;
}
@Override
public String toString() {
return "Province [pid=" + pid + ", pname=" + pname + "]";
}
}
entity实体映射
<?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 2019-7-9 17:09:20 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.fengjie.entity.City" table="CITY">
<id name="cid" type="java.lang.Integer">
<column name="CID" />
<generator class="increment" />
</id>
<property name="cname" type="java.lang.String">
<column name="CNAME" />
</property>
<many-to-one name="province" class="com.fengjie.entity.Province" column="pid">
</many-to-one>
</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 2019-7-9 17:09:20 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.fengjie.entity.Province" table="PROVINCE">
<id name="pid" type="java.lang.Integer">
<column name="PID" />
<generator class="increment" />
</id>
<property name="pname" type="java.lang.String">
<column name="PNAME" />
</property>
<set name="cities" cascade="all" inverse="true">
<key column="pid"></key>
<one-to-many class="com.fengjie.entity.City"/>
</set>
</class>
</hibernate-mapping>
Hhibernate.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">123456</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/a?characterEncoding=utf-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/fengjie/entity/Province.hbm.xml"/>
<mapping resource="com/fengjie/entity/City.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Test测试类
package com.fengjie.test;
import java.util.Set;
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.fengjie.entity.City;
import com.fengjie.entity.Province;
public class Test1 {
private Session session;
private Transaction transaction;
@Before
public void Before() {
Configuration configuration=new Configuration().configure();
SessionFactory factory=configuration.buildSessionFactory();
session = factory.openSession();
transaction = session.beginTransaction();
}
@Test
public void test() {
// //添加省份同时添加省份的城市
// Province p = new Province("湖南省");
// City c = new City("长沙市");
// City c1 = new City("怀化市");
// City c2 = new City("湘潭市");
// //互设
// //省份集合添加城市
// p.getCities().add(c);
// p.getCities().add(c1);
// p.getCities().add(c2);
// //给城市设置省份
// c.setProvince(p);
// c1.setProvince(p);
// c2.setProvince(p);
//
// //添加到数据库
//session.save(p);
// //查询一个省份同时查询这个省份对应的城市
// Province p = session.get(Province.class, 1);
// System.out.println(p.getPname());
// Set<City> cities = p.getCities();
// for (City c : cities) {
// System.out.println(c.getCid()+"\t"+c.getCname());
// }
//查询一个城市同时查询这个城市对应的省份
// City c = session.get(City.class, 1);
// System.out.println(c.getCname()+"\t"+c.getProvince().getPname()+"\t"+c.getProvince().getPid());
//删除一个省份同时删除省份对应的城市
// Province p = session.get(Province.class, 1);
// p.setCities(null);
// session.delete(p);
//删除一个城市 删除它的省份
// City c = session.get(City.class, 2);
// session.delete(c);
//给一个省份添加一个新的城市
// Province p = session.get(Province.class, 3);
// City c = new City("哈哈");
// p.getCities().add(c);
// c.setProvince(p);
// session.save(c);
//给一个城市重新设置省份
Province p = session.get(Province.class, 2);
City c = session.get(City.class, 3);
p.getCities().add(c);
c.setProvince(p);
}
@After
public void after() {
transaction.commit();
session.close();
}
}