如何彻底根据官方下载包搭建hibernate框架

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

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

  下面开始搭建:mysql

  百度云:jar包连接  密码:h7o8web

关于文件结构

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

  

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

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

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

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

关于jar包

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

  

  有了这些jar包,Hibernate的功能就全了,可是Hibernate是操做数据库的,因此咱们还须要提供咱们要使用的数据库的对应的驱动。如mysql的驱动包。

  在开发过程当中,咱们必然还须要记录捕捉项目的运行状况,因此还须要log4j的支持,进官网下载便可

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

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

 建立项目

  建立一个项目。

  1、file-new-javaProject 填写项目名便可,由于主要说明Hibernate的使用,不须要web,因此直接用JavaProject,若是使用web也是同样的道理。

  导入jar包

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

  2、全选,鼠标右键-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;
View Code

  建立一个表对应的实体类

  先建一个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;
    }

    
}
View Code

  在建立实体类时,属性最好使用包装类,例如: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映射文件的一些默认的规则。

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

  二、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>
View Code

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;
    }

    
}
View Code

  添加测试

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();
    }
}
相关文章
相关标签/搜索