Hibernate初探

  Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。

  今天我们就一起对Hibernate的应用初步进行一下学习。

  首先公欲善其事必先利其器,为了更方便我们书写Hibernate的配置文件,我们这里需要为我们的eclipse安装一个Hibernate Tools的插件,这样就可以很方便的让我们完成Hibernate的配置文件编写。

  这里我采用的是在线安装:

1.启动eclipse
2.选择Help > Install New Software...>
3.添加如下地址:http://download.jboss.org/jbosstools/updates/stable/helios/
4.选择性安装:hibernate tools在All Jboss tools节点下面

  到这里我们的Hibernate Tools就算安装好了,接下来我们就可以通过eclipse很方便的生成相应的配置文件

  接下来我们创建一个Java工程,然后将我们的下载好的hibernate JAR包文件导入,这里个人建议大家将这些JAR包添加为一个新的User Liberary,方便以后我们在其他项目中调用,这里我们现在只是为了初步探究Hibernate的使用,这里我们只需要将必要的JAR包文件导入即可,

解压我们下载的Hibernate压缩包,里面有一个lib文件夹,顾名思义,这就是我们会用的JAR包文件,文件里面有很多子目录,我们现在只需要将required文件夹下的JAR包文件导入即可。

  导入过hibernate JAR包后,一定要记得导入我们的数据库驱动JAR包,还有就是为了方便我们测试,这里我使用的是Junit单元测试工具,需要一并导入相应的JAR包文件。

  导入后所有的JAR包文件后,我们就可以开始我们的代码编写了,首先我们需要创建一个Hibernate配置文件:hibernate.cfg.xml

  

  

  创建好我们的Hibernate的配置文件后,打开,添加数据库连接驱动地址+数据库连接用户名+数据库连接密码+数据库连接地址+数据库方言等等。

  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><!-- 数据库驱动地址 --><property name="connection.driver_class">org.gjt.mm.mysql.Driver</property><!-- 数据连接用户名 --><property name="connection.username">root</property><!-- 数据库连接密码 --><property name="connection.password">123456</property><!--设置数据库的连接url:jdbc:mysql://localhost/hibernate,其中localhost表示mysql服务器名称,此处为本机,hibernate是数据库名--><property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property><!-- 数据库方言 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- 控制台打印sql语句 --><property name="show_sql">true</property><!-- 控制台格式化输出sql语句 --><property name="format_sql">true</property><!-- 数据库生产策略 --><property name="hbm2ddl.auto">update</property><!-- 如果使用的是本地事务(jdbc事务) --><!-- <property name="current_session_context_class">thread</property> --><!-- 如果使用的是本地事务(JTA事务) --><!-- <property name="current_session_context_class">jta</property> --></session-factory>
</hibernate-configuration>

  有了Hibernate的配置文件接下来我们就要创建我们的实例对象和数据库映射文件xx.hbm.xml

  这里我通过创建学生对象和大家一起熟悉这个过程:

/*** 创建一个实体类* @author gaoshang*/
public class Student {//不带参数的构造方法public Student(){}private int id;//学生Iprivate String name;//学生姓名private int birthday;//学生出生年月private String home;//学生住宅private Date joinTime;//学生入学时间public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getBirthday() {return birthday;}public void setBirthday(int birthday) {this.birthday = birthday;}public String getHome() {return home;}public void setHome(String home) {this.home = home;}public Date getJoinTime() {return joinTime;}public void setJoinTime(Date joinTime) {this.joinTime = joinTime;}//学生对象的ToString方法public String toString() {return "Student [id=" + id + ", name=" + name + ", birthday=" + birthday + ", home=" + home + ", joinTime="+ joinTime + "]";}//带参数的构造方法public Student(int id, String name, int birthday, String home, Date joinTime) {super();this.id = id;this.name = name;this.birthday = birthday;this.home = home;this.joinTime = joinTime;}}

  接下来创建我们的数据库映射文件xx.hbm.xml:

  

  点击next,选择我们的实例对象,点击finash完成。最后eclispe就可以帮我们的生产一个Student学生类对于的数据库映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-2-15 14:17:57 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping><class name="hibernate.Student" table="STUDENT"><id name="id" type="int"><column name="ID" /><generator class="assigned" /><!-- generator:属性的生成策略 --><!-- assigned:通过赋值的形式进行设置 --><!-- native:自动生成,从0或1开始编号 --><!-- uuid:使用uuid进行生成 --></id><property name="name" type="java.util.String" length="10"><column name="NAME" /></property><property name="birthday" type="int"><column name="BIRTHDAY" /></property><property name="home" type="java.util.String" length="10"><column name="HOME" /></property><property name="joinTime" type="java.util.Date"><column name="JOINTIME" /></property></class>
</hibernate-mapping>

  到这里我们的Hibernate配置就算完成了。下面我们来通过使用Junit单元测试工具进行持久化操作。

  

package hibernate;import java.util.Date;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;/*** Junit做单元测试时,测试方法不能使用private修饰,否则会报method initializationerror not found* 解决方法:http://www.cnblogs.com/sxdcgaq8080/p/5649819.html* @author gaoshang*/
public class StudentTest {private SessionFactory sessionFactory;private Session session;private Transaction transaction;@Beforepublic void init(){System.out.println("Junit测试配置");/*** hibernate4.x创建SessionFactory*///创建配置对象//Configuration configraction = new Configuration().configure();//创建会话工厂对象回调//ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configraction.getProperties()).buildServiceRegistry();//创建会话工厂//sessionFactory = configraction.buildSessionFactory(serviceRegistry);/*** hibernate5.x创建SessionFactory*///创建会话工厂对象回调final StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();// 使用hibernate.cfg.xml进行配置  //创建会话工程sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();//创建session对象session = sessionFactory.openSession();//创建事物对象transaction = session.beginTransaction();}@Afterpublic void close(){System.out.println("Junit测试完成");if(transaction!=null)transaction.commit();//提交事物,hibernate是事物驱动的,只有提交事物才能完成持久化操作if(session!=null)session.close();//关闭session对象if(sessionFactory!=null)sessionFactory.close();//关闭sessionFactory对象
    }@Testpublic void run(){System.out.println("Junit测试");Student s = new Student(1, "hpu", 24, "河南", new Date());//创建学生对象session.save(s);//提交持久化操作
    }}

  最后在奉上一个对学生对象进行增删改查的完整操作测试类:

package hibernate;import java.util.Date;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class StudentManagerTest {private SessionFactory sessionFactory;private Session session;private Transaction transaction;@Afterpublic void close(){if(transaction!=null)transaction.commit();if(session!=null)session.close();if(sessionFactory!=null)sessionFactory.close();}@Beforepublic void init(){final StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();session = sessionFactory.openSession();transaction = session.beginTransaction();}@Testpublic void saveStudent(){Student s = new Student(1, "123", 45, "中国", new Date());session.save(s);}@Testpublic void updateStudent(){Student s = new Student(1, "123", 20, "china", new Date());session.update(s);}@Testpublic void delStudent(){Student s = new Student();s.setId(3);session.delete(s);}/*** get方法当对象不存在时返回NULL*/@Testpublic void getStudent(){System.out.println(session.get(Student.class, 6));}/*** load方法当对象不存在是报org.hibernate.ObjectNotFoundException*/@Testpublic void loadStudent(){System.out.println(session.load(Student.class, 5));}
}

  好了,到这里对于Hibernate的初探就和大家分享完毕,欢迎留言探讨一起学习。

转载于:https://www.cnblogs.com/AndroidJotting/p/6405970.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BIM入门实战】InfraWorks2018图文安装教程

Autodesk InfraWorks是易于使用的草图绘制工具,适用于土地规划师和基础设施设计师。AutodeskInfraWorks可以生成可视化的高级模型,而无需借助辅助,可以独立进行建模的BIM可视化软件。 InfraWorks2018软件预览: 双击安装包进行安装。 自解压中,等待即可。 点击【安装】。 点…

有点酷,使用 .NET MAUI 探索太空

设计 我准备用 .NET Maui 实现一个非常有意思的 "前往太空" 的程序。第一步&#xff0c;需要图片素材&#xff0c;我使用了 Aan Ragil 的一组非常棒的 Dribbble 素材图片。当然&#xff0c;你也可以在最下面的链接进行下载。实现 这个应用程序的完整源代码可以在 G…

实例讲解——系统登录

一&#xff0c;程序分析 首先使用参数的方式输入用户名和密码&#xff0c;所以&#xff0c;首先要判断输入参数的个数是否合法&#xff0c;如果不合法&#xff0c;则必须提示程序执行不对&#xff0c;并退出。 如果正确输入&#xff0c;则可以进行密码和用户名的验证&#xff0…

【Microsoft Office】Word 2019空格下划线不显示的解决办法

解决办法&#xff1a;点击【文件】→【选项】→【高级】选项卡→勾选【为尾部空格添加下划线(U)】&#xff0c;解决&#xff01;

1.安装

转自&#xff1a;http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html Mocha&#xff08;发音"摩卡"&#xff09;诞生于2011年&#xff0c;是现在最流行的JavaScript测试框架之一&#xff0c;在浏览器和Node环境都可以使用。 所谓"测试框…

SkiaSharp 之 WPF 自绘弹跳球(案例版)

熟悉下SkiaSharp的基础操作&#xff0c;这次搞个弹跳球效果&#xff0c;实现后&#xff0c;发现效果还真不错。大概效果如下:原理分析先是实现了网格效果&#xff0c;这个比较简单&#xff0c;直接横线&#xff0c;竖线&#xff0c;就OK了。另外一个就是随机一个圆形&#xff0…

Windows11 发布更新 Insider Preview Build 22000.100

微软今天凌晨向开发频道中的所有用户发布Windows 11 Insider Preview Build 22000.100&#xff01; 变化和改进 我们已经开始在 Dev Channel 中将 Chat 从 Microsoft Teams 推广到 Insiders。不是每个人都会马上看到&#xff0c;任务栏右下方的隐藏图标弹出窗口已更新&#x…

常见RGB格式

计算机世界中&#xff0c;最终对于颜色和画面的显示&#xff0c;更多的采用的是RGB模式&#xff0c;这里记录一下常见的RGB格式。任何计算机设备以及智能终端等&#xff0c;呈现在我们眼前的色彩实际上便是红绿蓝三基色不同的组合&#xff0c;RGB实际上就是三基色的组合&#x…

《ASP.NET Core 6框架揭秘》实例演示[04]:自定义依赖注入框架

ASP.NET Core框架建立在一个依赖注入框架之上&#xff0c;已注入的方式消费服务已经成为了ASP.NET Core基本的编程模式。为了使读者能够更好地理解原生的注入框架框架&#xff0c;我按照类似的设计创建了一个简易版本的依赖注入框架&#xff0c;并它命名为“Cat”。本篇提供的四…

【QGIS入门实战精品教程】4.8:QGIS如何下载SRTM数字高程模型DEM?

本文讲解QGIS中下载SRTM数字高程模型DEM,以黑龙江省塔河县为例。 图幅效果: 最终效果: 文章目录 1. 下载安装STRM Download插件2. 加载矢量数据,读取范围3. 下载STRM4. DEM拼接5. DEM裁剪1. 下载安装STRM Download插件 点击【插件】→【管理并安装插件】。 在搜索框中输入…

Win11 恢复设置Win10任务栏、快速启动栏及右键菜单(Win11 22000.100版本测试通过)

恢复方法 按下边路径添加 UndockingDisabled项&#xff0c;DWORD (32-bit)值为1&#xff1a; [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell\Update\Packages] "UndockingDisabled"dword:00000001显示效果 已知问题 开始按钮点击无反应&a…

vue vue-router vuex element-ui axios 写一个代理平台的学习笔记(十一)构思商品页面...

在写商品页面product.vue之前&#xff0c;我应该思考一下&#xff0c;商品页面要实现那些功能&#xff0c;该不如布局&#xff1f;要实现的功能 1、所有商品列表的展示2、分类商品的列表展示 3、搜索商品或得列表展示4、单一商品的详细页面5、商品列表分页功能6、还没想到的...…

【ArcGIS Pro微课1000例】0019:ArcGIS Pro从海洋的视角看世界---海洋投影(Spilhaus Projection)

从海洋的视角看世界: 世界地图大多是以陆地为主要载体,如果以海洋为主角,就需要使用一种海洋投影。该投影以Spilhaus博士的名称命名。ArcGIS Pro自2.5版本以来提供了Spilhaus Projection。 投影效果预览: 接下来演示ArcGIS Pro 2.8中海洋投影的转换方法: 1. 新建一个工程…

有人撸了个网页版win11,惊艳!

演示地址&#xff1a;https://win11.blueedge.me/ Github地址&#xff1a;https://github.com/blueedgetechno/windows11

Vue3+.NET6+C#10,最近优质前后端分离项目汇总

据说80%的WEB开发都是管理后台&#xff0c;一套开源的优秀管理后台开发模板堪称福音&#xff01;分享一套Vue3 Axios TS Vite Element Plus .NET 6 WebAPI JWT SqlSugar的前后端分离架构的通用管理后台源码数据库脚本&#xff0c;还有与之配套录制的一组视频教程&#xff0c;全…

C++ 对象的内 存布局(下)

原文地址&#xff1a;http://blog.csdn.net/haoel/article/details/3081385 (注:看本文的时候由于宿舍快断电了,来不及细看,所以怕自己忘记,先贴出来.不排除文章有错误,大家自己测试一下.) 重复继承 下面我们再来看看&#xff0c;发生重复继承的情况。所谓重复继承&#xff0c;…

【GIS风暴】一文彻底弄懂数字地形(DEM、DOM、TDOM、DSM)的区别与联系

在2021自然资源部发布的《实景三维中国建设技术大纲(2021版)》中,空间数据部分包括“数字高程模型(DEM)、数字表面模型(DSM)、数字正射影像(DOM)、真正射影像(TDOM)、倾斜摄影三维模型、激光点云等。” 那么到底什么是DEM、DOM、TDOM、DSM,它们之间又有什么用的区别…

什么是“异步 Request-Reply”模式?编程如何实现?

在某些情况下&#xff0c;WEB API 可能需要很长时间来处理请求&#xff0c;而客户端如果一直等待工作完成是不可行的&#xff0c;比如连接超时等。这时&#xff0c;可以使用“异步 Request-Reply 模式”。异步 Request-Reply 模式异步 Request-Reply 模式是指&#xff1a;在后端…

【测绘程序设计】Excel度分秒(° ‘ “)转换度(°)模板附代码超实用版

在实际工作中,无论是ArcGIS中,还是CASS中,作图时需要将GPS实测的经纬度度分秒( ’ ")坐标转换为度(),在前面的文章中介绍了C#中将度分秒转为度的转换程序,本文讲解在Excel中快速度分秒( ’ ")转换度(),提高工作效率。 文章目录 准备工作编写代码注意事…

IO扩展控件(System.IO.Abstractions)

刚看到这个Namespace的时候还以为是.Net Framework里自带的包&#xff0c;结果查了一圈无任何结果。果断上Github搜索&#xff0c;一击即中 https://github.com/tathamoddie/System.IO.Abstractions先翻译下开发者给出的简单说明&#xff0c;今后再慢慢使用类似于System.Web.Ab…