Hibernate基本的一对多增删查改测试方法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值