码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate笔记1

时间:2017-08-22 10:59:35      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:prim   mod   hit   mail   factor   log   file   update   open   

一.Hibernate概述
Hibernate是一个实现了ORM思想的,开源的,轻量级的,内部封装了JDBC操作的持久层框架.
     实现了ORM思想的:不再重点关注sql语句的编写
     开源的:开放源代码的
     轻量级的:消耗的资源少(内存),依赖的jar包比较少
注:ORM思想(O:object R:relation M:mapping--对象关系映射)   
     目的:操作实体类就相当于操作数据库表
     条件:1.创建实体类和表的映射关系
           2.创建属性和字段的映射关系

二.环境搭建
     1.导入jar包:必选/log4j/mysql驱动包
     2.编写映射关系文件:实体类.hbm.xml,放在实体类包下
         映射关系文件内容:
             (1)实体类与sql表的关系
             (2)实体类属性与sql表字段的关系
         模板:
       

  1  <?xml version="1.0" encoding="UTF-8"?>
  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          <hibernate-mapping>
  6              <!-- 1.创建实体类与表的映射关系 -->
  7              <!--
  8                 lazy:配置懒加载
  9                     true:使用懒加载(使用时才发送sql语句);
 10                      false:立即加载;
 11               -->
 12          <class name="linkman.Linkman" table="cst_linkman" lazy="false">
 13              <!-- 2.创建属性与字段值的映射关系 -->
 14                  <!--2.1配置主键  -->
 15                  <id name="lkmId" column="lkm_id">
 16                      <generator class="native"></generator>
 17                  </id>
 18                  <!--2.2其它属性与字段  -->
 19                  <property name="lkmName" column="lkm_name"></property>
 20                  <property name="lkmGender" column="lkm_gender"></property>
 21                  <property name="lkmPhone" column="lkm_phone"></property>
 22                  <property name="lkmMobile" column="lkm_mobile"></property>
 23                  <property name="lkmEmail" column="lkm_email"></property>
 24                  <property name="lkmPosition" column="lkm_position"></property>
 25                  <property name="lkmMemo" column="lkm_memo"></property>
 26          </class>
 27          </hibernate-mapping>

    3.编写hibernate核心配置文件:hibernate.cfg.xml,放在src包下
         核心配置文件内容(顺序不能变):
             (1)数据库配置信息;
             (2)hibernate基本配置信息;
             (3)映射关系文件的位置
         模板:
        

  1 <?xml version="1.0" encoding="UTF-8"?>
  2          <!DOCTYPE hibernate-configuration PUBLIC
  3              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4              "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5          <hibernate-configuration>
  6              <session-factory>
  7                      <!--数据库配置  -->
  8                      <!--
  9                          hibernate.hbm2ddl.auto : hibernate生成数据定义语言
 10                             数据库的建表语句,使用hibernate自动创建数据库表
 11                                 create-drop  :程序开始的时候创建表(有表删表,再创建,没表直接创建),程序结束的时候删除表
 12                                 create           : 有表现删除再创建表,没表直接创建
 13                                 update           :没表创建表,有表的话如果映射关系发生了变化,更新表
 14                                 validate       :不会创建表,验证映射文件的配置,如果映射文件配置发生了变化,抛出异常
 15                     -->
 16                  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
 17                  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 18                  <property name="hibernate.connection.url">jdbc:mysql:///cst_linkman</property>
 19                  <property name="hibernate.connection.username">root</property>
 20                  <property name="hibernate.connection.password">root</property>
 21                      <!--hibernate基本配置  -->
 22                  <property name="hibernate.hbm2ddl.auto">update</property>
 23                  <property name="hibernate.show_sql">true</property>
 24                  <property name="hibernate.format_sql">true</property>
 25                      <!--指定映射文件位置  -->
 26                  <mapping resource="linkman/Linkman.hbm.xml"/>
 27             </session-factory>
 28          </hibernate-configuration>

附:关于使用Eclipse软件编写以上两种配置文件的自动提示相关问题:
1.配置Eclipse:
     菜单栏:window-->preferences-->XML-->Catalog,选中User Specified Entries,单击Add,选择File System,选中dtd文件(hibernate-configuration-3.0.dtd或者hibernate-mapping-3.0.dtd)的路径;Key Type选择uri,将对应的dtd文件中的uri(http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd或者http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd)复制进去即可;重启Eclipse,输入标签<>即可自动提示;
2.关于标签内属性的提示,需按快捷键alt+/

三.Hibernate使用步骤:七步
     1.加载配置文件--Configuration
     2.构建sessionFactory--cfg.buildSessionFactory
     3.打开新的session--factory.openSession
     4.开启事务--tx.beginTransaction
     5.CRUD
     6.提交事务--tx.commit
     7.释放资源--session.close()/factory.close()(若使用工具类,factory不能释放)
工具类:HibernateUtils
   

  1  //使用静态代码块创建factory,仅在启动时创建一次,提高效率
  2     import org.hibernate.Session;
  3      import org.hibernate.SessionFactory;
  4      import org.hibernate.cfg.Configuration;
  5      public class HibernateUtils {
  6          private static SessionFactory factory;
  7          static {
  8              // 加载配置文件
  9             Configuration cfg = new Configuration();
 10              cfg.configure();
 11              // 构建sessionFactory
 12              factory = cfg.buildSessionFactory();
 13          }
 14          public static Session getSession() {
 15              return factory.openSession();
 16          }
 17      }


============================================================
举例:
1.创建sql表
2.创建实体类
3.编写映射关系文件:Linkman.hbm.xml
4.编写hibernate配置文件:hibernate.cfg.xml
5.编写工具类
6.编写执行代码
------------------------------------------------------------
1.创建sql表

  1 CREATE TABLE `cst_linkman` (
  2    `lkm_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT ‘联系人编号(主键)‘,
  3    `lkm_name` varchar(16) DEFAULT NULL COMMENT ‘联系人姓名‘,
  4    `lkm_gender` varchar(10) DEFAULT NULL COMMENT ‘联系人性别‘,
  5    `lkm_phone` varchar(16) DEFAULT NULL COMMENT ‘联系人办公电话‘,
  6    `lkm_mobile` varchar(16) DEFAULT NULL COMMENT ‘联系人手机‘,
  7    `lkm_email` varchar(64) DEFAULT NULL COMMENT ‘联系人邮箱‘,
  8    `lkm_position` varchar(16) DEFAULT NULL COMMENT ‘联系人职位‘,
  9    `lkm_memo` varchar(512) DEFAULT NULL COMMENT ‘联系人备注‘,
 10    PRIMARY KEY (`lkm_id`)
 11  ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

2.创建实体类

  1 public class Linkman {
  2      private Long lkmId;// 联系人编号(主键)
  3      private String lkmName;// 姓名
  4     private String lkmGender;// 性别
  5     private String lkmPhone;// 办 公电话
  6     private String lkmMobile;// 手机
  7     private String lkmEmail;// 邮箱
  8     private String lkmPosition;// 职位
  9     private String lkmMemo;// 备注
 10     // getter/setter
 11      public Long getLkmId() {
 12          return lkmId;
 13      }
 14 
 15     public void setLkmId(Long lkmId) {
 16          this.lkmId = lkmId;
 17      }
 18 
 19     public String getLkmName() {
 20          return lkmName;
 21      }
 22 
 23     public void setLkmName(String lkmName) {
 24         this.lkmName = lkmName;
 25      }
 26 
 27     public String getLkmGender() {
 28          return lkmGender;
 29      }
 30 
 31     public void setLkmGender(String lkmGender) {
 32          this.lkmGender = lkmGender;
 33      }
 34 
 35     public String getLkmPhone() {
 36          return lkmPhone;
 37      }
 38 
 39     public void setLkmPhone(String lkmPhone) {
 40          this.lkmPhone = lkmPhone;
 41      }
 42 
 43     public String getLkmMobile() {
 44          return lkmMobile;
 45      }
 46 
 47     public void setLkmMobile(String lkmMobile) {
 48          this.lkmMobile = lkmMobile;
 49      }
 50 
 51     public String getLkmEmail() {
 52          return lkmEmail;
 53      }
 54 
 55     public void setLkmEmail(String lkmEmail) {
 56          this.lkmEmail = lkmEmail;
 57      }
 58 
 59     public String getLkmPosition() {
 60          return lkmPosition;
 61      }
 62 
 63     public void setLkmPosition(String lkmPosition) {
 64          this.lkmPosition = lkmPosition;
 65      }
 66 
 67     public String getLkmMemo() {
 68          return lkmMemo;
 69      }
 70 
 71     public void setLkmMemo(String lkmMemo) {
 72          this.lkmMemo = lkmMemo;
 73      }
 74 
 75     // toString
 76      @Override
 77      public String toString() {
 78          return "Linkman [lkmId=" + lkmId + ", lkmName=" + lkmName + ", lkmGender=" + lkmGender + ", lkmPhone="
 79                  + lkmPhone + ", lkmMobile=" + lkmMobile + ", lkmEmail=" + lkmEmail + ", lkmPosition=" + lkmPosition
 80                  + ", lkmMemo=" + lkmMemo + "]";
 81      }
 82 
 83 }
 84 


3.编写映射关系文件:Linkman.hbm.xml--放在实体类所在包下

  1 <?xml version="1.0" encoding="UTF-8"?>
  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>
  7  <!-- 1.创建实体类与表的映射关系 -->
  8  <class name="linkman.Linkman" table="cst_linkman">
  9      <!-- 2.创建属性与字段值的映射关系 -->
 10          <!--2.1配置主键  -->
 11          <id name="lkmId" column="lkm_id">
 12              <generator class="native"></generator>
 13          </id>
 14          <!--2.2其它属性与字段  -->
 15          <property name="lkmName" column="lkm_name"></property>
 16          <property name="lkmGender" column="lkm_gender"></property>
 17          <property name="lkmPhone" column="lkm_phone"></property>
 18          <property name="lkmMobile" column="lkm_mobile"></property>
 19          <property name="lkmEmail" column="lkm_email"></property>
 20          <property name="lkmPosition" column="lkm_position"></property>
 21          <property name="lkmMemo" column="lkm_memo"></property>
 22  </class>
 23  </hibernate-mapping>


4.编写hibernate配置文件:hibernate.cfg.xml--放在src下

  1 <?xml version="1.0" encoding="UTF-8"?>
  2  <!DOCTYPE hibernate-configuration PUBLIC
  3      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4      "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5  <hibernate-configuration>
  6      <session-factory>
  7          <!--数据库配置  -->
  8          <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  9          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 10          <property name="hibernate.connection.url">jdbc:mysql:///cst_linkman</property>
 11          <property name="hibernate.connection.username">root</property>
 12          <property name="hibernate.connection.password">root</property>
 13              <!--hibernate基本配置  -->
 14          <property name="hibernate.hbm2ddl.auto">update</property>
 15          <property name="hibernate.show_sql">true</property>
 16          <property name="hibernate.format_sql">true</property>
 17              <!--指定映射文件位置  -->
 18          <mapping resource="linkman/Linkman.hbm.xml"/>
 19      </session-factory>
 20  </hibernate-configuration>

5.编写工具类

  1 import org.hibernate.Session;
  2  import org.hibernate.SessionFactory;
  3  import org.hibernate.cfg.Configuration;
  4 
  5 public class HibernateUtils {
  6      private static SessionFactory factory;
  7 
  8     static {
  9          // 加载配置文件
 10         Configuration cfg = new Configuration();
 11          cfg.configure();
 12          // 构建sessionFactory
 13          factory = cfg.buildSessionFactory();
 14      }
 15 
 16     public static Session getSession() {
 17          return factory.openSession();
 18      }
 19 
 20 }
 21 


6.编写执行代码--增删改

  1 package demo;
  2 
  3 import org.hibernate.Session;
  4  import org.hibernate.Transaction;
  5  import org.junit.Test;
  6 
  7 import linkman.Linkman;
  8  import utils.HibernateUtils;
  9 
 10 public class Demo02 {
 11          // 增加
 12     @Test
 13      public void add() {
 14          // 利用工具类获取session
 15          Session session = HibernateUtils.getSession();
 16          // 开启事务
 17         Transaction tx = session.beginTransaction();
 18          // crud/
 19          Linkman man = new Linkman();
 20          man.setLkmName("Jack");
 21          session.save(man);
 22          // 提交事务
 23         tx.commit();
 24          // 释放资源
 25         session.close();
 26 
 27     }
 28 
 29         // 修改id=2的名字为rose,id一定要正确,否则报空指针
 30     @Test
 31      public void modify() {
 32          // 获取session
 33          Session session = HibernateUtils.getSession();
 34          // 开启事务
 35         Transaction tx = session.beginTransaction();
 36          // 修改
 37         Linkman man = session.get(Linkman.class, 2L);
 38          man.setLkmName("Rose");
 39          // 提交事务
 40         tx.commit();
 41          // 释放资源
 42         session.close();
 43      }
 44 
 45     //删除
 46     @Test
 47      public void del() {
 48          // 获取session
 49          Session session = HibernateUtils.getSession();
 50          // 开启事务
 51         Transaction tx = session.beginTransaction();
 52          // crud-del
 53          Linkman man = session.get(Linkman.class, 2L);
 54          session.delete(man);
 55          // 提交事务
 56         tx.commit();
 57          // 释放
 58         session.close();
 59      }
 60  }
 61 

Hibernate笔记1

标签:prim   mod   hit   mail   factor   log   file   update   open   

原文地址:http://www.cnblogs.com/huguangqin/p/7409876.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!