• Hibernate -- 映射组成关系


    示例代码:

    Address.java

    package cn.itcast.compopent;
    
    /**
     * 组件
     */
    public class Address {
    	
    	private String street;
    	private String city;
    	private String province;
    	private String zipcode;
    	
    	//表示Address所属的整体类
    	private Customer customer;
    	
    	public Customer getCustomer() {
    		return customer;
    	}
    
    	public void setCustomer(Customer customer) {
    		this.customer = customer;
    	}
    
    	public Address() {
    	}	
    	
    	public Address(String street, String city, String province, String zipcode) {
    		this.street = street;
    		this.city = city;
    		this.province = province;
    		this.zipcode = zipcode;
    	}
    	
    	public String getStreet() {
    		return street;
    	}
    	public void setStreet(String street) {
    		this.street = street;
    	}
    	public String getCity() {
    		return city;
    	}
    	public void setCity(String city) {
    		this.city = city;
    	}
    	public String getProvince() {
    		return province;
    	}
    	public void setProvince(String province) {
    		this.province = province;
    	}
    	public String getZipcode() {
    		return zipcode;
    	}
    	public void setZipcode(String zipcode) {
    		this.zipcode = zipcode;
    	}
    }
    


    Customer.java

    package cn.itcast.compopent;
    
    /**
     * 一的一端
     */
    @SuppressWarnings("serial")
    public class Customer implements java.io.Serializable {
    
    	private Integer id;
    	private String name;
    	private Address homeAddress;
    	private Address comAddress;
    
    	public Address getHomeAddress() {
    		return homeAddress;
    	}
    
    	public void setHomeAddress(Address homeAddress) {
    		this.homeAddress = homeAddress;
    	}
    
    	public Address getComAddress() {
    		return comAddress;
    	}
    
    	public void setComAddress(Address comAddress) {
    		this.comAddress = comAddress;
    	}
    
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    }
    


    Customer.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     <hibernate-mapping>
       <class name="cn.itcast.compopent.Customer" table="customers02">
          <id name="id" type="integer">
            <column name="id"/>
            <generator class="increment"/>
          </id>
          <property name="name" type="string">
              <column name="name"/>
          </property>
          
          <!-- 配置组件映射
               component标签:表示 Address类是Customer类的组成部分,在hibernate中称之为组件
           -->
          <component name="homeAddress" class="cn.itcast.compopent.Address">
             <!-- 该配置表示Address是Customer类的一部分 -->
             <parent name="customer"/>
             <property name="street" type="string">
               <column name="home_street"></column>
             </property>
             
             <property name="city" type="string">
               <column name="home_city"></column>
             </property>
             
             <property name="province" type="string">
               <column name="home_province"></column>
             </property>
             
             <property name="zipcode" type="string">
               <column name="home_zipcode"></column>
             </property>
          </component>
          
           <component name="comAddress" class="cn.itcast.compopent.Address">
              <parent name="customer"/>
             <property name="street" type="string">
               <column name="com_street"></column>
             </property>
             
             <property name="city" type="string">
               <column name="com_city"></column>
             </property>
             
             <property name="province" type="string">
               <column name="com_province"></column>
             </property>
             
             <property name="zipcode" type="string">
               <column name="com_zipcode"></column>
             </property>
          </component>
       </class>
     </hibernate-mapping>


    hibernate.cfg.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
       <session-factory>
          <property name="hibernate.connection.username">root</property>
          <property name="hibernate.connection.password">root</property>
          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
          <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
          
          <!-- 配置数据库的方言,让hibernate知道连接的是哪个数据库-->
          <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
       
          <!-- 配置利用javaBean和映射文件生成数据库中的表
               hibernate.hbm2ddl.auto值
                  * create:执行时,先查找该表是否存在,如存在先删除表,在创建表
                  * none:不能创建表,只能往表中插入数据,如表不存在抛出异常,默认值
                  * update:执行时,
                              情况一:
                                    先查找该表是否存在,如果表存在,直接插入,如果表不存在,先创建表,再插入数据.
                              情况二:
                                    先查找该表是否存在,如果表存在,但表的结构不一样,要修改表的结构
           -->
          <property name="hibernate.hbm2ddl.auto">update</property>
          
          <!-- 显示hibernate生成的sql语句 -->
          <property name="hibernate.show_sql">true</property>
       
          <!-- 显示格式化得sql语句 -->
          <property name="hibernate.format_sql">true</property>
          
       </session-factory>
    </hibernate-configuration>			


    App.java

    package cn.itcast.compopent;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    public class App {
    	private static  SessionFactory sf=null;
    	
    	static{
    		   Configuration config=new Configuration();
    	       config.configure("cn/itcast/compopent/hibernate.cfg.xml");
    	       config.addClass(Customer.class);
    	       sf=config.buildSessionFactory();
    	}
    	
        /*
         * 知识点1:测试插入
         */
    	@Test
    	public  void saveCustomer(){
    		   Session session=sf.openSession();
    		   Transaction tx=session.beginTransaction();
    		   
    		   Customer c=new Customer();
    		   c.setName("高秀敏");
    		   
    		   Address homeAddress=new Address("上地三街","北京","北京","100000");
    		   Address comAddress=new Address("深圳街","长春","吉林省","100006");
    		   
    		   c.setHomeAddress(homeAddress);
    		   c.setComAddress(comAddress);
    		   
    		   session.save(c);
    		   
    		   tx.commit();
    		   session.close();
    	}
    	
    	//知识点2:测试查询
    	@Test
    	public  void getCustomer(){
    		   Session session=sf.openSession();
    		   Transaction tx=session.beginTransaction();
    		   
    		   Customer c=(Customer)session.get(Customer.class, 2);
    		   System.out.println(c.getId()+"   "+c.getName());
    		   if(c.getHomeAddress()!=null){
    			   System.out.println(c.getHomeAddress().getCity()+"  "+c.getHomeAddress().getProvince());
    		   }
    		   
    		   if(c.getComAddress()!=null){
    			   System.out.println(c.getComAddress().getCity()+"  "+c.getComAddress().getProvince());
    		   }
    		   tx.commit();
    		   session.close();
    	}
    	
    	//知识点3:测试更新
    	@Test
    	public  void updateCustomer(){
    		   Session session=sf.openSession();
    		   Transaction tx=session.beginTransaction();
    		   
    		   Customer c=(Customer)session.get(Customer.class, 2);
               c.setName("楚留香");
               
    		   tx.commit();
    		   session.close();
    	}
    	
    	
    	
    	//知识点4:测试特殊的更新
    	@Test
    	public  void updateOtherCustomer(){
    		   Session session=sf.openSession();
    		   Transaction tx=session.beginTransaction();
    		   
    		   Customer c=(Customer)session.get(Customer.class, 2);
    		   System.out.println(c.getId()+"   "+c.getName());
    		   
    		   Address ha=c.getHomeAddress();
    		   if(ha==null){
    			   System.out.println("homeAddress为空");
    		       ha=new Address("上地七街","海淀区","北京","100000");
    		       c.setHomeAddress(ha);
    		   }
    		   
    		   
    		   tx.commit();
    		   session.close();
    	}
    	
    }
    


     

  • 相关阅读:
    22:django 配置详解
    21:序列化django对象
    20:django中的安全问题
    19:django 分页
    HTML 标签(一)
    流程图学习绘制
    HTTP原理
    终端的颜色代码
    Python 进程 线程总结
    Python Select模型
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648002.html
Copyright © 2020-2023  润新知