前言:博主在学到Spring的时候,要开始做项目了,突然觉得好像有点虚,之前学过的Hibernate框架的简单应用好像又忘记了。所以返回来,做个小笔记。


  简单来讲,Hibernate框架是利用对象-关系型数据映射(ORM)实现持久化(将数据存入可持久保存的存储设备中)。

  怎么用呢?这里有一个小demo,实现的是基于Annotation(注解)实现CRUD(增删改查)。可以简单分为三步。

  ① 创建实体类entity(这里的实体类就是UserInfo吧),实体类在此处的作用就跟JavaBean或POJO的作用一样,因为是用注解的方式底层直接设置映射,所以不需要映射文件啦。

  1. package com.hibernate.entity;
  2.  
  3. import javax.persistence.*;/**
  4. *
  5. * @author N.Y
  6. * 用户实体类
  7. *
  8. */
  9. //使用Entity注解,表示当前类为实体Bean,需要进行持久化
  10. @Entity
  11. //使用Table注解实现数据表user_info与持久化类UserInfo之间的映射,catalog指定数据库名,name指定表名
  12. @Table(name="user_info", catalog="student")
  13. public class UserInfo {
  14. private int id; //id
  15. private String userName; //用户名
  16. private String password; //密码
  17. private String intro; //自我介绍
  18.  
  19. //使用Id注解指定当前持久化类的ID标识属性
  20. @Id
  21. //使用@GeneratedValue注解指定逐渐生成策略为IDENTITY
  22. @GeneratedValue(strategy=GenerationType.IDENTITY)
  23. //使用Column注解指定当前属性所对应的数据表中的字段,name指定字段名
  24. //unique指定是否为唯一,nullable指定是否可为null,length指定字段长度
  25. @Column(name="id",unique=true,nullable=false)
  26. public int getId() {
  27. return id;
  28. }
  29. public void setId(int id) {
  30. this.id = id;
  31. }
  32.  
  33. @Column(name="userName", length=16, nullable=false)
  34. public String getUserName() {
  35. return userName;
  36. }
  37. public void setUserName(String userName) {
  38. this.userName = userName;
  39. }
  40.  
  41. @Column(name="password", length=16, nullable=false)
  42. public String getPassword() {
  43. return password;
  44. }
  45. public void setPassword(String password) {
  46. this.password = password;
  47. }
  48.  
  49. @Column(name="intro", length=16)
  50. public String getIntro() {
  51. return intro;
  52. }
  53. public void setIntro(String intro) {
  54. this.intro = intro;
  55. }
  56.  
  57. public UserInfo() {
  58.  
  59. }
  60. public UserInfo(String userName, String password) {
  61. this.userName = userName;
  62. this.password = password;
  63. }
  64. @Override
  65. public String toString() {
  66. return "UserInfo [id="+id+",userName="+userName+",password="+password+", intro"+intro;
  67. }
  68. }

  其中,主键生成策略是通过GenetationType指定的,可以使用@GeneratedValue来指定主键生成策略。

主键生成策略枚举值

说明

GenerationType.IDENTITY

该策略用于MySQL,特点是递增,在MySQL建表的时候需将主键指定为auto_increment属性。

GenerationType.AUTO

自动选择一个最适合底层数据库主键生成策略(就是系统帮你选),这个是默认项。

GenerationType.SEQUENCE

根据底层数据库的序列来生成主键,条件是数据库支持序列,MySQL不支持,但Oracle支持。

GenerationType.TABLE

使用一个特定的数据库表格来保存主键,框架通过表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

  ② 编写Hibernate的配置文件,该文件反映了持久化类(就上边儿的UserInfo)和数据库表的映射信息,像是数据库用户名啊、密码啊之类的,此处命名为hibernate.cfg.xml(注意,放在src文件夹下面就好),记得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. <hibernate-configuration>
  5. <session-factory>
  6. <!-- Hibernate连接的基本信息 -->
  7. <property name="connection.username">root</property>
  8. <property name="connection.password"></property>
  9. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  10. <property name="connection.url">jdbc:mysql:///student</property>
  11.  
  12. <!-- Hibernate方言 -->
  13. <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
  14. <!-- 是否打印SQL -->
  15. <property name="show_sql">true</property>
  16. <!-- 关联Hibernate的映射文件 -->
  17. <mapping class="com.hibernate.entity.UserInfo"/>
  18. </session-factory>
  19. </hibernate-configuration>

  至于这些属性的解释可以参考这篇文章:https://blog.csdn.net/tuke_tuke/article/details/49662601

 

  ③ 编写测试类

  1. package com.hibernate.test;
  2.  
  3. import org.hibernate.Session;
  4. import org.hibernate.SessionFactory;
  5. import org.hibernate.Transaction;
  6. import org.hibernate.cfg.Configuration;
  7. import org.junit.After;
  8. import org.junit.Before;
  9. import org.junit.Test;
  10.  
  11. import com.hibernate.entity.UserInfo;
  12.  
  13. public class HibernateTest {
  14. private SessionFactory sessionFactory;
  15. private Session session;
  16. private Transaction transaction;
  17. @Before
  18. public void init(){
  19. //加载hibernate.cfg.xml
  20. Configuration configuration = new Configuration().configure();
  21. //根据hibernate.cfg.xml配置,初始化SessionFactory
  22. sessionFactory = configuration.buildSessionFactory();
  23. //创建session开始事务
  24. session = sessionFactory.openSession();
  25. //通过session开始事务
  26. transaction = session.beginTransaction();
  27. }
  28. //添加数据
  29. @Test
  30. public void testSaveUserInfo(){
  31. try{
  32. //初始化UserInfo类
  33. UserInfo ui = new UserInfo("hibUser1","123456");
  34. UserInfo u = new UserInfo("hibUser2","123456");
  35. //保存
  36. session.save(ui);
  37. session.save(u);
  38. }catch(Exception e){
  39. e.printStackTrace();
  40. }
  41.  
  42. }
  43. @Test
  44. public void testGetUserInfo(){
  45. //从数据表user_info中加载编号id为1的用户对象
  46. UserInfo ui = (UserInfo)session.get(UserInfo.class, 4);
  47. //在控制台输出用户对象信息
  48. System.out.println(ui.toString());
  49. }
  50. @Test
  51. public void testLoadUserInfo(){
  52. //从数据表user_info中加载编号id为1的用户对象
  53. UserInfo ui = (UserInfo)session.load(UserInfo.class, 4);
  54. System.out.println(ui.toString());
  55. }
  56. @Test
  57. public void testDeleteUserInfo(){
  58. //从数据表user_info中加载编号id为4的用户对象
  59. UserInfo ui = (UserInfo)session.get(UserInfo.class, 8);
  60. //删除对象
  61. session.delete(ui);
  62. }
  63. @Test
  64. public void testUpdateUserInfo(){
  65. //从数据表user_info中加载编号id为1的用户对象
  66. UserInfo ui = (UserInfo)session.get(UserInfo.class, 7);
  67. //修改数据
  68. ui.setUserName("miaoyang");
  69. //更新对象
  70. session.update(ui);
  71. }
  72. @After
  73. public void destory(){
  74. //提交事务
  75. transaction.commit();
  76. //关闭session
  77. session.close();
  78. //关闭sessionFactory
  79. sessionFactory.close();
  80. }
  81. }

  在这儿就不得不提Hibernate的基本执行流程啦。盯着这串代码哈。

  1. public void init(){
  2. //加载hibernate.cfg.xml
  3. Configuration configuration = new Configuration().configure();
  4. //根据hibernate.cfg.xml配置,初始化SessionFactory
  5. sessionFactory = configuration.buildSessionFactory();
  6. //创建session开始事务
  7. session = sessionFactory.openSession();
  8. //通过session开始事务
  9. transaction = session.beginTransaction();
  10. }......
  1. public void destory(){
  2. //提交事务
  3. transaction.commit();
  4. //关闭session
  5. session.close();
  6. //关闭sessionFactory
  7. sessionFactory.close();
  8. }

  1、Configuration

  创建一个Configuration类的实例,以读取并解析配置文件(hibernate.cfg.xml),一个Configuration实例代表Hibernate所有的Java类到SQL数据库映射的集合。

  2、SessionFactory

  创建SessionFactory,以读取并解析映射信息,将Configuration对象中的所有配置信息复制到SessionFactory的缓存中。

  3、Session

  打开Session,让SessionFactory提供链接,并且调用Session接口提供的各种方法完成数据库操作。

  4、Transcation

  打开一个事务,提交事务之后就关闭Session。

  如果想要更加深入的了解的话,可以看下这篇文章的介绍哦:http://blog.51cto.com/wuwen2011/1537972。

  ④ 其实最最后面还少了一步的,就是数据库的创建。

  1. CREATE DATABASE /*!32312 IF NOT EXISTS*/`student` /*!40100 DEFAULT CHARACTER SET utf8 */;
  2.  
  3. USE `student`;
  4.  
  5. /*Table structure for table `user_info` */
  6.  
  7. DROP TABLE IF EXISTS `user_info`;
  8.  
  9. CREATE TABLE `user_info` (
  10. `id` ) NOT NULL AUTO_INCREMENT,
  11. `userName` ) NOT NULL,
  12. `password` ) NOT NULL,
  13. `intro` ) DEFAULT NULL,
  14. UNIQUE KEY `id` (`id`)
  15. ) ENGINE DEFAULT CHARSET=utf8;

   另外哦,这些是需要的包:

 云盘地址:https://pan.baidu.com/s/1pjLgilqioH9Y9_EeNCCZlQ 密码:oc6y

   以上就是Hibernate的简单应用啦,关于Hibernate的应用还有映射,所以大家加油啦,虽然SSH已经用了很久了,但是了解了Hibernate,MyBatis就会相对比较容易上手。

Hibernate学习之简单应用的更多相关文章

  1. Hibernate学习之——搭建log4j日志环境

    昨天讲了Hibernate开发环境的搭建以及实现一个Hibernate的基础示例,但是你会发现运行输出只有sql语句,很多输出信息都看不见.这是因为用到的是slf4j-nop-1.6.1.jar的实现 ...

  2. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  3. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  4. 我的hibernate学习记录(二)

    通过上一篇文章我的hibernate学习记录(一)基本上的入门了hibernate,但是,里面还有还多东西是通过迷迷糊糊的记忆,或者说copy直接弄进去的,所以这篇文章就需要对上篇的一些文件.对象进行 ...

  5. Hibernate入门2.简单的项目开发实例

    Hibernate入门2.简单的项目开发实例 这一节通过一个简单的项目学习Hibernate项目的配置 代码下载 : 链接: http://pan.baidu.com/s/1zlgjl 密码: p34 ...

  6. 关于Hibernate的一个简单小程序

    本人根据视频学习了一下三大框架中比较简单的一个Hibernate,并简单完成了一个运用Hibernate的小程序 Hibernate是一个简化web程序Dao层的一个框架,应用他,可以完全脱离sql语 ...

  7. Hibernate学习---缓存机制

    前言:这些天学习效率比较慢,可能是手头的事情比较多,所以学习进度比较慢. 在之前的Hibernate学习中,我们无论是CURD,对单表查询还是检索优化,我们好像都离不开session,session我 ...

  8. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  9. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

随机推荐

  1. 使用Bootstrap模态框实现增删改查功能

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 本文实现的是使用模态框实现简单的增删改查的功能. ...

  2. 【eclipse插件开发实战】Eclipse插件开发7——插件发布jar包

    Eclipse插件开发7--插件发布jar包 最省事的方式就是直接导出jar包,然后放到eclipse的plugins目录下,重启eclipse即可. step1: 对需要打包的插件工程右击→导出(E ...

  3. 【Linux学习】Linux文件系统1--文件系统的目录结构

    Linux文件系统1--文件系统的目录结构 一.linux文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 1.普通文件:如文本文件. ...

  4. jQuery 学习笔记(一)jQuery 语法

    jQuery 是一个 JavaScript 库,极大地简化了 JavaScript 编程,很容易学习 添加 jQuery 库 <head> <script type="te ...

  5. iOS 使用cocoapods导入ReactiveCocoa和ReactiveObjC框架

    cocoapods使用 ReactiveObjC -- 对应的是RAC的OC版本,最新3.1.0版本. ReactiveCocoa--对应的是RAC的swift版本,最新7.1.0版本. 1.纯OC项 ...

  6. iOS 中使用 MJExtension 遇到 关键字(id) 怎么办

    MJExtension 是个人比较喜欢用的json 转model 的软件,当遇到系统关键字时就会出现崩溃,解决方式如下 1.建立Modle 解析类,服务返回数据中带有id,这个时候用字典转Mode(m ...

  7. bzoj 4873: [Shoi2017]寿司餐厅【最大权闭合子图】

    有正负收益,考虑最小割 因为有依赖关系,所以考虑最大权闭合子图 首先对每个d[i][j]建个点,正权连(s,id[i][j],d[i][j])并加到ans上,负权连(id[i][j],t,-d[i][ ...

  8. 【渗透测试】如何使用burpsuite对特殊密码进行爆破

    爆破是渗透测试中必不可少的一部分,对于没有太大价值可利用的漏洞或是业务只有一个登陆页面时,爆破更是我们的最合适的选择.那么在爆破时,抛去目标系统对爆破频率的限制,如果遇到较为复杂的密码,该如何顺利进行 ...

  9. xml中运用js和jq

    1.点击事件参数为this 一般<a>标签中会使用href和onclick两种方式来进行进行页面跳转或执行动作,但是小编一般都会使用onclick来进行执行Ajax函数进行跳转,并同时使用 ...

  10. mysql 安装和修改编码(utf8mb4)

    安装mysql(linux 我的环境centos 7) 安装MySQL官方的Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-com ...