Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 253|回复: 0

[Java框架学习]第一个Hibernate with Annotation程序

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-28 23:56:52 | 显示全部楼层 |阅读模式
    Hibernate是ORM的解决方案,其底层对数据库的操作依赖于JDBC,所以您必须先取得JDBC驱动程序,在这边所使用的是MySQL,所以您必须至 MySQL? Connector/J 取得MySQL的JDBC驱动程序。

           接下来至 Hibernate 官方网站 取得Hibernate 3.2、Hibernate Annotations 3.2。

    您必须安装JDK 5.0才可以使用Hibernate Annotations的功能。
                                                                                        
        解开Hibernate 3.2的zip档案后,当中的hibernate3.jar是必要的,而在lib目录中还包括了许多jar档案,您可以在 Hibernate 3.0官方的参考手册 上找到这些jar的相关说明,其中必要的是 antlr、dom4j、CGLIB、asm、Commons Collections、Commons Logging、 EHCache,Hibernate底层还需要java Transaction API,所以您还需要jta.jar。
      
      
      
       
       
          解开Hibernate Annotations 3.2的zip档案后,您需要hibernate-annotations.jar、ejb3-persistence.jar这两个档案。
         

         
    到这边为止,总共需要以下的jar档案:
         

         

         
         

         
    Hibernate可以运行于单机之上,也可以运行于Web应用程序之中,如果是运行于单机,则将所有用到的jar档案(包括JDBC驱动程序)设定至CLASSPATH中,如果是运行于Web应用程序中,则将jar档案置放于WEB-INF/lib中。
         

         
    如果您还需要额外的Library,再依需求加入,例如JUnit、Proxool等等,接下来可以将etc目录下的 log4j.properties复制至Hibernate项目的Classpath下,并修改一下当中的 log4j.logger.org.hibernate为error,也就是只在在错误发生时显示必要的讯息。
         

         
    接着设置基本的Hibernate配置文件,可以使用XML或Properties档案,这边先使用XML,档名预设为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>
         

                 <!-- 显示实际操作数据库时的SQL -->
         

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

                 <!-- SQL方言,这边设定的是MySQL -->
         

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

                 <!-- JDBC驱动程序 -->
         

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

                 <!-- JDBC URL -->
         

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

                 <!-- 数据库使用者 -->
         

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

                 <!-- 数据库密码 -->
         

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

          
         

                 <!-- 以下设置对象与数据库表格映像类别 -->
         

                 <mapping class="onlyfun.caterpillar.User"/>
         

             </session-factory>
         

         </hibernate-configuration>
         

         
    这边以一个简单的单机程序来示范Hibernate的配置与功能,首先作数据库的准备工作,在MySQL中新增一个demo数据库,并建立user表格:
         
    1. CREATE TABLE user (
    2.     id INT(11) NOT NULL auto_increment PRIMARY KEY,
    3.     name VARCHAR(100) NOT NULL default "",
    4.     age INT
    5. );
    复制代码

         对于这个表格,您有一个User类别与之对应,表格中的每一个字段将对应至User实例上的Field成员。


         package onlyfun.caterpillar;
         

          
         

         import javax.persistence.*;
         

          
         

         @Entity
         

         @Table(name="user") // 非必要,在表格名称与类别名称不同时使用
         

         public class User {
         

           @Id
         

           @GeneratedValue(strategy=GenerationType.AUTO)
         

             private Integer id;
         

          
         

           @Column(name="name") // 非必要,在字段名称与属性名称不同时使用
         

             private String name;
         

          
         

           @Column(name="age")
         

             private Integer age; // 非必要,在字段名称与属性名称不同时使用
         

             
         

             // 必须要有一个预设的建构方法
         

             // 以使得Hibernate可以使用Constructor.newInstance()建立对象
         

             public User() {
         

             }
         

          
         

             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;
         

             }
         

             
         

             public Integer getAge() {
         

                 return age;
         

             }
         

          
         

             public void setAge(Integer age) {
         

                 this.age = age;
         

             }
         

         }
         

         

         其中id是个特殊的属性,Hibernate会使用它来作为主键识别,您可以定义主键产生的方式,这边设定为自动产生主键,可以看到,实体标识,主键生成,以及相关映像,都可以使用Annotation来完成。

    接下来撰写一个测试的程序,这个程序直接以Java程序设计人员熟悉的语法方式来操作对象,而实际上也直接完成对数据库的操作,程序将会将一笔数据存入表格之中:

         package onlyfun.caterpillar;
         

          
         

         import org.hibernate.SessionFactory;
         

         import org.hibernate.Session;
         

         import org.hibernate.Transaction;
         

         import org.hibernate.cfg.AnnotationConfiguration;
         

         import org.hibernate.cfg.Configuration;
         

          
         

         public class HibernateAnnotationDemo {
         

          
         

             public static void main(String[] args) {
         

                 // 需要AnnotationConfiguration读取Annotation讯息
         

                 Configuration config = new AnnotationConfiguration().configure();
         

                 // 根据 config 建立 SessionFactory
         

                 // SessionFactory 将用于建立 Session
         

                 SessionFactory sessionFactory = config.buildSessionFactory();
         

          
         

                 // 将持久化的物件
         

                 User user = new User();
         

                 user.setName("caterpillar");
         

                 user.setAge(new Integer(30));     
         

          
         

                 // 开启Session,相当于开启JDBC的Connection
         

                 Session session = sessionFactory.openSession();
         

                 // Transaction表示一组会话操作
         

                 Transaction tx= session.beginTransaction();
         

                 // 将对象映像至数据库表格中储存
         

                 session.save(user);
         

                 tx.commit();
         

                 session.close();
         

                 sessionFactory.close();
         

                
         

                 System.out.println("新增资料OK!请先用MySQL观看结果!");
         

             }
         

         }
         

         

         注意,使用Annotation时,需要的是AnnotationConfiguration类别。

    如您所看到的,程序中只需要直接操作User对象,并进行Session与Transaction的相关操作,Hibernate就会自动完成对数据库的操作,您看不到任何一行JDBC或SQL的陈述,撰写好以上的各个档案之后,各档案的放置位置如下:



    接着可以开始运行程序,结果如下:


      
         
          Hibernate: insert into user (name, age) values (?, ?)
          

          新增资料OK!请先用MySQL观看结果!
          

          
         
    执行结果中显示了Hibernate所实际使用的SQL,由于这个程序还没有查询功能,所以要进入MySQL中看看新增的数据,如下:
         

         

         

         
          mysql> select * from user;
          

          +----+-----------------+------+
          

          | id    | name         | age  |
          

          +----+-----------------+------+
          

          |  1    | caterpillar  | 30   |
          

          +----+-----------------+------+
          

          1 row in set (0.03 sec)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 02:35 , Processed in 0.613472 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表