Hibernate

一.概念

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

 

二.原理

 

1、解析hibernate.cfg.xml配置文件 
通过Configuration config = new Configuration().configure(); 
读取并解析hiberante.cfg.xml配置文件 
2、读取并解析映射信息 
hibernate.cfg.xml中的<mapping resource="com/User.hbm.xml"/>映射文件 
3、创建SessionFactory对象 
SessionFactory sf = config.buildSessionFactory(); 
4、打开Session 
Session session = sf.openSession(); 
5、创建并启动事务 
Transaction tx = session.beginTransaction(); 
6、CRUD持久化操作 
7、提交事务 
tx.commit(); 
8、关闭session 
9、关闭SessionFactory 

 

三.示例

1 创建项目HibernateDemo,并导入Hibernate相关jar包,mysql驱动jar包,Junit jar包。

2 在src下创建Hibernate配置文件hibernate.cfg.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 数据库用户 -->
        <property name="hibernate.connection.username">root</property>
        <!-- 数据库密码 -->
        <property name="hibernate.connection.password">botao521</property>
        <!-- 数据库链接 -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_demo?user=root&amp;password=botao521&amp;unicode=true&amp;characterEncodeing=utf-8</property>
        <!-- 数据库驱动 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 数据库方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        
        <!-- 在控制台中输出sql -->
        <property name="show_sql">true</property>
        <!-- 格式化控制台中的sql -->
        <property name="format_sql">true</property>
        
        <!-- 
            hbm2ddl.auto的作用为:自动创建/更新/验证数据库表结构 
            有以下值:
            create:      表示启动的时候先drop,再create
            create-drop: 也表示创建,只不过再系统关闭前执行一下drop
            update:      这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新
            validate:    启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新
        -->
        <property name="hbm2ddl.auto">create</property>
        
        <!-- 引入对象-关系映射文件 -->
        <mapping resource="com/cbt/bean/Student.hbm.xml" />
    </session-factory>
</hibernate-configuration>
</xml>

 

 3 创建持久化类Student.java

 

package com.cbt.bean;

import java.util.Date;

/**
 * 学生类
 * @author 
 */
public class Student {
    private int sid;       //学号
    private String sname;  //姓名
    private String gender; //性别
    private Date birthday; //出生日期
    private String address;//地址
    
    public Student(){}
    public Student(int sid, String sname, String gender, Date birthday,
            String address) {
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.birthday = birthday;
        this.address = address;
    }
    
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    
}

 

4 创建对象-关系映射文件Student.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">
<hibernate-mapping>
    <!-- JavaBean与对应的表名 -->
    <class name="com.cbt.bean.Student" table="STUDENT">
        <!-- 主键 -->
        <id name="sid" type="int">
            <column name="SID" />
            <generator class="assigned" />
        </id>
        <!-- 字段 -->
        <property name="sname" type="java.lang.String">
            <column name="SNAME" />
        </property>
        <!-- 字段 -->
        <property name="gender" type="java.lang.String">
            <column name="GENDER" />
        </property>
        <!-- 字段 -->
        <property name="birthday" type="java.util.Date">
            <column name="BIRTHDAY" />
        </property>
        <!-- 字段 -->
        <property name="address" type="java.lang.String">
            <column name="ADDRESS" />
        </property>
    </class>
</hibernate-mapping>

 

5 在hibernate.cfg.xml中引入Student.hbm.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>

        ......        
        
        <!-- 引入对象-关系映射文件 -->
        <mapping resource="com/cbt/bean/Student.hbm.xml" />

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

 

6 在mysql中创建数据库 hibernate_demo

create database hibernate_demo;

7 通过Hibernate API访问操作数据库

使用Junit编写测试类StudentTest.java

import java.util.Date;
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;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.cbt.bean.Student;

@SuppressWarnings("deprecation")
public class StudentTest {
    private SessionFactory sessionFactory; 
    private Session session;
    private Transaction transaction;
    
    @Before
    public void before(){
        //创建配置对象
        Configuration config = new Configuration().configure();
        //创建服务注册对象
        ServiceRegistry service = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
        //创建会话工厂对象
        sessionFactory = config.buildSessionFactory(service);
        //创建会话对象
        session = sessionFactory.openSession();
        //开启事务
        transaction = session.beginTransaction();
    }

    @After
    public void after(){
        transaction.commit();    //提交事务
        session.close();        //关闭会话
        sessionFactory.close(); //关闭会话工厂
    }
    
    @Test
    public void testSaveStudent() {
        //创建学生对象
        Student s = new Student(1,"张三","男",new Date(),"武当山");
        /*
         * 由于hibernate.cfg.xml中配置的hbm2ddl.auto值为'Create',所以执行save
         * 方法会检查数据库中是否有student表,没有的话会创建此表,并将s对象保存进去
         */
        session.save(s);
    }

}

 

运行测试用例,会发现控制台打印出下列SQL语句,在数据库中有一个STUDENT表被创建,以及对应的一条学生记录被插入。

Hibernate: 
    drop table if exists STUDENT
Hibernate: 
    create table STUDENT (
        SID integer not null,
        SNAME varchar(255),
        GENDER varchar(255),
        BIRTHDAY datetime,
        ADDRESS varchar(255),
        primary key (SID)
    )

Hibernate: 
    insert 
    into
        STUDENT
        (SNAME, GENDER, BIRTHDAY, ADDRESS, SID) 
    values
        (?, ?, ?, ?, ?)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
疫情居家办公系统管理系统按照操作主体分为管理员和用户。管理员的功能包括办公设备管理、部门信息管理、字典管理、公告信息管理、请假信息管理、签到信息管理、留言管理、外出报备管理、薪资管理、用户管理、公司资料管理、管理员管理。用户的功能等。该系统采用了MySQL数据库,Java语言,Spring Boot框架等技术进行编程实现。 疫情居家办公系统管理系统可以提高疫情居家办公系统信息管理问题的解决效率,优化疫情居家办公系统信息处理流程,保证疫情居家办公系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理疫情居家办公系统信息,包括外出报备管理,培训管理,签到管理,薪资管理等,可以管理公告。 外出报备管理界面,管理员在外出报备管理界面中可以对界面中显示,可以对外出报备信息的外出报备状态进行查看,可以添加新的外出报备信息等。签到管理界面,管理员在签到管理界面中查看签到种类信息,签到描述信息,新增签到信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值