搭建hibernate开发环境

本文详细介绍了如何使用Hibernate框架连接MySQL数据库,包括下载框架、引入依赖、创建实体类、映射文件、配置文件以及基本操作如插入、更新、删除、查询等。还提供了移植到Oracle数据库的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

学习步骤:1.首先到官网下载hibernate框架 2.把所需要的包导入到web项目 3.建立POJO类 4.建立**.hbm.xml映射文件 5.建立hibernate.cfg.xml配置文件 6.建立Test类

1.进入www.hibernate.org下载所需要的hibernate框架,我所使用的是较新的Hibernate 3.5.3-Final release 版本。

2解压下载下来的文件,把以下包引入(hibernate3.jar核心包 required文件夹下的antlr-2.7.6.jar,commons-collections-3.1.jar,dom4j-1.6.1.jar,javassist-3.9.0.GA.jar,jta-1.1.jar以及slf4j-api-1.5.8.jar但是最后一个包,hibernate提供的不完整,我们还需要到http://www.slf4j.org/网站上下个完整的版本,我下的是slf4j-1.6.1.zip 然后解压,把slf4j-api-1.6.1.jar与slf4j-nop-1.6.1.jar两个包导入,前面的slf4j-api-1.5.8.jar可以不要了。

3.建立POJO类,事实上就和FORM类,JAVABEAN一样,首先在数据库里建立一个表,然后用JAVA建立字段对应的属性。首先建立一个表(MYSQL),来进行操作:

Code:
  1. CREATE TABLE `student` (   
  2.   `id` int(7) NOT NULL,   
  3.   `stu_name` varchar(50) NOT NULL,   
  4.   `stu_age` int(3) default NULL,   
  5.   PRIMARY KEY  (`id`)   
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8  

然后写POJO类,如下:

Code:
  1. package myclass.entity;   
  2. //POJO类 最好加上一个构造函数   
  3. public class Student {   
  4.     private int id;   
  5.     private String stu_name;   
  6.     private int stu_age;   
  7.        
  8.     public int getId() {   
  9.         return id;   
  10.     }   
  11.     public void setId(int id) {   
  12.         this.id = id;   
  13.     }   
  14.     public String getStu_name() {   
  15.         return stu_name;   
  16.     }   
  17.   
  18.     public void setStu_name(String stu_name) {   
  19.         this.stu_name = stu_name;   
  20.     }   
  21.   
  22.     public int getStu_age() {   
  23.         return stu_age;   
  24.     }   
  25.   
  26.     public void setStu_age(int stu_age) {   
  27.         this.stu_age = stu_age;   
  28.     }   
  29.   
  30.     public Student() {   
  31.            
  32.     }   
  33.   
  34. }   

4,建立Student.hbm.xml映射文件,如下:

Code:
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE hibernate-mapping PUBLIC    
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
  5.     <hibernate-mapping>   
  6.     <class name="myclass.entity.Student" table="student">   
  7.     <!-- 配置对角标识符和表的主键 -->   
  8.     <!-- column表示与数据库对应的字段 -->   
  9.     <id name="id" column="id">    
  10.     <!-- 配置主键的生成策略 -->   
  11.     <generator class="increment"></generator>   
  12.     </id>   
  13.     <!--配置其他的属性与字段 -->   
  14.     <property name="stu_name" column="stu_name"></property>   
  15.     <property name="stu_age" column="stu_age"></property>   
  16.     </class>   
  17.     </hibernate-mapping>  

可以建立多个Class节点,但一个Class节点对应一个表,本Class节点中对应的是student表。id产生的策略是increment。

5.建立hibernate.cfg.xml配置文件,如下:

Code:
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE hibernate-configuration PUBLIC   
  3.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">   
  5. <hibernate-configuration>   
  6.     <session-factory>   
  7.     <property name="hibernate.connection.username">root</property>   
  8.     <property name="hibernate.connection.password">liping</property>   
  9.     <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>   
  10.     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>   
  11.     <!-- 数据库方言 -->   
  12.     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>   
  13.     <property name="show_sql">true</property>   
  14.     <mapping resource="myclass/entity/Student.hbm.xml"/>   
  15.     </session-factory>   
  16. </hibernate-configuration>  

基本上就是用来连接数据库的,hibernate是使用sessionfactory来操作数据库的。

6.建立Test类

Code:
  1. package myclass.test;   
  2.   
  3. import java.util.List;   
  4.   
  5. import myclass.entity.Student;   
  6.   
  7. import org.hibernate.Query;   
  8. import org.hibernate.SessionFactory;   
  9. import org.hibernate.Transaction;   
  10. import org.hibernate.cfg.Configuration;   
  11. import org.hibernate.classic.Session;   
  12.   
  13. public class Test {   
  14. public Session session=null;   
  15. public Test(){   
  16.     Configuration config=new Configuration();   
  17.     config.configure();   
  18.     SessionFactory sf=config.buildSessionFactory();   
  19.     session=sf.openSession();   
  20.     }   
  21.     /**  
  22.      * @测试HIBERNATE对数据库的操作  
  23.      */  
  24.     public static void main(String[] args) {   
  25.         Test test=new Test();   
  26.         test.insert();   
  27.         //test.update();   
  28.         //test.delete();   
  29.         //test.queryById();   
  30.         //test.queryByHql();   
  31.         //test.queryAll();   
  32.         //test.updateByHql();   
  33.         //test.deleteByHql();   
  34.         //test.queryLike();   
  35.            
  36.     }   
  37.     public void insert(){   
  38.         Student stu=new Student();   
  39.         stu.setStu_age(22);   
  40.         stu.setStu_name("熊阳锋1");   
  41.         session.save(stu);   
  42.         Transaction tran=session.beginTransaction();   
  43.         tran.commit();   
  44.         session.close();   
  45.     }   
  46.     public void update(){   
  47.         Student stu=new Student();   
  48.         stu.setId(1);   
  49.         stu.setStu_name("fdsfd");   
  50.         stu.setStu_age(23);   
  51.         session.update(stu);   
  52.         session.beginTransaction().commit();   
  53.         session.close();   
  54.     }   
  55.     public void delete(){   
  56.         Student stu=new Student();   
  57.         stu.setId(7);   
  58.         session.delete(stu);   
  59.         session.beginTransaction().commit();   
  60.         session.close();   
  61.     }   
  62.     public void queryById(){   
  63.         Student stu=(Student)session.get(Student.class6);   
  64.         if(stu!=null){   
  65.             System.out.println(stu.getId());   
  66.             System.out.println(stu.getStu_name());   
  67.             System.out.println(stu.getStu_age());   
  68.         }else{   
  69.             System.out.println("查无此人!");   
  70.         }   
  71.     }   
  72.     //按ID查询   
  73.     public void queryByHql(){   
  74.         Query query=session.createQuery("from Student stu where stu.id=?");   
  75.         query.setInteger(01);   
  76.         //方法一   
  77. //      List<Student> list=query.list();   
  78. //      for(Student stu:list){   
  79. //          System.out.println(stu.getId());   
  80. //          System.out.println(stu.getStu_name());   
  81. //          System.out.println(stu.getStu_age());   
  82. //      }   
  83.         //方法二   
  84.         Student stu=(Student)query.uniqueResult();   
  85.         System.out.println(stu.getId());   
  86.         System.out.println(stu.getStu_name());   
  87.         System.out.println(stu.getStu_age());   
  88.         session.close();   
  89.            
  90.     }   
  91.     //查询全部   
  92.     public void queryAll(){   
  93.         Query query=session.createQuery("from Student");   
  94.         List<Student> list=query.list();   
  95.         for(Student stu:list){   
  96.             System.out.println(stu.getId());   
  97.             System.out.println(stu.getStu_name());   
  98.             System.out.println(stu.getStu_age());   
  99.         }   
  100.         session.close();   
  101.     }   
  102.     //修改数据   
  103.     public void updateByHql(){   
  104.         Query query=session.createQuery("update Student stu set stu.stu_age=?,stu.stu_name=? where id=?");   
  105.         query.setInteger(0,34);   
  106.         query.setString(1,"邓玲");   
  107.         query.setInteger(2,2);   
  108.         query.executeUpdate();   
  109.         session.beginTransaction().commit();   
  110.         session.close();   
  111.     }   
  112.     //删除数据   
  113.     public void deleteByHql(){   
  114.         Query query=session.createQuery("delete from Student where id=?");   
  115.         query.setInteger(0,3);   
  116.         query.executeUpdate();   
  117.         session.beginTransaction().commit();   
  118.         session.close();   
  119.     }   
  120.     //模糊查询   
  121.     public void queryLike(){   
  122.         Query query=session.createQuery("from Student stu where stu.stu_name like ?");   
  123.         query.setString(0"%玲%");   
  124.         List<Student> list=query.list();   
  125.         for(Student stu:list){   
  126.             System.out.println(stu.getId());   
  127.             System.out.println(stu.getStu_name());   
  128.             System.out.println(stu.getStu_age());   
  129.         }   
  130.         session.close();   
  131.     }   
  132.     public void insertbyHql(){   
  133.            
  134.     }   
  135.        
  136. }   

整个过程就搭建完了,本例是对mysql数据进行操作的,如果想要移植到oracle数据库里面去的话,也很容易,只要在配置文件朝里把数据库连接改为对oracle的即可,还有把主键生成的策略改为sequence即可,很简便,这是一hibernat的大优势之一。

如果用oracle数据库的话,把配置文件改为如下:

Student.hbm.xml

Code:
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE hibernate-mapping PUBLIC    
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
  5.     <hibernate-mapping>   
  6.     <class name="myclass.entity.Student" table="student2">   
  7.     <!-- 配置对角标识符和表的主键 -->   
  8.     <!-- column表示与数据库对应的字段 -->   
  9.     <id name="id" column="id">    
  10.     <!-- 配置主键的生成策略 -->   
  11.     <generator class="sequence">   
  12.     <param name="sequence">SEQ_STU</param>   
  13.     </generator>   
  14.     </id>   
  15.     <!--配置其他的属性与字段 -->   
  16.     <property name="stu_name" column="stu_name"></property>   
  17.     <property name="stu_age" column="stu_age"></property>   
  18.     </class>   
  19.     </hibernate-mapping>  

hibernate.cfg.xml

Code:
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE hibernate-configuration PUBLIC   
  3.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">   
  5. <hibernate-configuration>   
  6.     <session-factory>   
  7.     <property name="hibernate.connection.username">scott</property>   
  8.     <property name="hibernate.connection.password">liping</property>   
  9.     <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>   
  10.     <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcle</property>   
  11.     <!-- 数据库方言 -->   
  12.     <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>   
  13.     <property name="show_sql">true</property>   
  14.     <mapping resource="myclass/entity/Student.hbm.xml"/>   
  15.     </session-factory>   
  16. </hibernate-configuration>  

这样就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值