好久没有用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. 干了这杯Java之LinkedList

    LinkedList和ArrayList一样实现了List接口 ArrayList内部为数组 LinkedList内外为双向链表 实现了Deque接口,双端列队的实现 图片来自Wiki 内部实现为No ...

  2. DevOps之域名

    唠叨话 关于德语噢屁事的知识点,仅提供精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. 域名系统DNS(Domain Name System) 关于域名,知识与技能的层次(知道.理解.运用) ...

  3. 用Python来实现列举某个文件夹内所有的文件列表

    用Python来实现列举某个文件夹内所有的文件列表.吾八哥我动手写代码之前分析了下,遍历一个文件夹,肯定是需要用到os模块了,查阅模块帮助信息,可知os.listdir()方法可以列举某个文件夹内的所 ...

  4. WebApi系列~HttpClient的性能隐患

    回到目录 最近在进行开发过程中,基于都是接口开发,A站接口访问B接口接口来请求数据,而在这个过程中我们使用的是HttpClient这个框架,当然也是微软自己的框架,性能当前没有问题,但如果你直接使用官 ...

  5. win10 uwp smms图床

    本文,如何使用smms图床上传图片,用到win10 uwp post文件,因为我是渣渣,如果本文有错的,请和我说,在本文评论,或发给我邮箱lindexi_gd@163.com,请不要发不良言论 找到一 ...

  6. 容斥原理、欧拉函数、phi

    容斥原理: 直接摘用百度词条: 也可表示为 设S为有限集, ,则 两个集合的容斥关系公式:A∪B = A+B - A∩B (∩:重合的部分) 三个集合的容斥关系公式:A∪B∪C = A+B+C - A ...

  7. webpack 入门指南

    很久没有更博了... 这就把最近积累用到的知识点更新到这里.. 望 共勉 什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffe ...

  8. hibernate使用注解简化开发

    简述 在编写hibernate的时候,需要将实体类映射到数据库中的表.通常需要一个配置文件(hibernate.cfg.xml),一个实体类(XX.Java),还有一个映射文件(XX.hbm.xml) ...

  9. TsBatis 预览

    前言 在发布了 mybatis-dynamic-query之后感觉基本功能稳定了,而且现在在工作项目开发效率大大提高,而且非常易于维护. 最近准备带几个小朋友以前用typescript 打通前后端,当 ...

  10. MongoDB关系与数据库引用

    MongoDB关系: MongoDB 的关系表示多个文档之间在逻辑上的相互联系.文档间可以通过嵌入和引用来建立联系. 1. 嵌入关系: 形式:把一个文档嵌入到另一个文档中. 优点:数据保存在单一的文档 ...