Hibernate 入门教程

Hibernate是一种ORM框架,与各种数据库、SQL、语句打交道,是一个数据持久的一种解决方案,hibernate可以很大程度上的简化我们对数据库的操作。

在开始我们的学习之前,我们先要准备我们的Hibernate必备jar。大家可以到官网上去下载:http://hibernate.org/orm/

 我们今天所讲的所有代码示例大家可以从这里下载:http://download.csdn.net/detail/yfyzy/8943675

我们先来看第一个habernate的例子。

开发环境: myeclipse + mysql5.5 。

1.准备数据库

  我们首先创建一个 员工的数据库emp,数据库中包含一张表t_emp 包括字段有 id  、员工姓名、工资、年龄 4个字段。

  1)创建员工数据库emp

 

  2)创建员工表t_emp

2.新建一个Emp的JavaBean类

  所谓JavaBean指的是只有属性和相应的get和set方法。我们的简单对象属性字段和我们t_emp表中字段相对应。

 1 public class Emp {
 2 
 3     private int id; // ID
 4     private String name; // 姓名
 5     private BigDecimal salary; // 薪资 因为是金钱,所以用BigDecimal类型的,更加精确。
 6     private int age; // 年龄
 7 
 8     public Emp() {   
 9 
10     }
11     
12     public int getId() {
13         return id;
14     }
15 
16     public void setId(int id) {
17         this.id = id;
18     }
19 
20     public String getName() {
21         return name;
22     }
23 
24     public void setName(String name) {
25         this.name = name;
26     }
27 
28 
29     public void setname(String ename) {
30         this.name = ename;
31     }
32 
33     public BigDecimal getSalary() {
34         return salary;
35     }
36 
37     public void setSalary(BigDecimal salary) {
38         this.salary = salary;
39     }
40 
41     public int getAge() {
42         return age;
43     }
44 
45     public void setAge(int age) {
46         this.age = age;
47     }
48 
49     @Override
50     public String toString() {
51         return "Emp [age=" + age + ", id=" + id + ", name=" + name
52                 + ", salary=" + salary + "]";
53     }
54 }

3.hibernate配置

  在src目录新建一个xml文件,命名为hibernate.cfg.xml

 1 <!DOCTYPE hibernate-configuration PUBLIC
 2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 3     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 4 
 5 <hibernate-configuration>
 6     <session-factory>
 7     
 8     <!--配置链接的URL-->
 9     <property name="hibernate.connection.url">
10             jdbc:mysql://localhost:3306/emp
11         </property>
12         <!--
13            配置链接驱动
14         -->
15         <property name="hibernate.connection.driver.class">
16             com.mysql.jdbc.Driver
17         </property>
18         <!--
19         编码方式
20         -->
21         <property name="connection.useUnicode">true</property>
22         <property name="connection.characterEncoding">UTF-8</property>
23         <!--
24         数据库用户名和密码
25         -->
26         <property name="hibernate.connection.username">root</property>
27         <property name="hibernate.connection.password">root</property>
28         <!--
29         hiberate解析方言,不同数据库会不一样,我们这里用MySql的
30         -->
31         <property name="hibernay.dialect">
32             org.hibernate.dialect.MySQLDialect.class
33         </property>
34         <!--
35         在控制台中显示sql语句,这个是用于调试用的,项目上线一定不要加这个哦
36         -->
37         <property name="hibernate.show_sql">true</property>
38         <property name="hibernate.format_sql">true</property>
39         <!--
40         引入Emp员工这个实体类的配置文件
41         -->
42         <mapping resource="entity/Emp.hbm.xml"></mapping>
43     </session-factory>
44 </hibernate-configuration>

现在我们来配置我们的Emp实体类和t_emp的映射关系,新建一个xml文件,命名为Emp.hbm.xml

 1 <!DOCTYPE hibernate-mapping PUBLIC 
 2     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <hibernate-mapping>
 5     <class name="org.tarena.entity.Emp" table="t_emp">
 6         <id name="id" column="id">
 7             <!--数据库的主键生成策略  native配置为使用数据库自带的生成策略-- 关于参数详解参考:http://www.cnblogs.com/yfyzy/p/4675041.html>  
 8             <generator class="native"></generator>
 9         </id>
10         <property name="name" column="name" >
11         </property>
12         <property name="salary" column="salary">
13         </property>
14         <property name="age" column="age">
15         </property>
16     </class>
17 </hibernate-mapping>

下面是我项目下的结构图

4.建立操作数据库的类

  好啦,所有的配置完成了,现在我们来看看,hibernate如何进行增、删、查、改,首先我们先建一个工具类,用来获取hibernate操作数据的对象首先我们要根据我们之前的配置得到一个SessionFactory  用来产生Session,我们可以占时把session想成与数据库的一个连接。

 1 package util;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.cfg.Configuration;
 6 
 7 public class SessionUtil {

9 //定义一个SessionFactory,这个可以先想成是数据的连接池 10 private static SessionFactory sessionFactory; 11 12 static{ 13 //如果hibernate.cfg.xml是放在src目录下,这可以不用路径,但是配置文件名称必须以hibernate.cfg.xml命名。 14 Configuration cfg = new Configuration();//加载配置文件 15 sessionFactory = cfg.configure().buildSessionFactory(); 16 } 17 18 //获取session ,可以先想成是一个连接。 19 public static Session getSession(){ 20 return sessionFactory.openSession(); 21 } 22 }

现在我们先建一个类,来实现对t_emp表单增删查改。

  1 import java.math.BigDecimal;
  2 import java.util.List;
  3 
  4 import org.hibernate.Query;
  5 import org.hibernate.Session;
  6 import org.hibernate.Transaction;
  7 import util.SessionUtil;
  8 
  9 import entity.Emp;
 10 
 11 /**
 12  *该类主要用hibernate实现对t_emp表的增、删、查、改
 13  *
 14  */
 15 public class EmpTest {
 16 
 17     /**
 18      * @param args
 19      */
 20     public static void main(String[] args) {
 21         selectAll();
 22     }
 23     
 24     /**
 25      * 往数据数据库中插入数据,特别注意哦,对于增、删、改 是需要事务支持的
 26      */
 27     
 28     public static void insertEmp(){
 29         
 30         //获取数据库连接
 31         Session session = SessionUtil.getSession();
 32         //开启事物
 33         Transaction ts = session.beginTransaction();
 34         
 35         Emp emp = new Emp();
 36         emp.setId(3);
 37         emp.setName("大明");
 38         emp.setSalary(new BigDecimal(10000));
 39         emp.setAge(25);
 40         
 41         //向数据库中插入一条数据 
 42         session.save(emp);
 43         
 44         //提交事物
 45         ts.commit();
 46         session.close();
 47     }
 48         
 49     /**
 50      * 对数据库删除一条数据,该操作需要通过一个对象,且该对象必须设置主键
 51      * 如果该对象不存在,则会抛出异常。
 52      */
 53     public static void deleteEmp(){
 54         //获取数据库连接
 55         Session session = SessionUtil.getSession();
 56         //开启事物
 57         Transaction ts = session.beginTransaction();
 58         
 59         Emp emp = new Emp(); 
 60         //通过主键删除数据
 61         emp.setId(2);
 62         
 63         //向数据库中删除一条数据 
 64         session.delete(emp); //该对象必须设置主键,否则删除无效
 65         
 66         //提交事物
 67         ts.commit();
 68         session.close();
 69     }
 70     
 71     /**
 72      * 更新一条数据,我们这里的例子以一个实体对象为单位更新
 73      */
 74     public static void updateEmp(){
 75         //获取数据库连接
 76         Session session = SessionUtil.getSession();
 77         //开启事物
 78         Transaction ts = session.beginTransaction();
 79         
 80         Emp emp = new Emp(); 
 81         emp.setId(3);
 82         emp.setName("张三");
 83         emp.setAge(22);
 84         emp.setSalary(new BigDecimal("10000.25"));
 85         
 86         //更新一条数据
 87         session.update(emp); //这里都每个字段都要填哦,不然会抛出异常的
 88         
 89         //提交事物
 90         ts.commit();
 91         session.close();
 92     }
 93     
 94     
 95     /**
 96      * 查询一个表中的所有数据
 97      */
 98     public static void selectAll(){
 99         //获取数据库连接
100         Session session = SessionUtil.getSession();
101         //开启事物
102         Transaction ts = session.beginTransaction();
103          
104         //注意这里使用的hsql,是hiberate给出的sql,我们只需需要对实体对象进行操作。
105         String hsql = "from Emp";  
106         //获取一个hsql查询对象,hiberate会根据你写的hsql语句转化为sql语句。
107         Query query = session.createQuery(hsql);
108         List<Emp> emps = query.list();
109         
110         
111     /*    //我们也可以使用我们熟悉的sql语句来编写
112         String sql = "select * from t_emp";
113         SQLQuery sqlQuery = session.createSQLQuery(sql);
114         //把查询到的结果对象我们映射的实体对象
115         sqlQuery.addEntity(Emp.class);
116          List<Emp> emps = sqlQuery.list();*/
117      
118         for (Emp emp : emps) {
119             System.out.println(emp);
120         }
121     }
122     
123 }

  运行上面的代码就可以实现对数据库的增删查改了。

5.总结

  好啦,现在我们来总结 一下我们的hibernate使用流程。

  1)首先我们要配置hibernate.cfg.xml文件,里面指明了hibernate想连接的数据库,以及操作该数据的方式。

  2)建立与数据库表t_emp对应的Emp实例类,该类是一个JavaBean对象,所谓JavaBean就是指只有属性和相应的get和set方法的简单对象。

  3)新建一个Emp.hbm.xml文件,该文件是我们实体类Emp与数据库表t_emp的映射。

  4)把我们新建好的Emp.hbm.xml引入我们的hibernate.cfg.xml文件中,启动SessionFactory就可以操作数据库啦

原文地址:https://www.cnblogs.com/yfyzy/p/4674956.html