Hibernate

Posted 海盗屋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate相关的知识,希望对你有一定的参考价值。

什么是hibernate?

  hibernate是一个orm框架,实现了对JDBC的封装。通过xml文件来实现类和表之间的映射,这样就可以使用操作对象的方式来操作数据库。

官网:http://hibernate.org/

这里使用最新的5.3版本,下载到本地。

hibernate框架搭建:

1.导入包 下载后将lib/required文件夹中的jar包以及mysql数据库的驱动jar包(mysql-connector-java-5.1.46.jar)导入到项目中

2.写全局配置文件 创建hibernate.cfg.xml

<?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>
    <!--配置工厂信息,全局信息 -->
    <session-factory>
        <!--数据库驱动类全称  -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!--数据库url地址  -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/david2018_db?characterEncoding=UTF-8</property>
        <!--用户名  -->
        <property name="hibernate.connection.username">root</property>
        <!--密码  -->
        <property name="hibernate.connection.password">1234</property>
        <!--方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!--执行DDL的类别:
        create:每次都删除新建
        update:存在就修改,不存在就新建  -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!--是否显示SQL语句  -->
        <property name="hibernate.show_sql">true</property>
        <!--是否格式化SQL语句  -->
        <property name="hibernate.format_sql">true</property>
        <!-- 启用getCurrentSession,默认未启用 -->
        <property name="hibernate.current_session_context_class">thread</property>
        <!--基于xml映射文件: 映射文件加载。路径 -->
        <mapping resource="com/hibernate/domain/User.hbm.xml"></mapping>
    </session-factory>
</hibernate-configuration>

3.实体类

package com.hibernate.domain;

public class User {
    private int UserId;
    private String UserName;
    private String PassWord;
    private int Age;
    private String Sex;

    public User(){

    }
    public User(String userName,String password,int age,String sex){
        this.UserName = userName;
        this.PassWord = password;
        this.Age = age;
        this.Sex = sex;
    }

    public int getUserId() {
        return UserId;
    }
    public void setUserId(int UserId) {
        this.UserId = UserId;
    }

    public String getUserName() {
        return UserName;
    }
    public void setUserName(String UserName) {
        this.UserName = UserName;
    }

    public String getPassWord() {
        return PassWord;
    }
    public void setPassWord(String PassWord) {
        this.PassWord = PassWord;
    }
    public int getAge() {
        return Age;
    }
    public void setAge(int Age) {
        this.Age = Age;
    }
    public String getSex() {
        return Sex;
    }
    public void setSex(String Sex) {
        this.Sex = Sex;
    }
}

4.编写对应实体类的User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
        SYSTEM
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<!--映射标签
 package:内部类的所在的包名 -->
<hibernate-mapping package="com.hibernate.dao">
    <!--需要设置的映射类:设置该类对应的表  -->
    <!--属性:
    name:类名
    table:表名  -->
    <class name="com.hibernate.domain.User" table="User">
        <!--id:主键,name:属性名称,column:字段名称  -->
        <id name="UserId" column="UserId">
            <!--generator:主键生成策略
            class:标记主键如何生成
            取值:
            1、native:自动增长,会根据当前的数据库自动切换
            2、identity:mySQL的自增策略
            3、sequence:Oracle的自增标记
            4、uuid:32位字符串
            5、assigned:自定义字符串
            6、foreign:外键
            7、increment:自己维护自增关系
              -->
            <generator class="native"/>
        </id>
        <!--配置属性对应的字段  -->
        <property name="UserName" column="UserName"/>
        <property name="PassWord" column="PassWord"/>
        <property name="Age" column="Age"/>
        <property name="Sex" column="Sex"/>
    </class>
</hibernate-mapping>

5.测试

import com.hibernate.domain.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Main {

    public static void main(String[] args) {
        // 加载配置文件
        Configuration configuration = new Configuration().configure();
        // 创建Session工厂
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 创建Session对象
        Session session = sessionFactory.openSession();
        // 开启事务
        Transaction tx = session.beginTransaction();
        User user = new User("测试", "666666",18,"男");
        //执行保存
        session.save(user);
        //提交事务
        tx.commit();

        session.close();
        sessionFactory.close();
    }
}

这样就可以像表中插入一条数据。

 

以上是关于Hibernate的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate的HQL多表查询

使用反射在外部JAR / CLASS上调用包含Hibernate事务的方法(Java EE)

Hibernate CriteriaQuery where - ManyToOne 字段

Hibernate + MySQL:如何为数据库和表设置编码 utf-8

hibernate在使用getCurrentSession时提示no session found for current thread

Java类型相互转换byte[]类型,blob类型