好久没有用s2sh的框架了,最近业务需要又要拾起来。在搭框架时,发现之前都是复制配置文件,对具体的细节却很懵懂,所以要从新来一遍,也是一次新的学习。

  我使用的版本是hibernate-release-4.3.11.Final,因为需要使用基于xml的配置,这一版本关于xml的文档还是很友好的,最新的5.x主要针对注解,与业务有所出入。

  下面开始搭建:

  百度云:jar包链接  密码:h7o8

关于文件结构

  搭建Hibernate的压缩文件解压后就是下面的结构:

  

  jdbc和log4j包是我后加的,其他是就是hibernate的,下面说下他这几个文件夹的大致用途

  documentation文件夹:存放了Hibernate的使用文档和框架API等,下面会用到。

  lib文件夹:存放的是hibernate所需要的jar包。

  project文件夹:存放的是一些小项目实例,里面的etc会用到。

关于jar包

  搭建Hibernate,首先就是jar包,而Hibernate的jar包就在lib/required文件夹里,下面是这些jar包的作用

  

  有了这些jar包,Hibernate的功能就全了,但是Hibernate是操作数据库的,所以我们还需要提供我们要使用的数据库的对应的驱动。如mysql的驱动包。

  在开发过程中,我们必然还需要记录捕捉项目的运行情况,所以还需要log4j的支持,进官网下载即可

下载完的文件里有很多jar包,用哪个呢,官网的下面说的很清楚。

到这里,jar包就准备完成了,

创建项目

  创建一个项目。

  一、file-new-javaProject 填写项目名即可,因为主要说明Hibernate的使用,不需要web,所以直接用JavaProject,如果使用web也是一样的道理。

  导入jar包

  一、创建一个文件夹,将上面Hibernate的required文件夹的jar包、jdbc的jar包、log4j的jar包都copy进来

  二、全选,鼠标右键-buildPath-add to build path

  创建一个数据表

  创建一个数据库,并添加一个表,下面是一个示例。也可以自己随意创建。

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`u_id` int(11) NOT NULL AUTO_INCREMENT,
`u_email` varchar(60) DEFAULT NULL,
`u_name` varchar(100) DEFAULT NULL,
`u_username` varchar(100) DEFAULT NULL,
`u_password` varchar(70) DEFAULT NULL,
`u_age` varchar(255) DEFAULT NULL,
`u_detail` varchar(255) DEFAULT NULL,
`u_avatar` varchar(255) DEFAULT NULL,
`is_admin` varchar(5) DEFAULT NULL,
`createtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`updatetime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`u_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

  创建一个表对应的实体类

  先建一个com.xx.domain的包,将实体类放入包中

package com.cky.domain;

import java.sql.Timestamp;

public class User {
private Integer uId;
private String uEmail;
private String uName;
private String uUsername;
private String uPassword;
private String uAge;
private String uDetail;
private String uAvatar;
private String isAdmin;
private Timestamp createtime;
private Timestamp updatetime; public Integer getuId() {
return uId;
} public void setuId(Integer uId) {
this.uId = uId;
} public String getuEmail() {
return uEmail;
} public void setuEmail(String uEmail) {
this.uEmail = uEmail;
} public String getuName() {
return uName;
} public void setuName(String uName) {
this.uName = uName;
} public String getuUsername() {
return uUsername;
} public void setuUsername(String uUsername) {
this.uUsername = uUsername;
} public String getuPassword() {
return uPassword;
} public void setuPassword(String uPassword) {
this.uPassword = uPassword;
} public String getuAge() {
return uAge;
} public void setuAge(String uAge) {
this.uAge = uAge;
} public String getuDetail() {
return uDetail;
} public void setuDetail(String uDetail) {
this.uDetail = uDetail;
} public String getuAvatar() {
return uAvatar;
} public void setuAvatar(String uAvatar) {
this.uAvatar = uAvatar;
} public String getIsAdmin() {
return isAdmin;
} public void setIsAdmin(String isAdmin) {
this.isAdmin = isAdmin;
} public Timestamp getCreatetime() {
return createtime;
} public void setCreatetime(Timestamp createtime) {
this.createtime = createtime;
} public Timestamp getUpdatetime() {
return updatetime;
} public void setUpdatetime(Timestamp updatetime) {
this.updatetime = updatetime;
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; User user = (User) o; if (uId != user.uId) return false;
if (uEmail != null ? !uEmail.equals(user.uEmail) : user.uEmail != null) return false;
if (uName != null ? !uName.equals(user.uName) : user.uName != null) return false;
if (uUsername != null ? !uUsername.equals(user.uUsername) : user.uUsername != null) return false;
if (uPassword != null ? !uPassword.equals(user.uPassword) : user.uPassword != null) return false;
if (uAge != null ? !uAge.equals(user.uAge) : user.uAge != null) return false;
if (uDetail != null ? !uDetail.equals(user.uDetail) : user.uDetail != null) return false;
if (uAvatar != null ? !uAvatar.equals(user.uAvatar) : user.uAvatar != null) return false;
if (isAdmin != null ? !isAdmin.equals(user.isAdmin) : user.isAdmin != null) return false;
if (createtime != null ? !createtime.equals(user.createtime) : user.createtime != null) return false;
if (updatetime != null ? !updatetime.equals(user.updatetime) : user.updatetime != null) return false; return true;
} @Override
public String toString() {
return "User{" +
"uId=" + uId +
", uEmail='" + uEmail + '\'' +
", uName='" + uName + '\'' +
", uUsername='" + uUsername + '\'' +
", uPassword='" + uPassword + '\'' +
", uAge='" + uAge + '\'' +
", uDetail='" + uDetail + '\'' +
", uAvatar='" + uAvatar + '\'' +
", isAdmin='" + isAdmin + '\'' +
", createtime=" + createtime +
", updatetime=" + updatetime +
"}\n";
} @Override
public int hashCode() {
Integer result = uId;
result = 31 * result + (uEmail != null ? uEmail.hashCode() : 0);
result = 31 * result + (uName != null ? uName.hashCode() : 0);
result = 31 * result + (uUsername != null ? uUsername.hashCode() : 0);
result = 31 * result + (uPassword != null ? uPassword.hashCode() : 0);
result = 31 * result + (uAge != null ? uAge.hashCode() : 0);
result = 31 * result + (uDetail != null ? uDetail.hashCode() : 0);
result = 31 * result + (uAvatar != null ? uAvatar.hashCode() : 0);
result = 31 * result + (isAdmin != null ? isAdmin.hashCode() : 0);
result = 31 * result + (createtime != null ? createtime.hashCode() : 0);
result = 31 * result + (updatetime != null ? updatetime.hashCode() : 0);
return result;
} }

  在创建实体类时,属性最好使用包装类,例如:Integer,因为与基本类型(int)相比,包装类多了一种null状态。可以表示不存在,而基本类型带有默认值(如int默认0),这时就会有歧义,不知道是值为0还是不存在。

  创建Hibernate配置文件

  在项目鼠标右键-new-SourceFolder,创建一个资源文件。

  (资源文件是为了方便我们阅读而设计的,当程序编译后,所有的资源文件会进行合并最后全部放到classes文件中,所以我们可以通过classpath进行获取)

  创建hibernate.cfg.xml文件(这个文件名是hibernate默认文件名,当程序启动时,hibernate会自动在classpath中寻找名为hibernate.cfg.xml的文件,如果不是这个名字,就需要后期手动指定,会比较麻烦

  下面我们需要为文件添加约束,那么约束在哪里呢?

  其实hibernate早已经为我们准备好了,打开hibernate核心包下的org.hibernate,最下面会有dtd文件

  

  双击打开hibernate-configuration-3.0.dtd文件(3.0向下兼容,4.0不向下兼容,所以要选择3.0的文件),会发现,上面注释里说明了约束头怎么写:

   

复制到配置文件中:

这时我们写一个<然后alt+?,会有提示标签,什么?你没有?那可以看看另一篇博客

  配置文件的基本结构如下:

<?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>
<!-- 先配置SessionFactory标签,一个数据库对应一个SessionFactory标签 -->
<session-factory>
<!-- 必须的配置的参数5个,4大参数,数据库方言 -->
<!--
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password
数据库方言
#hibernate.dialect org.hibernate.dialect.MySQLDialect
-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///blog</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 可选配置 -->
<!-- 显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化sql语句 -->
<property name="hibernate.format_sql">true</property>
<!-- 生成数据库的表结构
(hbm2dd全称hibernate mapping to db define language auto create)
update 没表会自动创建,有表添加数据。
如果开发中间需要添加字段,可以在实体类添加属性。update会自动在数据库添加字段,并且不改变原来数据库值
validate 校验实体属性和数据库是否一致
-->
<property name="hibernate.hbm2ddl.auto">update</property> <!-- 映射配置文件,可以在map配置文件右键copy qualified name-->
<mapping resource="com/cky/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

上面配置的属性都可以在hibernate-release-4.3.11.Final\project\etc\hibernate.properties文件中找到

  创建mapping映射文件

关于mapping映射文件的一些默认的规则。

  1、Hibernate的mapping映射文件默认需要和实体类在同一文件夹中

  2、mapping映射文件默认命名规则:实体类名.hbm.xml。hbm(全称:hibernate mapping)

User.hbm.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="com.cky.domain.User" table="user">
<!-- 配置id
name实体类属性,column表字段,如果一样,column可以省略。
-->
<id name="uId" column="u_id">
<!-- 主键生成策略 -->
<generator class="native"></generator>
</id>
<property name="uEmail" column="u_email"></property>
<property name="uName" column="u_name"></property>
<property name="uUsername" column="u_username"></property>
<property name="uPassword" column="u_password"></property>
<property name="uAge" column="u_age"></property>
<property name="uDetail" column="u_detail"></property>
<property name="uAvatar" column="u_avatar"></property>
<property name="isAdmin" column="is_admin"></property>
<property name="createtime" column="createtime"></property>
<property name="updatetime" column="updatetime"></property>
</class>
</hibernate-mapping>

User实体类文件

package com.cky.domain;

import java.sql.Timestamp;

public class User {
private Integer uId;
private String uEmail;
private String uName;
private String uUsername;
private String uPassword;
private String uAge;
private String uDetail;
private String uAvatar;
private String isAdmin;
private Timestamp createtime;
private Timestamp updatetime; public Integer getuId() {
return uId;
} public void setuId(Integer uId) {
this.uId = uId;
} public String getuEmail() {
return uEmail;
} public void setuEmail(String uEmail) {
this.uEmail = uEmail;
} public String getuName() {
return uName;
} public void setuName(String uName) {
this.uName = uName;
} public String getuUsername() {
return uUsername;
} public void setuUsername(String uUsername) {
this.uUsername = uUsername;
} public String getuPassword() {
return uPassword;
} public void setuPassword(String uPassword) {
this.uPassword = uPassword;
} public String getuAge() {
return uAge;
} public void setuAge(String uAge) {
this.uAge = uAge;
} public String getuDetail() {
return uDetail;
} public void setuDetail(String uDetail) {
this.uDetail = uDetail;
} public String getuAvatar() {
return uAvatar;
} public void setuAvatar(String uAvatar) {
this.uAvatar = uAvatar;
} public String getIsAdmin() {
return isAdmin;
} public void setIsAdmin(String isAdmin) {
this.isAdmin = isAdmin;
} public Timestamp getCreatetime() {
return createtime;
} public void setCreatetime(Timestamp createtime) {
this.createtime = createtime;
} public Timestamp getUpdatetime() {
return updatetime;
} public void setUpdatetime(Timestamp updatetime) {
this.updatetime = updatetime;
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; User user = (User) o; if (uId != user.uId) return false;
if (uEmail != null ? !uEmail.equals(user.uEmail) : user.uEmail != null) return false;
if (uName != null ? !uName.equals(user.uName) : user.uName != null) return false;
if (uUsername != null ? !uUsername.equals(user.uUsername) : user.uUsername != null) return false;
if (uPassword != null ? !uPassword.equals(user.uPassword) : user.uPassword != null) return false;
if (uAge != null ? !uAge.equals(user.uAge) : user.uAge != null) return false;
if (uDetail != null ? !uDetail.equals(user.uDetail) : user.uDetail != null) return false;
if (uAvatar != null ? !uAvatar.equals(user.uAvatar) : user.uAvatar != null) return false;
if (isAdmin != null ? !isAdmin.equals(user.isAdmin) : user.isAdmin != null) return false;
if (createtime != null ? !createtime.equals(user.createtime) : user.createtime != null) return false;
if (updatetime != null ? !updatetime.equals(user.updatetime) : user.updatetime != null) return false; return true;
} @Override
public String toString() {
return "User{" +
"uId=" + uId +
", uEmail='" + uEmail + '\'' +
", uName='" + uName + '\'' +
", uUsername='" + uUsername + '\'' +
", uPassword='" + uPassword + '\'' +
", uAge='" + uAge + '\'' +
", uDetail='" + uDetail + '\'' +
", uAvatar='" + uAvatar + '\'' +
", isAdmin='" + isAdmin + '\'' +
", createtime=" + createtime +
", updatetime=" + updatetime +
"}\n";
} @Override
public int hashCode() {
Integer result = uId;
result = 31 * result + (uEmail != null ? uEmail.hashCode() : 0);
result = 31 * result + (uName != null ? uName.hashCode() : 0);
result = 31 * result + (uUsername != null ? uUsername.hashCode() : 0);
result = 31 * result + (uPassword != null ? uPassword.hashCode() : 0);
result = 31 * result + (uAge != null ? uAge.hashCode() : 0);
result = 31 * result + (uDetail != null ? uDetail.hashCode() : 0);
result = 31 * result + (uAvatar != null ? uAvatar.hashCode() : 0);
result = 31 * result + (isAdmin != null ? isAdmin.hashCode() : 0);
result = 31 * result + (createtime != null ? createtime.hashCode() : 0);
result = 31 * result + (updatetime != null ? updatetime.hashCode() : 0);
return result;
} }

  添加测试

package com.cky.Demo;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import com.cky.domain.User;
import com.cky.utils.HibernateUtils; public class DemoTest {
@Test
public void testSave() {
//1.加载配置文件
Configuration cfg=new Configuration();
//默认加载src目录下的hibernate.cfg.xml的配置文件
cfg.configure();
//2.创建sessionFactory
SessionFactory sessionFactory = cfg.buildSessionFactory();
//3.创建session
Session session = sessionFactory.openSession();
//4.开启事务
Transaction tr = session.beginTransaction();
//5.编写更新代码
User user=new User();
user.setuName("小红");
user.setuPassword("123456");
session.save(user); //6.提交事务
tr.commit();
//7.释放资源
session.close();
sessionFactory.close();
}
}

如何完全根据官方下载包搭建hibernate框架的更多相关文章

  1. 如何搭建hibernate框架

    我写这篇博客,主要是想让大家能够快速上手hibernate,本人建议学习框架,应该一个框架一个框架学习,别一上手就三大框架整合,学习之类的.这里只是单独搭建hibernate框架,让大家 能够更好的上 ...

  2. hibernate篇章二--成就搭建hibernate框架

    在网上的资料很多,但是成功搭建一个Hibernate框架的很少,下面我将用一个简单的例子成功搭建一个Hibernate框架给大伙瞧瞧 该链接中有源代码和数据库,例子很简单,只是往数据库中的person ...

  3. idea中创建web项目搭建Hibernate框架连接oracle数据库

    hibernate框架 hibernate是数据化持久工具,也是一个开源代码的ORM解决方案.hibernate内部封装了通过jdbc访问数据库的操作,向商场应用提供面向对象的数据访问api. hib ...

  4. 在Eclipse下搭建Hibernate框架(加载hibernate工具插件,离线)

    下载hibernate工具包完成之后,对其进行解压可以得到众多文件夹,其中就有一个jbosstools-hibernate开头的文件夹,进入其中可以得到features和plugins两个文件夹,在E ...

  5. SSH电力项目一 搭建Hibernate框架

    Hibernate所需要的基本文件: ElectText.java ElecText.hbm.xml hibernate.cfg.xml 第一步:创建测试表Elec_Text: create tabl ...

  6. ORM进阶:Hibernate框架搭建及开发

    本节将開始.使用hibernate搭建持久层.当然在决定用不用之前,还请斟酌一下是否使用.了解一下Hibernate的优缺点. Hibernate优劣对照 Hibernate是一个持久的ORM框架.首 ...

  7. Hibernate框架 jar包介绍

    一直使用my eclipse集成的Hibernate来学习.最近在写hibernate的日记,写到搭建hibernate框架的时候才发现自己对hibernate的内容还是不了解,决定自己手动搭建一下. ...

  8. (01)hibernate框架环境搭建及测试

    ---恢复内容开始--- 1.创建javaweb项目 2.导包 hibernate包 hibernate\lib\required\*.jar 数据库驱动包 mysql-connector-java- ...

  9. 使用maven搭建Hibernate

    使用maven搭建Hibernate框架(web项目) create table USERS ( ID NUMBER not null primary key, NAME ), PASSWORD ), ...

随机推荐

  1. SerialPort如何读取串口数据并显示在TextBox上,多线程委托

    namespace SerialPort { public partial class Form3 : Form { delegate void UpdateTextEventHandler(stri ...

  2. Spring读书笔记——bean解析

    前情回顾 上篇<Spring读书笔记--bean加载>我们从代码角度介绍了有哪些类负责解析XML文件,又是如何一步步从XML格式脱变成我们熟悉的bean的,直到DefaultBeanDef ...

  3. UVa 10954,Add All

    Huffman编码简化版,优先队列搞定. 1A 调试的时候发现一个问题..木有想明白...问题代码里给出,哪位大神给解释下. #include <iostream> #include &l ...

  4. 快速部署Telegraf & Influxdb

    是什么? Telegraf 是一个用 Go 编写的代理程序,可收集系统和服务的统计数据,并写入到 InfluxDB 数据库.Telegraf 具有内存占用小的特点,通过插件系统开发人员可轻松添加支持其 ...

  5. Android开发中的OpenCV霍夫直线检测(Imgproc.HoughLines()&Imgproc.HoughLinesP())

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃   //2017-04-21更新: 很多网友希望能得到源码,由于在公司做的,所以不太方便传出来 ...

  6. 详解 $().css('width')和$().width()的区别

    在本次项目开发中,经常用jquery获取高度和宽度并且动态加载,有时候用$().css('width')或$().width()这两个方法获取宽度并设置,但是有时候出现获取不到的情况,查阅资料后发现他 ...

  7. 前端性能优化jQuery性能优化

    一.使用合适的选择器 $("#id"); 1.使用id来定位DOM元素无疑是最佳提高性能的方式,因为jQuery底层将直接调用本地方法document.getElementById ...

  8. QT生成PDF文件

    QString temp=""; //m_File_Content_Text_Edit->selectAll(); QString t_File_Content = m_Fi ...

  9. Cactus

    Cactus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  10. 算法:JavaScript两数之和

    题目 Given an array of integers, return indices of the two numbers such that they add up to a specific ...