Hibernate

Posted acefeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate相关的知识,希望对你有一定的参考价值。

1.创建项目并导入jar包。

jar包可以从 http://hibernate.org/orm/releases/ 下载

技术分享图片

这里有hibernate的多个版本,点击其中一个版本后,进入下载页面

技术分享图片

左边是maven用于maven项目,我下载的是右边的Zip Archive,这个包含了全部的jar包、源码、示例和帮助文档。

解压后找到lib文件夹,这里是hibernate的全部jar包,其中required里是核心jar包,把required里的jar包都导入项目中即可。此外,还要导入数据库驱动包。

#2.创建数据库及表

mysql中创建一个名为“hibernate”的数据库,创建“paper”表

技术分享图片

将id设为主键且自增。

第二步:编写实体类和映射文件

#1.编写试题类

Hibernate使用POJO来进行持久化,要求有与数据库表相对应的属性和getter、setter方法。

[java] view plain copy
 
  1. package com.vo;  
  2.   
  3. public class People {  
  4.     private int id;  
  5.     private String name;  
  6.     private Integer age;  
  7.   
  8.     public Integer getId() {  
  9.         return id;  
  10.     }  
  11.   
  12.     public void setId(int id) {  
  13.         this.id = id;  
  14.     }  
  15.   
  16.     public String getName() {  
  17.         return name;  
  18.     }  
  19.   
  20.     public void setName(String name) {  
  21.         this.name = name;  
  22.     }  
  23.   
  24.     public Integer getAge() {  
  25.         return age;  
  26.     }  
  27.   
  28.     public void setAge(Integer age) {  
  29.         this.age = age;  
  30.     }  
  31.   
  32.     @Override  
  33.     public String toString() {  
  34.         return "People [id=" + id + ", name=" + name + ", age=" + age + "]";  
  35.     }  
  36. }  
#2.编写映射文件People.hbm.xml
[java] view plain copy
 
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping package="com.vo">  
  7.     <class name="People" table="people">  
  8.         <id name="id">  
  9.          <generator class="native"/>  
  10.         </id>  
  11.         <property name="name"/>  
  12.         <property name="age"/>  
  13.     </class>  
  14. </hibernate-mapping>  

必须有id标签,generator设置主键生成策略,native是根据在identity、sequence、hilo三种生成器中选择。使用mysql时,native相当于identity。此时在mysql数据库中要将id设为自增长,否则出错。

第三步:编写核心配置文件

 

[java] view plain copy
 
  1. <!DOCTYPE hibernate-configuration PUBLIC  
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  3.     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
  4.   
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  8.           
  9.         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
  10.         <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>  
  11.         <property name="connection.username">root</property>  
  12.         <property name="connection.password"></property>  
  13.           
  14.         <property name="show_sql">true</property>  
  15.         <property name="format_sql">true</property>  
  16.           
  17.         <mapping resource="com/vo/People.hbm.xml"/>  
  18.           
  19.     </session-factory>  
  20. </hibernate-configuration>  

dialect:数据库方言,用的是哪种数据库,要设置与之对应的数据库方言。在hibernate中我们不用编写sql语句,但是由于不同的数据库支持的sql有差别,所以要指定采用哪一种数据库的方言。

show_sql和format_sql:在控制台显示sql语句。

mapping:配置映射文件路径。

第四步:进行增删改查

#1.增和查
[java] view plain copy
 
  1. package com.test;  
  2. import org.hibernate.Session;  
  3. import org.hibernate.SessionFactory;  
  4. import org.hibernate.cfg.Configuration;  
  5. import com.vo.People;  
  6.   
  7.   
  8. public class TestHibernate {  
  9.     public static void main(String[] args) {  
  10.         Configuration configuration = new Configuration().configure();    //读取配置文件,如果配置文件hibernate.cfg.xml放于src目录下,则不用写配置文件的路径。  
  11.         SessionFactory factory = configuration.buildSessionFactory();    //创建工厂  
  12.         Session session = factory.openSession();    //得到一个Session  
  13.         session.beginTransaction();    //开启事务:增删改需要开启事务并手动提交;查 不需要开启事务。  
  14.           
  15.         People p = new People();    //设置了自增长,不需要设置id  
  16.         p.setName("yang");      
  17.         p.setAge(10);  
  18.         session.save(p);    //将对象p持久化  
  19.         session.getTransaction().commit();    //增删改操作需要手动提交  
  20.                 session.get(People.class, 1);    //查询id为1的people  
  21.                 session.close();    //关闭Session  
  22.     }  
  23. }  

 

 

#2.改
[java] view plain copy
 
  1. People p = new People();  
  2. p.setId(1);  
  3. p.setName("liu");  
  4. p.setAge(20);  
  5.   
  6. session.update(p);   
  7. session.getTransaction().commit();  
#3.删
[java] view plain copy
 
  1. People p = new People();  
  2. p.setId(1);  
  3. session.delete(p);  
  4. session.getTransaction().commit();  
简单记录一下java的,有时间继续写一下node的相关。

以上是关于Hibernate的主要内容,如果未能解决你的问题,请参考以下文章

HibernateHibernate配置与sessiontransaction

hibernateHibernate SQL 方言(hibernate.dialect)

HibernateHibernate的多表查询

hibernateHibernate中get()和load()的区别

HibernateHibernate中使用延迟加载应该注意的事项

hibernateHibernate中save, saveOrUpdate, persist, merge, update 区别