您的位置:首页 > 编程语言

Hibernate初学中的对多、多对一关系模型及构造函数和构造代码比较

2013-02-17 16:15 344 查看
举例订单与客户

  多对一关系模型:

  · 首先是导包;这个省略不写了,

  · 其次写domain类

  分为Client Order两个类,因为是多对一的关系,所以外键应该放在Order这个类里;

  配置文件:hibernate.cfg.xml

  [java]

  <hibernate-configuration>

  <session-factory name="foo">

  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

  <property name="connection.url">jdbc:mysql:///test</property>

  <property name="connection.username">root</property>

  <property name="connection.password">root</property>

  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

  <property name="show_sql">true</property>

  <property name="hbm2ddl.auto">update</property>

  <mapping resource="com/hbsi/domain/Client.hbm.xml"/>

  <mapping resource="com/hbsi/domain/Order.hbm.xml"/>

  </session-factory>

  </hibernate-configuration>

  定义一个Client的变量;

  ·然后写配置文件,Client.hbm.xml

  <hibernate-mapping package="com.hbsi.domain">

  <class name="Client" table="client">//类名和表名

  <id name="id" column="id">//变量和字段

  <generator class= "native" />//根据数据库里的设置自定义

  </id>

  <property name="name" />

  </class>

  </hibernate -mapping>

  Order.hbm.xml

  <hibernate-mapping>

  <class name="Order" table="ordershop">

  <id name="id">

  <generator class="native" />

  </id>

  <property name="shopname" column="shopname" />

  <property name="number" column="number"/>

  <property name = "price" column="price" />

  <many-to-one name="client" column="client_id" />

  <class>

  </hibernate-mapping>

配置文件这样就写完了,接下来就是添加查找;

  Session session=null;

  @Test

  public void add(Client client,Order order){

  try{

  session = HibernateUtil.getSession();//获取工具类

  session.beginTransaction();//开启事务

  /*Client client = new Client();

  client.setName("刘总");

  Order order1 = new Order();

  order1.setShopname("航空母舰");

  order1.setNumber(2);

  order1.setPrice(22);

  order1.setCt(client);

  Order order2 = new Order();

  order2.setShopname("航空母舰");

  order2.setNumber(2);

  order2.setPrice(22);

  order2.setCt(client);*/

  session.save(client);

  session.save(order);

  session.beginTransaction()。commit();

  }finally{

  if(session!=null){

  session.close();

  }

  }

  }

  public void find(int id){

  try{

  session = HibernateUtil.getSession();

  session.beginTransaction();

  Order order = (Order) session.get(Order.class, id);

  System.out.println(order.getCt()。getName());

  session.beginTransaction()。commit();

  }finally{

  if(session!=null){

  session.close();

  }

  }

  }

  测试:

  public static void main(String[] args ){

  Client client = new Client();

  client.setName("xiao总");

  Order order1 = new Order();

  order1.setShopname("美国");

  order1.setNumber(2);

  order1.setPrice(22);

  order1.setCt(client);

  Order order2 = new Order();

  order2.setShopname("日本");

  order2.setNumber(2);

  order2.setPrice(22);

  order2.setCt(client);

  Many2one mo = new Many2one();

  mo.add(client, order1);

  mo.find(2);

  }

  关系模型一对多:

  Client.hbm.xml

  <hibernate-mapping package="com.hbsi.domain2">

  <class name="Client" table="client">

  <id name="id" column="id">

  <generator class = "native" />

  </id>

  <property name="name" />

  <set name="order" table="ordershop" cascade="save-update">

  <key column="user_id" />

  <one-to-many class="Order" />

  </set>

  </class>

  </hibernate-mapping>

  Order.hbm.xml

  <hibernate-mapping package="com.hbsi.domain2">

  <class name="Order" table="ordershop">

  <id name="id">

  <generator class = "native" />

  </id>

  <property name="shopname" column="shopname" />

  <property name="number" column="number" />

  <property name="price" column="price" />

  </class>

添加方法:

  public void add(Client client,Order order){

  try{

  session = HibernateUtil.getSession();

  session.beginTransaction();

  session.save(client);

  // session.save(order);

  session.beginTransaction()。commit();

  }finally{

  if(session!=null){

  session.close();

  }

  }

  }

  public void find(int id){

  try{

  session = HibernateUtil.getSession();

  session.beginTransaction();

  Client client = (Client) session.get(Order.class, id);

  Set<Order> orders =client.getOrder();

  orders.size();

  session.beginTransaction()。commit();

  }finally{

  if(session!=null){

  session.close();

  }

  }

  }

----------------------------------------------构造函数和构造代码块比较

[java]  

class Demo  

{  

public Demo()//构造函数(方法)  

{  int a=90;  

System.out.println("构造函数a="+a);  

}  

{

//构造代码块  

int a=80;//未创建对象,不会运行。  

System.out.println("构造代码a="+a);  

}  

public static void main(String []args)  

{  

System.out.println("运行结果");  

new Demo();  

}  

}
本文出自 “网络侠客” 博客,请务必保留此出处http://jaiaiifh.blog.51cto.com/5069434/1134508
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: