好久没有用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. 正则表达式与grep和sed

    正则表达式与grep和sed 目录 1.正则表达式 2.grep 3.sed grep和sed需要正则表达式,我们需要注意的正则表达式与通配符用法的区分. 1.正则表达式 REGEXP,正则表达式:由 ...

  2. 深入理解Java中的迭代器

    迭代器模式:就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节. 概述 Java集合框架的集合类,我们有时候称之为容器.容器的种类有很多种,比如ArrayList.Li ...

  3. canvas画布标签

    最近良师益友整理一些canvas的资料,加强学习了解! 当你创建一个<canvas>元素后,就拥有了它的绘图上下文. 一.简单图形 1.getContext()方法 为了在canvas上绘 ...

  4. How the Intelligent Digital Mesh Will Transform Every Business Layer

    The "intelligent digital mesh" is the definitive package for tomorrow's titans of business ...

  5. BZOJ-1225-[HNOI2001] 求正整数

    Description 对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m.例如:n=4,则m=6,因为6有4个不同整数因子1,2,3,6:而且是最小的有4个因子的整数. Input n ...

  6. 聊聊Java中的反射(一)

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 反射reflection主要为了动态操作Java代码,它的主要功能体现在Java提供的refl ...

  7. 五、在IDEA中使用GIt版本控制并将本地代码上传至Github

    一.安装git     Git工具下载:https://git-scm.com/downloads 从官网下载.安装很简单,基本都是下一步. 安装完的第一件事情就是创建一个Git用户: git con ...

  8. HDU6127Hard challenge

    Hard challenge Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) ...

  9. King

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

  10. Problem H

    Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个 ...