• 初学hibernate框架


      今天初次学习了hibernate,学习了hibernate的一些原理性知识。hibernate是基于ORM的持久层框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。ORM(Object Relation Map)即对象关系映射,其映射方式有两种:①注解映射,②xml配置文件映射,其中第一种方式比较简单,但是耦合对要高,第二种方式虽然要复杂一点但是耦合度相对低了很多,因为我们开发系统都追求高内聚、低耦合,所以第二种方式较常用。

      使用hibernate要做到“三拷三配、六个准备,七个步骤”,这是口诀。

      三拷三配、六个准备:三拷是指拷JDBC驱动包、hibernate开发包、log4j包,三配是指配置pojo类、配置类与数据库表之间的映射、配置总配置文件(用于数据库连接的)。

      首先讲三拷三配、六个准备,拷JDBC驱动包不用多讲,因为hibernate也是基于JDBC的,只是对其进行了封装,所以JDBC驱动包必不可少。既然是使用hibernate,那hibernate开发包也必不可少,用来提供各种类的。log4j包用来记录日志信息的,这个也是非常有用的,因为以后做的系统都要发布到服务器上面去的,你不可能每时每刻都守在服务器旁边看有没有出问题,有了日志就可以省很多事了。只要定期去查看日志文件就好了,所有问题都会记录在日志文件中。                  三配中配置pojo也不用多讲,跟以前差不多,一个表对应一个pojo类就ok了。因为hibernate是基于对象关系映射的框架,所以pojo类对象与关系表的映射配置必不可少,需要配置三个东西:表和类的映射、属性和字段的映射、表和表的关系(如果两个表有主外键关系的话,这里只有一个表所以不用配置),配置代码如下:

    pojo中Student类

     1 package com.pojo;
     2 
     3 import java.io.Serializable;
     4 import java.util.Date;
     5 
     6 public class Student implements Serializable {
     7     private int sid;
     8     private String sname;
     9     private Date sage;
    10     public int getSid() {
    11         return sid;
    12     }
    13     public void setSid(int sid) {
    14         this.sid = sid;
    15     }
    16     public String getSname() {
    17         return sname;
    18     }
    19     public void setSname(String sname) {
    20         this.sname = sname;
    21     }
    22     public Date getSage() {
    23         return sage;
    24     }
    25     public void setSage(Date sage) {
    26         this.sage = sage;
    27     }
    28     
    29 }

    Student类与student表的映射student.hbm.xml代码:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     4 
     5 
     6 <hibernate-mapping>
     7     <!-- 表与类的映射 -->
     8     <class name="com.pojo.Student" table="student">
     9         <!-- 字段与属性映射之主键映射 -->
    10         <id name="sid" column="sid">
    11             <generator class="native"></generator>
    12         </id>
    13         <!-- 字段与属性映射 -->
    14         <property name="sname" column="sname"></property>
    15         <property name="sage" column="sage"></property>
    16     </class>
    17 </hibernate-mapping>

    最后是总配置文件hibernate.cfg.xml的配置(有可视化界面操作的),该配置是用于建立数据库连接的,其代码如下:

     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 
     6 <hibernate-configuration>
     7 <session-factory>
     8     <property name="myeclipse.connection.profile">Mysql</property>
     9     <property name="connection.url">
    10         jdbc:mysql://127.0.0.1:3306/test
    11     </property>
    12     <property name="connection.username">root</property>
    13     <property name="connection.password">admin</property>
    14     <property name="connection.driver_class">
    15         com.mysql.jdbc.Driver
    16     </property>
    17     <property name="dialect">
    18         org.hibernate.dialect.MySQLDialect
    19     </property>
    20     <property name="show_sql">true</property>
    21     <mapping resource="com/pojo/student.hbm.xml" />
    22 </session-factory>
    23 </hibernate-configuration>

    到此为止准备工作已经完成了,接下来就是操纵数据库了。操作数据库有七个步骤:

      ①读取配置文件

      ②创建session工厂

      ③打开session

      ④开始事务:hibernate中增删改一定要用事务,查询可以不用

      ⑤处理事务,对数据表的增(save)、删(delete)、改(update)

      ⑥提交事务或者回滚事务

      ⑦关闭session。

    下面是对表student插入数据的一个例子:

     1 package com.test;
     2 
     3 
     4 
     5 import java.sql.Date;
     6 
     7 import org.hibernate.Session;
     8 import org.hibernate.SessionFactory;
     9 import org.hibernate.Transaction;
    10 import org.hibernate.cfg.Configuration;
    11 
    12 import com.pojo.Student;
    13 
    14 public class 插入数据 {
    15 
    16     /**
    17      * @param args
    18      */
    19     public static void main(String[] args) {
    20         //1.读取配置文件
    21         Configuration cfg = new Configuration().configure();
    22         
    23         //2.创建session工厂
    24         SessionFactory  factory = cfg.buildSessionFactory();
    25         
    26         //3.打开session
    27         Session session = factory.openSession();
    28         
    29         //4.新建事务:hibernate中增删改一定要用事务,查询可以不用
    30         Transaction tr = session.beginTransaction();
    31         
    32         try {
    33             //5.处理事务
    34             Student s = new Student();
    35             s.setSname("xinxin");
    36             s.setSage(Date.valueOf("1992-10-09"));
    37             session.save(s);
    38             //6.提交事务
    39             tr.commit();
    40         } catch (Exception e) {
    41             //6.出现问题,事务回滚
    42             tr.rollback();
    43         }
    44         //7.关闭会话
    45         session.close();
    46     }
    47 
    48 }

    下面是对查询表student的例子:

     1 package com.test;
     2 
     3 import java.util.List;
     4 
     5 import org.hibernate.Query;
     6 import org.hibernate.Session;
     7 import org.hibernate.SessionFactory;
     8 import org.hibernate.cfg.Configuration;
     9 
    10 import com.pojo.Student;
    11 
    12 public class 查询所有 {
    13 
    14     /**
    15      * @param args
    16      */
    17     public static void main(String[] args) {
    18         //读取配置文件
    19         Configuration cfg = new Configuration().configure();
    20         //创建session工厂
    21         SessionFactory factory = cfg.buildSessionFactory();
    22         //打开session
    23         Session session = factory.openSession();
    24         //批量查询用HQL(表名改类名,字段名改属性名)
    25         Query query = session.createQuery("from Student where sid=?");
    26         //这里给问号赋值时是从0开始的
    27         query.setInteger(0, 2);
    28         List<Student> list = query.list();
    29         for (Student student : list) {
    30             System.out.println(student.getSname());
    31         }
    32         session.close();
    33     }
    34 
    35 }

    查询数据如果是根据主键查找一条记录的时候可以用session的get()方法,查询多条记录则必须用HQL(Hibernate Query Language),HQL和SQL语句差不多,只是将表明改为类名、将字段名改为属性名。

      

  • 相关阅读:
    42. Trapping Rain Water
    223. Rectangle Area
    645. Set Mismatch
    541. Reverse String II
    675. Cut Off Trees for Golf Event
    安装 VsCode 插件安装以及配置
    向上取整 向下取整 四舍五入 产生100以内随机数
    JS 判断是否为数字 数字型特殊值
    移动端初始配置,兼容不同浏览器的渲染内核
    Flex移动布局中单行和双行布局的区别以及使用
  • 原文地址:https://www.cnblogs.com/liuling/p/dffddsf.html
Copyright © 2020-2023  润新知