Hibernate入门(1)

 

(1)第一个hibernate程序
  
   遇到问题:jar包问题,环境的配置
  
   简单程序运行所需要导入的jar包:
   -1-数据库驱动包
   -2-hibernate3.jar   //hibernate核心包,在根目录下
   -3-antlr-2.7.6.jar  //语法分析器
   -4-commons-collections-3.1.jar   //java中collection对象的扩展包
   -5-dom4j-1.6.1.jar  //Java的XML API包
   -6-javassist-3.9.0.GA.jar  //分析、编辑和创建Java字节码的类库
   -7-jta-1.1.jar  //Java事务API
   -8-slf4j-api-1.5.8.jar   //核心API
   -9-slf4j-nop-1.5.8.jar   //日志解决方案(slf4j)实现
  
   测试程序:---------------------------------------------------------------
  
   //要存入数据库的对象
   public class Event {
    
    private int id;
      private String title;
      private Date date;
      
      //设为私有方法,策略让其自动生成,作为主键
      private void setId(int id){
       this.id = id;
      }
      /*
         other getter and setter method and all is public.
      */
     }
     -------------------------------------------------------------------------
     //对象映射表,即该对象与数据表的关联
     //命名规则:Event.hbm.xml(与对象名相同)
     //放置位置:与对应的类在相同目录下
     //数据库存在一张表EVENTS(EVENT_ID,EVENT_DATE,title)
    
     <hibernate-mapping package="包名">
   <class name="Event" table="EVENTS">  
    <id name="id" column="EVENT_ID">
     <generator class="native" />
    </id>
    //时间类型,命名不要用date,time,datetime,与关键字冲突
    //所以用到column属性,而title可以不用设置
    //这种是用在类的属性与数据库表的列名不相同时
    <property name="date" type="timestamp" column="EVENT_DATE" />
    <property name="title" />
   </class>
  </hibernate-mapping>
  -------------------------------------------------------------------------
  //hibernate核心配置文件hibernate.cfg.xml
  //存放位置:位置于根目录下,src下
  <hibernate-configuration>
   <session-factory>
    <!-- 数据库连接设置 -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    
    <!-- JDBC连接池 (use the built-in) -->
    <property name="connection.pool_size">1</property>
    
    <!-- SQL方言 -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>
    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    
    <!-- 显示执行的sql语句 -->
    <property name="show_sql">true</property>
    
    <!-- 设置该属性可以判断是否重建表或者是修改表 -->
    <property name="hbm2ddl.auto">update</property>
    
    <!--将自己写的对象配置文件写入该标签中(重要) -->
    <mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml" />
   </session-factory>
  </hibernate-configuration>
     -------------------------------------------------------------------------
     //测试函数
     public static void main(String[] args) {
   Configuration cg = new Configuration();
   //加载配置文件
   cg = cg.configure();
   //得到一个session工厂对象
   SessionFactory sf = cg.buildSessionFactory();
   //得到一个session对象
   Session s = sf.openSession();
   //开始事务
   s.beginTransaction();
   Event e = new Event();
   e.setTitle("kaka");
   e.setDate(new Date());
   //存储对象
   s.save(e);
    //提交操作
   s.getTransaction().commit();
   //关闭连接
   s.close();
   sf.close();
  }
    -------------------------------------------------------------------------
   
(2)单向Set-based关联
     若在上面的测试类Person中加入集合类Set events = new HashSet();
     映射一对多的关系,即一个人对应多个任务
     此时需要在Person.hbm.xml配置文件中增加:
     <set name="events" table="PERSON_EVENT">
   <key column="PERSON_ID"/>
   <many-to-many column="EVENT_ID" class="Event"/>
   </set>
  
   运行测试程序自动生成一张新的多对多关联表
  
总结:通过今天的学习,初步了解了hibernate,以及简单程序的运行,因为以前如果操作JDBC来访问DB,
      感觉打破了面向对象的思想,里面存在着关系的访问,而使用了hibernate可以运用它的ORM方法,
      将对象与关系映射起来,操作时只而要save对象就可以了,操作也变得更加简便,而且更加符合
      面向对象的思想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值