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 初体验
为什么会产生 Hibernate Mybatis 这类的dao层框架 传统的jdbc 虽然执行速度很快,但是开发效率很低,随着面向对象开发的设计思想,在面向对象编程中 将对象 进行持久化,存入关系型的 ...
- hibernate初体验
简介: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使 ...
- hibernate初使用
准备工作,安装及配置Hibernate http://zhoualine.iteye.com/blog/1190141 在产生数据库表映射 Java 对象时,我增加了数据库中的两张表分别为Chatlo ...
- Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用[z]
前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...
- 全分布式的Hadoop初体验
背景 之前的时间里对 Hadoop 的使用都是基于学长所搭建起的实验环境的,没有完整的自己部署和维护过,最近抽时间初体验了在集群环境下装机.配置.运行的全过程,梳理总结到本文中. 配置 内存:8G C ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验
Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...
- Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验
Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...
- K8S Kubernetes 简单介绍 转自 http://time-track.cn/kubernetes-trial.html Kubernetes初体验
这段时间学习了一下 git jenkins docker 最近也在看 Kubernetes 感觉写得很赞 也是对自己对于K8S 有了进一步得理解 感谢 倪 大神得Blog 也希望看到这篇Bl ...
随机推荐
- BZOJ3684 大朋友和多叉树(多项式相关计算)
设$f(x)$为树的生成函数,即$x^i$的系数为根节点权值为$i$的树的个数.不难得出$f(x)=\sum_{k\in D}f(x)^k+x$我们要求这个多项式的第$n$项,由拉格朗日反演可得$[x ...
- C语言程序注释风格
良好编程习惯的养成对于一个程序员的发展非常重要,而注释对于一份程序来讲又是一个必不可少的组成部分,今天来研究一下C语言程序的注释风格. 注释是源码程序中非常重要的一部分,一般情况下,源程序有效注释量必 ...
- OCP 认证考试报名费技巧题库051052053解析合格线
本人于2017年4月22日通过参加OCP考试,第一次参加,一天之内考了三门,三门一次性通过,052 - 95% ,053 - 86% ,051 - 100% 一.关于考试考试报名费: 052:158$ ...
- WINFORM中treeview 节点显示不全
在设置treeview节点时,出现如下显示不全的问题: 这个问题是由于我们在treeview任务中编辑节点时设置的字体大于我们在treeview属性中设置frot字体导致的. 所以只要将treevie ...
- 数据库的事务、ACID及隔离级别
事务 所谓事务是用户定义的一个数据库操作序列,这些操作要么全做,要么不做,是一个不可分割的工作单位.例如,在关系数据库中,一条或一组SQL语句.整个程序都可以是一个事务. 事务和程序是两个概念,一个程 ...
- h5的input的required使用中遇到的问题
form提交时隐藏input发生的错误 问题描述 在form表单提交的时候,有些input标签被隐藏,表单验证过程中会出现An invalid form control with name='' is ...
- Linux下的crontab定时、执行任务命令详解 oracle 自动备份
在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为&qu ...
- React学习笔记(一)- 环境搭建
最近在学习react相关的知识,刚刚起步,一路遇坑不断.自己做个笔记,方便日后总结,也供相同趣味的小伙伴一起交流探讨. 学习时主要参考官网的教程:https://facebook.github.io/ ...
- jQuery extend 方法使用 (转)
方法介绍 jQuery 的 API 手册中,extend 方法挂载在 jQuery 和 jQuery.fn 两个不同的对象上,但在 jQuery 内部代码实现的是相同的,只是功能各不相同. 先看看官方 ...
- 深入理解final关键字
在了解了final关键字的基本用法之后,这一节我们来看一下final关键字容易混淆的地方. 1.类的final变量和普通变量有什么区别? 当用final作用于类的成员变量时,成员变量(注意是类的成员变 ...