1. 程式人生 > >Hibernate ORM框架——第一章:Hibernate簡介與操作基礎

Hibernate ORM框架——第一章:Hibernate簡介與操作基礎

n) next() 使用 ber std 10g ice 一個 png

一、相關使用工具的下載與導入(環境配置)

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

}

/*以上個人整理筆記,如果有誤或者有不懂的地方,歡迎評論與指出*/

Hibernate ORM框架——第一章:Hibernate簡介與操作基礎