Hiberante(四) OneToMany_xml 单向关联

 (1)  oneToMany 单向

 

   java类:Comment    Message

public class Comment {

	private int id;
	private String content;
      省略get(),set();  
}
public class Message {
  private int id;
  private String title;
  private String content;
  private Set<Comment> comments;
 省略get(),set();
}

Message.hbm.xml文件

<hibernate-mapping package="org.th.model">
    <class name="Message" table="t_message" >
        <id name="id">
            <generator class="native"></generator>
        </id>
        <property name="title"></property>
        <property name="content"></property>
        
        <!-- 使用了lazy="extra"   当返回结果是数字会使用count,否则使用投影  (智能一点)-->
        <set name="comments"  lazy="extra">
        <!--key用来指定在对方的外键名称  -->
             <key column="mid"></key>
        <!-- class 用来设置列表中的对象类型  -->    
             <one-to-many class="Comment"/>
        </set>
    </class>
</hibernate-mapping>

 Comment.hbm.xml

<hibernate-mapping package="org.th.model">
    <class name="Comment" table="t_comment" >
        <id name="id">
           <generator class="native"></generator>
        </id>
        <property name="content"></property>
    </class>
</hibernate-mapping>

 

 测试类:OneToMany

public class OneToMany {

	 @Test
	 public void testAdd(){
		 Session session=null;
			try {
				session = HibernateUtil.openSession();
				session.beginTransaction();
				Comment c1=new Comment();
				c1.setContent("黑河");
				Comment c2=new Comment();
				c2.setContent("白河");
				session.save(c1);session.save(c2);
				Message m=new Message();
				m.setTitle("中国好声音");
				m.setContent("123");
				m.addComment(c1);
				m.addComment(c2);
				session.save(m);
				//此时会发出5条sql  2条保存c1,c2。一条保存Message(其中addComment(c1) 由于延迟加载,只是将c1的id存在当中) 
				//当提交事务的 时候session中的对象会与内存中进行比较,不相同即update 
				session.getTransaction().commit();
			} catch (Exception e) {
				e.printStackTrace();
				if(session!=null) session.getTransaction().rollback();
			}finally{
				if(session!=null) HibernateUtil.close(session);
			}
	 }
	 @Test
	 public void testLoad(){
		 Session session=null;
			try {
				session = HibernateUtil.openSession();
				session.beginTransaction();
				Message message=(Message)session.load(Message.class, 1);
                System.out.println(message.getContent());				
			    for(Comment c:message.getComments()){
			    	System.out.println(c.getContent());
			    }
				
				session.getTransaction().commit();
			} catch (Exception e) {
				e.printStackTrace();
				if(session!=null) session.getTransaction().rollback();
			}finally{
				if(session!=null) HibernateUtil.close(session);
			}
	 }
	 //特别注意:OneToMany在添加和维护关系时比较麻烦,所以在开发中不建议使用OneToMany的单向
	 @Test
	 public void testLoad2(){
		 Session session=null;
			try {
				session = HibernateUtil.openSession();
				session.beginTransaction();
				Message message=(Message)session.load(Message.class, 1);
                
				System.out.println(message.getComments().size());				
			    // OneToMany 在不使用特别标签时,
				//Hibernate: select message0_.id as id4_0_, message0_.title as title4_0_, message0_.content as content4_0_ from t_message message0_ where message0_.id=?
				//Hibernate: select comments0_.mid as mid4_1_, comments0_.id as id5_1_, comments0_.id as id5_0_, comments0_.content as content5_0_ from t_comment comments0_ where comments0_.mid=?
					
				//  OneToMany 在使用<set name="comments"  lazy="extra">时    当返回结果是数字会使用count,否则使用投影  (智能一点)
				//Hibernate: select message0_.id as id4_0_, message0_.title as title4_0_, message0_.content as content4_0_ from t_message message0_ where message0_.id=?
			    //Hibernate: select count(id) from t_comment where mid =?
				
				
				session.getTransaction().commit();
			} catch (Exception e) {
				e.printStackTrace();
				if(session!=null) session.getTransaction().rollback();
			}finally{
				if(session!=null) HibernateUtil.close(session);
			}
	 }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate 是一种流行的 ORM(对象关系映射)框架,它可以帮助开发者将 Java 对象映射到关系型数据库中。下面是使用 Hibernate 的基本步骤: 1. 引入 Hibernate 的依赖包(jar 文件)和数据库驱动程序。 2. 配置 Hibernate 的配置文件(hibernate.cfg.xml)和映射文件(*.hbm.xml)。 - 配置文件中包括数据库连接信息、Hibernate 的配置参数以及其他信息。 - 映射文件中定义了 Java 对象和数据库表之间的映射关系。 3. 在 Java 代码中创建 SessionFactory 对象,并使用该对象创建 Session 对象。 - SessionFactory 是线程安全的,应该在应用程序启动时创建。 - Session 是轻量级的,应该在每个事务或操作中创建。 4. 使用 Session 对象来执行 CRUD(增删改查)操作。 - 使用 save() 方法来插入新数据,使用 delete() 方法来删除数据,使用 update() 方法来修改数据,使用 get() 或 load() 方法来查询数据。 5. 在程序结束时关闭 Session 对象和 SessionFactory 对象。 下面是一个使用 Hibernate 进行 CRUD 操作的示例代码: ``` // 创建 Configuration 对象,并读取 hibernate.cfg.xml 配置文件 Configuration configuration = new Configuration().configure(); // 创建 SessionFactory 对象 SessionFactory sessionFactory = configuration.buildSessionFactory(); // 创建 Session 对象 Session session = sessionFactory.openSession(); // 插入新数据 Dog dog = new Dog("Tom", 2); session.save(dog); // 查询数据 Dog dog1 = (Dog) session.get(Dog.class, 1); // 修改数据 dog1.setAge(3); session.update(dog1); // 删除数据 session.delete(dog1); // 关闭 Session 对象和 SessionFactory 对象 session.close(); sessionFactory.close(); ``` 这是一个简单的 Hibernate 示例,你可以根据自己的需要添加更多的数据操作和业务逻辑。同时,你也需要熟悉 Hibernate 的各种配置参数和 API,以更好地使用 Hibernate 进行开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值