SSH笔记-hibernate基本实现

1、开发步骤:

1、创建Hibernate配置文件 hibernate.cfg.xml
2、创建持久化类
3、创建关系映射文件 *.hbm.xml
4、通过Hibernate API 访问数据库

(1)创建Hibernate配置文件

1、光标在src文件夹,然后File->New->Other->Hibernate Configuration File(cfg.xml)
2、进去 hibernate.cfg.xml配置连接数据库基本信息
3、进去 hibernate.cfg.xml配置hibernate基本信息
4、进去 hibernate.cfg.xml指定关联的 *.hbm.xml文件(目录结构)

(2)创建持久化类

1、就是创建javaBean,或者说创建一个数据模型,在配置关系映射文件之后,hibernate会根据这个类的名字和参数,创建对应的数据表
2、持久化类的要求:

①必须有一个无参构造器
②要有标识属性,即用于作为主键的参数
③为字段声明访问方法(get set方法)
④类不能是final

(3)创建关系映射文件

1、光标在持久化类所在包下,然后File->New->Other->Hibernate XML Mapping file(hbm.xml)
2、选择好需要的字段,生成好hbm.xml文件后,进去修改主键生成方式

(4)通过Hibernate API 访问数据库

1、创建SessionFactory对象
2、创建Session对象
3、开始事务
4、执行操作
5、提交事务
6、关闭Session对象
7、关闭SessionFactory对象

2、下载所需jar包:

(1)进入官网http://hibernate.org/orm/ 点解右上角那里的一个绿色按钮(写着Latest stable那个)
(2)会进入最新版本hibernate的页>
(3)第二布的页面往下拉,直到标题为Releases in this series的地方
(4)选择自己需要的版本,然后点Download按钮下载即可
(5)还要自己去找对应数据库驱动jar包

3、Hibernate配置文件: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="connection.username">root</property>
        <property name="connection.password"></property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- localhost是地址,如果用默认可以不写localhost,hebernateTEST是数据库名 -->
        <property name="connection.url">jdbc:mysql://localhost/hebernateTEST</property>

        <!-- 配置hibernate基本信息 
                1、配置hibernate使用数据库的方言dialect(区分是什么数据库,区分什么版本用)
                2、dialect属性值应该写东西,可以去下载的那个hibernate的jar的压缩包里面的project/etc/hibernate.properties中查看
        -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- 执行操作室是否在控制台打印sql -->
        <property name="show_sql">true</property>
        <!-- 是否对sql格式化 -->
        <property name="format_sql">true</property>

        <!-- 指定自动生成数据表的策略 -->
        <!--
            1、执行程序的时候hibernate自动在数据库生成数据表
            2、hbm2ddl.auto有四个create 、 update 、 create-drop 、 validate
                ①create:每次都生成新的数据表,旧的数据表就会没了
                ②create-drop:每次都生成新的数据表,当SessionFactory.close()执行,这个表就会删除
                ③update:数据表或列存在就更新或插入数据,不存在就新建
                ④validate:和数据库的表对比,如果hbm.xml文件的列在数据表中不存在,则抛出异常并不改变表
        -->
        <property name="hbm2ddl.auto">update</property>

        <!-- 指定关联的 *.hbm.xml文件(目录结构) 每个.hbm.xml对应一个数据表-->
        <mapping resource="com/demo/sshtest/Info.hbm.xml"/>

    </session-factory>
</hibernate-configuration>

4、持久化类:Info.java

package com.demo.sshtest;

public class Info {

    /*
     持久化类要求:
        1、必须有一个无参构造器
        2、要有标识属性
        3、为字段声明访问方法(getter setter)
        4、类不能是final
     */

    public Integer id;
    public String name;
    public String pswd;
    public String description;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPswd() {
        return pswd;
    }
    public void setPswd(String pswd) {
        this.pswd = pswd;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }

    public Info(){}
    public Info(String name, String pswd, String description) {
        super();
        this.name = name;
        this.pswd = pswd;
        this.description = description;
    }

}

5、关系映射文件:Info.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-4-4 14:05:50 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <!--
    Hibernate会根据这个xml耐指定对象和关系数据之间的映射,根据这个映射关系生成对应的sql

    class 相当于表
    id    相当于字段
    column相当于列名
    -->
    <class name="com.demo.sshtest.Info" table="INFO">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <!-- 指定主键的生成方式 -->
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="pswd" type="java.lang.String">
            <column name="PSWD" />
        </property>
        <property name="description" type="java.lang.String">
            <column name="DESCRIPTION" />
        </property>
    </class>
</hibernate-mapping>

5-1、关系映射文件中,主键generator标签的值的对照表
主键的生成策略
一般直接用“native”就好了

6、访问数据库逻辑:TestDemo.java

package com.demo.sshtest;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class TestDemo {

    public static void test(){
    //1、创建SessionFactory对象
        //  ①线程安全的
        //  ②构造完成后,就会被赋予特定配置信息(就是configuration.buildSessionFactory完成之后)
        //  ③构造SessionFactory很耗资源,一个应用一般只初始化一个SessionFactory对象
        //  ④hibernate4之后增加了ServiceRegistry接口,基于hibernate的配置或服务都先要统一到ServiceRegistry,ServiceRegistry注册后才有效
        //  ⑤sessionFactory = configuration.buildSessionFactory();//hibernate 4.0之前这样
        //  ⑥Configuration负责管理Hibernate的配置信息:I、Hibernate运行的底层信息:hibernate.cfg.xml
        //                                           II、持久化类与数据表映射关系:*.hbm.xml

        SessionFactory sessionFactory = null;

        //SessionFactory创建步骤:
            //(1)创建Configuration对象:对应hibernate基本配置信息和对象映射信息
            Configuration configuration = new Configuration().configure();
            //(2)注册hibernate的配置和服务
            ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);

    //2、创建Session对象
        //  ①Session是应用程序与数据库之间交互操作的一个单线程对象
        //  ②所有持久化对象必须在session管理下才可以进行持久化操作
        //  ③Session对象生命周期很短
        //  ④显示执行flush之前,所有持久层操作都缓存在session对象中
        //  ⑤Session类方法:
        //          操作方法:get()、load()、save()、update()、saveOrUpdate()、delete()
        //          开启事务:beginTransaction()
        //          管理session:isOpen()、flush()、clear()、evict()、close()
        Session session = sessionFactory.openSession();

    //3、开始事务
        //  原子操作,持久层操作都要在事务管理下进行,就是事务不开启的时候,系统是不会对数据库操作的
        //  常用方法:commit():提交session实例
        //           rollback():撤销事务操作
        //           wasCommitted():检查事务是否提交
        Transaction transaction = session.beginTransaction();

    //4、执行保存操作
        Info info = new Info("name1", "pswd1", "desc1");
        session.save(info);

    //5、提交事务
        transaction.commit();

    //6、关闭Session对象
        session.close();

    //7、关闭SessionFactory对象
        sessionFactory.close();
    }

    public static void main(String[] args) {
        /*
        1、下载jar包:
            (1)进入官网http://hibernate.org/orm/ 点解右上角那里的一个绿色按钮(写着Latest stable那个)
            (2)会进入最新版本hibernate的页面http://hibernate.org/orm/releases/版本号/
            (3)第二布的页面往下拉,直到标题为Releases in this series的地方
            (4)选择自己需要的版本,然后点Download按钮下载即可
            (5)还要自己去找对应数据库驱动jar包,我这里用了mysql的
        2、开发步骤
            (1)创建Hibernate配置文件 -> hibernate.cfg.xml
            (2)创建持久化类 -> 类对应表 参数对应字段,即写javaBean
            (3)创建对象-关系映射文件 -> *.hbm.xml
            (4)通过Hibernate API访问数据库
        */
        test();
    }
}

7、开发之前需要在eclipse上先好像上一篇文章一样,安装好Hibernate插件先,不然Hibernate配置文件和关系映射文件不能自动生成,会变得好麻烦

8、项目目录
项目目录

9、运行结果
运行结果
console的打印中,可以看出,Hibernate首先会去查一次有没有对应的表,如果没有就创建数据表,然后插入对应的数据到表中,然后就能在数据库里面看到对应的表和数据了

10、demo
https://download.csdn.net/download/qq_22778717/10334123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值