Hibernate ORM框架——第一章:Hibernate简介与操作基础

一、相关使用工具的下载与导入(环境配置)

hibernate-release-4.2.21.Final-->旧版本
hibernate-release-5.2.10.Final-->新版本

首先需要解压:hibernate-release-5.2.10.Final(新版本)
-->把解压后的 hibernate-release-5.2.10.Final文件夹里的 lib文件夹里的所有jar包复制到根项目下的lib文件夹里,包括JDBC的ojdbc6.jar包
-->把所有的jar包变成牛奶瓶

解压:hibernate-tutorials文件:可以从这个文件中找到:basic--一直点进去
直到看到java和resources的文件,再依据需求来选择要那个文件里面的xml头文件

-->hibernate.cfg.xml(配置文件的头文件)
  <!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
-->EmpMapping.xml(映射文件的头文件)
  <!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

二、第一个Hibernate添加操作

1)使用PL/SQL数据库

2)第一个类比原生的JDBC实现添加操作:(不需要封装util包)

注意:此代码是必须先在数据库中创建所需要的表

2.1)类比jave原生的JDBC实现添加操作

1.1  util包-->DbUtils.java:连接数据库驱动

package utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbUtils {

    private static final String url = "jdbc:oracle:thin:@localhost:1521:orcl";
    private static final String username = "myuser";
    private static final String password = "123";

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, username, password);
    }

    public static void closeConnection(Connection conn) throws SQLException {
        conn.close();
    }

}

1.2  写实体对象

package entity;

public class TestEntity {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

1.3  写dao包

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import entity.TestEntity;
import utils.DbUtils;

public class TestDao {
    public void insert(String name) throws SQLException{
        Connection conn = DbUtils.getConnection();
        String sql = "insert into mytable values(?)";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1, name);
        ps.executeUpdate();
    }

    public List<TestEntity> getAll() throws Exception {
        List<TestEntity> result = new ArrayList<TestEntity>();
        Connection conn = DbUtils.getConnection();
        String sql = "select * from mytable";
        PreparedStatement ps = conn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();

        while(rs.next()){
            TestEntity entity = new TestEntity();
            entity.setName(rs.getString(1));
            result.add(entity);
        }
        return result;

    }
}

1.4  写test测试包

package yuanMain;

import java.util.List;

import dao.TestDao;
import entity.TestEntity;

public class YuanMain {

    public static void main(String[] args) throws Exception {

        /*仿照以前JDBC添加和查询数据库的操作*/
        /*添加*/
        TestDao testdao = new TestDao();
        //testdao.insert("xxttt");

        /*查询*/
        List<TestEntity> all = testdao.getAll();
        System.out.println(all.size());
        for (TestEntity testEntity : all) {
            System.out.println(testEntity.getName());
        }

    }
}

3)第一个hibernate实现添加操作代码(优化上面的类比java的代码)

3.1  -->先把解压后的 hibernate-release-5.2.10.Final文件夹里的 lib文件夹里的所有jar包复制到根项目下的lib文件夹里,包括JDBC的ojdbc6.jar包
-->把所有的jar包变成牛奶瓶

项目结构:

3.2  写代码:

配置文件

<?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.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="connection.username">myuser</property>
        <property name="connection.password">123</property>

        <!-- 在添加数据时可选hbm2ddl.auto。在查询时,可以不用:避免唯一约束的冲突 -->
        <!-- 根据schema在PL/SQL中自动创建数据表的工具 -->
        <!-- <property name="hbm2ddl.auto">create</property> -->

        <!-- 生成优化的SQL -->
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>

        <!-- 显示hibernate生成的sql语句 -->
        <property name="show_sql">true</property>
        <!-- 显示格式化的SQL语句:优化排版 -->
        <property name="format_sql">true</property>

        <!-- 数据表映射配置文件 -->
        <mapping resource="com/nf/Personer.xml"></mapping>
    </session-factory>
</hibernate-configuration>        

实体对象:

package com.nf;

public class Personer {

    private long pid;
    private String pname;

    public long getPid() {
        return pid;
    }
    public void setPid(long pid) {
        this.pid = pid;
    }
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }

}

实体映射文件

<?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-mapping package="com.nf">
    <class name="Personer" table="Personers">
        <id name="pid" column="id">
            <!-- 标识主键:increment/native自动增长、assigned自己输入 -->
            <generator class="increment"></generator>
        </id>
        <property name="pname"></property>
    </class>
</hibernate-mapping>     

测试类

package com.nf;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

public class Main {

    public static void main(String[] args) {

        StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                .configure().build();
        SessionFactory sf = new MetadataSources(registry)
                .buildMetadata().buildSessionFactory();

        Session s = sf.openSession();

        Personer ps = new Personer();
        ps.setPname("xxx");
        /*ps.setPname("试试");*/

        Transaction ts = s.beginTransaction();
        s.save(ps);
        ts.commit();

        s.close();
        sf.close();
    }

}

/*以上个人整理笔记,如果有误或者有不懂的地方,欢迎评论与指出*/

时间: 2024-08-08 20:18:11

Hibernate ORM框架——第一章:Hibernate简介与操作基础的相关文章

javascript高级程序设计 第一章--javascript简介

javascript高级程序设计 第一章--javascript简介Netscape开发的javascript最初的目的就是处理由服务器负责的一些输入验证操作,而在js问世之前,必须                    把表单数据发到服务器端用户才能得到反馈.如今的js不再局限于简单的数据验证,而且具备了与浏览器窗口及其内容等所有方面的交互能力,js已经发展成功能全面的面向客户端的编程语言.javascript由Netscape公司开发,原名Livescript,是为了迎合当时的java热,所

《深入理解LLVM》第一章 LLVM简介

第一章 LLVM简介 作者:史宁宁 1.1 LLVM是什么 LLVM是什么?这是一个虽然基础,但是也曾经让很多新入门的人迷惑的一个问题.从字面上来讲,LLVM(Low Level Virtual Machine)是一个底层虚拟机,LLVM曾经有一部分功能对虚拟机有所帮助.但是现在,LLVM所代表的基本和虚拟机没有关系了,也不在作为一个缩写使用了,而是直接作为一个名字使用.那么LLVM到底是什么? LLVM可以被看作是一系列的编译器和工具链技术的集合,而且它们是模块化并且是可重用的.这是LLVM官

一周学会mysql:第一章mysql简介

mysql是支持众所周知的sql(结构化查询语言)数据库语言的一个关系数据库 数据库是由持久性数据的某些集合组成的,由数据库管理系统管理 数据库专用语言把命令传递给数据库服务器,这种语言叫数据库语言 NULL值:未知的值(空值),部要和0混淆了 主键用来唯一标识表中的一列,表中不可能有2个不同行在他们的主键上具有相同的值,主键必须有个值 候选键:表中包含多个可以作为主键的列,但只有其中一个可以作为主键 替换键:不是表格主键的候选键. 外键:是表中的一列,该列是另外一个表的主键内容的一个子集 一周

用 WEKA 进行数据挖掘 ——第一章:简介

1.简介数据挖掘.机器学习这些字眼,在一些人看来,是门槛很高的东西.诚然,如果做算法实现甚至算法优化,确实需要很多背景知识.但事实是,绝大多数数据挖掘工程师,不需要去做算法层面的东西.他们的精力,集中在特征提取,算法选择和参数调优上.那么,一个可以方便地提供这些功能的工具,便是十分必要的了.而weka,便是数据挖掘工具中的佼佼者.Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的,非商业化的,基于JAVA环境下

第一章 C++简介

第一章  C++简介 1.1  C++特点 C++融合了3种不同的编程方式:C语言代表的过程性语言,C++在C语言基础上添加的类代表的面向对象语言,C++模板支持的泛型编程. 1.2  C语言及其编程原理 20世纪70年代贝尔实验室的Dennis Ritchie开发了C语言(为了开发UNIX操作系统). C语言是过程性语言,采用结构化编程方法(代码块.分支结构,如for.while等代码块). C语言流行自顶向下的程序设计. 1.3  C++语言 1.3.1  C++起源 C++也是在贝尔实验室

第一章 Mysql简介及安装和配置

第一章 Mysql简介及安装和配置 ·    第一节:Mysql简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品. 使用 C和 C++编写的. 集群(Cluster),适合大规模应用 ·   第二节:Mysql安装及配置 MySql安装注意一次行安装成功,不然要处理注册表. 安装选择编码格式为GBK或UTF-8. 安装MySql图形界面(Navica或MySQlog). p.MsoNormal,li.MsoNormal,div.Mso

第一章 Maven简介

为什么使用Maven? IDE?Eclipse? ? 手工操作较多,编译.测试.部署等工作都是独立的,很难一步完成 ? 每个人的IDE配置都不同,很容易出现本地代码换个地方编译就出错 Ant? ?没有一个约定的目录结构 ? 必须明确让ant做什么,什么时候做,然后编译,打包 ? 没有生命周期,必须定义目标及其实现的任务序列 没有集成依赖管理 MAVEN? ? 拥有约定,知道你的代码在哪里,放到哪里去 ? 拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程

Hibernate ORM框架——续第一章:Hibernate的增删改查(第一个hibernate代码的优化)

一:.项目结构 二.代码 1)HibernateUtil package util; import org.hibernate.SessionFactory; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

SSH框架第一天——hibernate框架

什么是框架? 是软件的半成品,它已经完成了部分功能. 什么是hibernate? hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. (简单的说,hibernate框架通过映射(xml配置文件)来关联javabean和数据库,程序员可以操作对象来操作数据库了.) 三大框架在javaweb中的位置: Hibernate在开发中的位置: 注      意:hibernate的底层依然还