Hibernate初体验及简单错误排除代码详解

Hibernate是什么,有多少好处,想必查找这类博文的都知道,所以就不多说了。下面是我对Hibernate简单使用的一个小小的总结。与君(主要是刚入门的)共勉吧!

创建的顺序

  • 创建Hibernate的配置文件
  • 创建持久化的类
  • 创建对象-关系的映射文件
  • 通过HibernateAPI编写访问数据库的代码

关于详细的步骤

  • 导入Hibernate必须的jar包(hibernate-release-版本号.Final\lib\required)
  • 然后是导入MySQL的jdbc的驱动(mysql-connector-java-版本号-bin.jar)
  • 导入Junit4的jar包(junit4-版本号.jar)

Eclipse上进行环境的搭建

这里仅仅是将上面提到的那些必须的jar包进行相关的路径的配置。我这里是将Hibernate基础项目所需的jar包建立了一个自己的userlibrary。这样方便以后自己随意的导入。但是应该注意的是今后那些以来的文件的文职千万不要随意的变动了,否则可能会使得eclipse找不到。还有Mysql的JDBC的jar千万不要忘记了。另外Junit作为一个调试的使用也是必不可少的。

创建配置文件

步骤一:当Hibernate-tools 没有自动生成配置文件必须的dtd文档的时候,我们需要手动的进行添加。比如

hibernate-release-4.2.4.Final\project\hibernate-core\src\main\resources\org\hibernate\hibernate-mapping-3.0.dtd

在项目的src目录上点击鼠标右键,然后使用hibernate插件,点击Hibernate Configuration File(cfg.xml)即可。选择默认的就可以了。

步骤二:创建Hibernate的配置文件:

只要是连接过MySQL数据库,都是知道这些个字段的含义的,不再过多的叙述咯。

<property name="connection.username">root</property>
<property name="connection.password">mysql</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&characterEncoding=UTF-8</property>
<property name="connection.dialect">org.hibernate.dialect.MySQLDialect</property>

创建持久化类

举个简单的小例子咯。如下:

import java.util.Date;
/**
   * 学生类,设计原则要遵循javaBean的设计原则
   *
   * 1、共有的类 2、属性私有 3、属性使用setter和getter封装 4、提供龚鸥的不带参数的默认的构造方法
   *
   * @author Administrator
   *
   */
public class Students {
	private String sname;
	private int sid;
	private Date birthday;
	private String gender;
	private String adress;
	public Students() {
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public int getSid() {
		return sid;
	}
	public void setSid(int sid) {
		this.sid = sid;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getAdress() {
		return adress;
	}
	public void setAdress(String adress) {
		this.adress = adress;
	}
	public Students(String sname, int sid, Date birthday, String gender, String adress) {
		this.sname = sname;
		this.sid = sid;
		this.birthday = birthday;
		this.gender = gender;
		this.adress = adress;
	}
	@Override
	    public String toString() {
		return "Students [sname=" + sname + ", sid=" + sid + ", birthday=" + birthday + ", gender=" + gender
		          + ", adress=" + adress + "]";
	}
}

创建对象关系映射文件

同样使用插件帮助我们生成。在src目录下点击右键,new--others--hibernate,选择Hibernate XML Mapping file(hbm.xml)文件,找到我们要进行映射的学生类,然后选择默认的即可。

然后在刚才创建的hibernate.cfg.xml文件中添加一个mapping标签即可。如下

 <mapping resource="Students.hbm.xml" />

创建自己的测试用的数据库

这里我使用Navacat软件新建了一个字符集为UTF-8的数据库。名称为hibernate.

编写的第一个Hibernate的测试的小例子

- 使用Junit进行测试:
- @Test注解:表明这是一个测试方法,一般为void的无参的throws异常的方法。
- @Before注解:表明这是一个初始化方法,用于初始化一些信息。
- @After注解:表明这是一个释放资源的方法,用于收尾的工作。

点击项目名,右键选择创建一个source folder.作为我们的测试所用。我的为test。然后新建一个测试类就可以了。这里我们需要测试的是我们的Students类,所以创建了一个StudentsTest就行。

编写最后的内容,使用HibernateAPI来操作数据库

可见为如下代码:

import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class StudentsTest {
	private SessionFactory sessionFactory;
	private Session session;
	private Transaction transaction;
	@Before
	    public void init() {
		// 创建配置对象
		Configuration config = new Configuration().configure();
		// 创建服务注册对象
		ServiceRegistry serviceRegister = new ServiceRegistryBuilder().applySettings(config.getProperties())
		          .buildServiceRegistry();
		// 创建会化工厂对象
		sessionFactory = config.buildSessionFactory(serviceRegister);
		// 会话对象
		session = sessionFactory.openSession();
		// 开启事务
		transaction = session.beginTransaction();
	}
	@Test
	    public void testSaveStudents() {
		Students s = new Students(1, "张三", "男", new Date(), "DLUT");
		// 保存对象进入数据库
		session.save(s);
	}
	@After
	    public void destory() {
		// 先提交事务
		transaction.commit();
		session.close();
		sessionFactory.close();
	}
}

检验一下,实施的效果吧

我最后在测试方法上点击了一下,发现报错了。是org.hibernate.MappingException: Unknown Entity:Students。
然后我就看了看hibernate.cfg.xml文件,发现数据库的一切都是正确的啊。也没错。
就想不明白了,然后查了查网上的相似的错误。也没有发现正确的解决办法,最后灵光一闪,肯定是映射文件出错了。那么到底是哪个呢,就一个一个的排查吧。然后我就找到了错误的根源了,不是Student.hbm.xml的错误,而是hibernate.cfg.xml中忘记了添加mapping的标签。哈哈。这次,又运行了一下,成功了。

效果图如下:

总结

本文适合刚入门的Hibernate童鞋,所以并没有一些很复杂的配置啊,和其他额外的处理啊什么的。就是为了简单。

这里面使用到了Hibernate-tools插件,帮助我们干了不少活。省事也省心了。个人建议安装JBoss的这款,包含了不少的东西呢。

以上就是本文关于Hibernate初体验及简单错误排除代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • Hibernate迫切连接和普通连接的区别实例详解
  • hibernate通过session实现增删改查操作实例解析
  • 在已有spring的基础上集成hibernate的实例讲解
  • hibernate属性级别注解实例代码
  • Hibernate 修改数据的实例详解
  • JSP开发之hibernate之单向多对一关联的实例
  • hibernate4快速入门实例详解
  • Hibernate识别数据库特有字段实例详解
(0)

相关推荐

  • Hibernate迫切连接和普通连接的区别实例详解

    Hibernate 迫切连接和普通连接的区别 相关的介绍和解释在代码中已注释,大家可以参考. package com.baidu.test; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; i

  • hibernate通过session实现增删改查操作实例解析

    今天学习了一下如何通过hibernate来实现对数据库的增删改查,下面来简单介绍一下: 首先创建个Student类: package com.hibernate.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.T

  • Hibernate 修改数据的实例详解

    Hibernate 修改数据 1.用 HQL方式来更新 在 这里修改 Person 的name 和age 通过 id 标识 Session currentSession = H3Utils.getCurrentSession(); currentSession.beginTransaction(); //创建 HQL String hqlString = "update Person p set p.name=? , p.age=? where p.id=?"; //构建 Query

  • Hibernate识别数据库特有字段实例详解

    Hibernate识别数据库特有字段实例详解 前言: Hibernate已经为绝大多数常用的数据库数据类型提供了内置支持,但对于某些数据库的专属字段支持就不够好了. 这些特殊数据类型往往提供了比常规数据类型更好的数据表达能力,更符合我们的业务场景.比如PostgreSQL的Interval类型,可以非常方便的保存一个时间段的数据. 本文以添加Interval类型支持为例,说明为Hibernate添加特有数据类型支持的方法. Hibernate提供了丰富的数据类型支持,但对于部分数据库专有的数据类

  • JSP开发之hibernate之单向多对一关联的实例

    JSP开发之hibernate之单向多对一关联的实例 一对多的基础上来测试单向多对一的关联 hibernate多对一的关联关系定义: 和单向一对多不同的是:一对多是在意的一方的一方定义set集合,在映射文件中 <set name="" table=""> <key name="" /> <one to many class=" 多的一方的包加类名"/> </set> :单向多对一

  • hibernate4快速入门实例详解

    Hibernate是什么 Hibernate是一个轻量级的ORMapping框架 ORMapping原理(Object RelationalMapping) ORMapping基本对应规则: 1:类跟表相对应 2:类的属性跟表的字段相对应 3:类的实例与表中具体的一条记录相对应 4:一个类可以对应多个表,一个表也可以对应对个类 5:DB中的表可以没有主键,但是Object中必须设置主键字段 6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系 7:Object中属性的个数和名称可

  • 在已有spring的基础上集成hibernate的实例讲解

    1.导入hibernate的包和spring的包 hibernate3.hibernate-jpa-2.0-api-.必须的包,log4j,log4j配置文件 1.1 导入Spring的依赖包 1.2 导入log4j的依赖包 1.3 导入dbcp的依赖包 1.4 导入hibernate3的依赖包(hibernate3.jar.require文件中的所有,sif4-api.jar,jpa文件夹中的包) 2.创建applicationContext.xml 2.1 使用DBCP创建dataSourc

  • hibernate属性级别注解实例代码

    属性级别注解 添加方式: 写在属性字段上面 写在属性的get访问器的上面 @Id 必须,定义了映射到数据库表的主键的属性,一个实体类可以有一个或者多个属性被映射为主键,可置于主键属性或者getXxx()前,注意:如果有多个属性定义为主键属性,该实体类必须实现serializable接口 @SequenceGenerator @GeneratedValue   @GeneratedValue(strategy=GenerationType,generator=""):可选,用于定义主键生

  • Hibernate初体验及简单错误排除代码详解

    Hibernate是什么,有多少好处,想必查找这类博文的都知道,所以就不多说了.下面是我对Hibernate简单使用的一个小小的总结.与君(主要是刚入门的)共勉吧! 创建的顺序 创建Hibernate的配置文件 创建持久化的类 创建对象-关系的映射文件 通过HibernateAPI编写访问数据库的代码 关于详细的步骤 导入Hibernate必须的jar包(hibernate-release-版本号.Final\lib\required) 然后是导入MySQL的jdbc的驱动(mysql-conn

  • Hibernate中Session增删改查操作代码详解

    把三状态转换图放在这,方便分析方法的作用: 1.Session的save()方法 Session是Hibernate所有接口中最重要的接口,提供了对数据保存,更新,查询和删除的方法. Session的save()方法可以使临时态或游离态转换为持久态.例如,保存一个Customer对象: SessionFactory sessionFactory; Configuration configuration = new Configuration().configure(); sessionFacto

  • Hibernate的Session_flush与隔离级别代码详解

    本文研究的主要是Hibernate的Session_flush与隔离级别,具体介绍和实例如下. 概念介绍 我们先来看一些概念: 1.脏读:脏读又称为无效数据的读出,是指在数据库访问中,事物T1将某一值修改,然后事物T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取的数据是无效的.脏读就是指当一个事物正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事物也访问这个数据,然后使用了这个数据.因为这个数据还是没有提交的数据,那么另外一个事物读到的这

  • Python 错误和异常代码详解

    程序中的错误一般被称为 Bug,无可否认,这几乎总是程序员的错... 程序员的一生,始终伴随着一件事 - 调试(错误检测.异常处理).反反复复,最可怕的是:不仅自己的要改,别人的也要改...一万头草泥马奔腾而过! 错误 程序错误,主要分为三类: 语法错误 逻辑错误 运行时错误 语法错误 语法错误(也称:解析错误):是指不遵循语言的语法结构引起的错误(程序无法正常编译/运行). 在编译语言(例如:C++)中,语法错误只在编译期出现,编译器要求所有的语法都正确,才能正常编译.不过对于直译语言(例如:

  • Hibernate组件映射代码详解

    本文研究的主要是Hibernate组件映射的相关内容,具体如下. 组件关联映射的属性是复杂类型的持久化类,但不是实体类,即数据库中没有表与该属性对应,但该类的属性要持久保存. 比如:外国人的名字name分为firstName和lastName. MyName.java: public class MyName { private String firstName; private String lastName; public String getFirstName() { return fir

  • JAVA错误类结果类和分页结果类代码详解

    这篇文章主要介绍了JAVA错误类结果类和分页结果类代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 public interface ErrorCode { String getCode(); String getMsg(); /** * 公共错误码<br/> * 码段:10000~10099 * * */ public enum CommonError implements ErrorCode { SUCCESS("

  • Python探索之ModelForm代码详解

    这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,对,你没猜错,相信自己的英语水平. 先来一个简单的例子来看一下这个东西怎么用: 比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢? 首先我们会在前端一个一个罗列出这些字段,让用户去填写,然后我们从后天一个一个接收用户的输入,创建一个新的学生对象,保存 其实,重点不是这些,而是合法性验证,我们需要在前端

  • Java语言中的内存泄露代码详解

    Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存.理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同. JAVA中的内存管理 要了解Java中的内存泄露,首先就得知道Java中的内存是如何管理的. 在Java程序中,我们通常使用new为对象分配内存,而这些内存空间都在堆(Heap)上. 下面看一个示例: public class Simple { public static vo

  • Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解

    前言 前面的例子都是多个线程在做相同的操作,比如4个线程都对共享数据做tickets–操作.大多情况下,程序中需要不同的线程做不同的事,比如一个线程对共享变量做tickets++操作,另一个线程对共享变量做tickets–操作,这就是大名鼎鼎的生产者和消费者模式. 正文 一,生产者-消费者模式也是多线程 生产者和消费者模式也是多线程的范例.所以其编程需要遵循多线程的规矩. 首先,既然是多线程,就必然要使用同步.上回说到,synchronized关键字在修饰函数的时候,使用的是"this"

  • JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.很早就接触过闭包这个概念了,但是一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什么,有什么用,今天在网上看到了一篇讲JavaScript闭包的文章(原文链接),讲得非常好,这下算是彻底明白了JavaScript的闭包到底是个神马东东以及闭包的用途了,在此写出来和大家分享一下,希望不理解JavaScript闭包的朋友们看了之后能够理解闭包!以下内容大部分是来自原文,我在原文的基础

随机推荐