• 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就可以操作数据库啦

  • 相关阅读:
    部署asp.net出现了问题
    给中国学生的第三封信[转载:李开复]
    给中国学生的第四封信:[转载:李开复]
    GMAIL DRIVE 提供邮箱一样大小的硬盘
    天气凉了,好舒服
    Asp.net与SQL一起打包部署安装
    无刷新联动下拉菜单(DotTextWeb版)
    我的主界面
    DataList绑定时控制字符串长度
    给中国学生的第一封信 [转载:李开复]
  • 原文地址:https://www.cnblogs.com/yfyzy/p/4674956.html
Copyright © 2020-2023  润新知