1. 程式人生 > >Hibernate入門一

Hibernate入門一

不存在 () username format create XML 持久 bject ava

什麽是Hibernate

Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,是一個關系數據庫ORM框架。
Hibernate可以自動生成SQL語句,自動執行,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。 (來自百度百科)

什麽是ORM

ORM是Object Relational Mapping的簡寫,是一種程序技術,它實現了對象模型和關系模型之間的轉換。
從理論效果上來說,它其實創建了一個可在編程語言裏使用的“虛擬對象數據庫”。

主流的ORM框架

1.JPA(JAVA Persistence API):通過JDK 5.0註解或XML描述對象-關系表的映 射關系(只有接口規範)

2.Hibernate:流行ORM框架,通過對象-關系映射配置,可以完全脫離底層SQL
3.MyBatis 本是apache的一個開源項目 iBatis,支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架
4.Apache DBUtils 、Spring JDBCTemplate

Hibernate優點

1.實現了對JDBC的封裝,大大簡化了持久層代碼繁瑣的重復性代碼
2.簡化了編碼的工作
3.使用反射的機制
4.因為是一個輕量級的框架,性能非常好

初體驗

準備工作
??1.導包
??2.編寫JavaBean
??3.配置*.hbn.xml
??4.配置hibernate.cfg.xml

1.導包
            核心包    必須包    驅動包

2.編寫JavaBean
create database hibernate;
use hibernate;
create table t_user(
  id int auto_increment primary key,
  username varchar(20),
  password varchar(20)
);

public class User {
    private int uid;
    private String username;
    private String password;

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", username=‘" + username + ‘\‘‘ +
                ", password=‘" + password + ‘\‘‘ +
                ‘}‘;
    }
}

3.配置*.hbn.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!--配置類和表的對應關系-->
    <!--
        name:全類名
        table:表名
    -->
    <class name="cn.robin.hibernate.demo01.User" table="tb_user">
        <!--
            要求實體類有唯一值
            要求表中有一個屬性有唯一值
        -->
        <id name="uid" column="uid">
            <!--native表示主鍵自動增長-->
            <generator class="native" />
        </id>
        <!--配置其他屬性-->
        <property name="username" column="username" />
        <property name="password" column="password" />
    </class>
</hibernate-mapping>

4.配置核心文件
<?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 元素用於配置Hibernate中的屬性
            鍵:值
          -->
        <!-- hibernate.connection.driver_class : 連接數據庫的驅動  -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- hibernate.connection.url : 連接數據庫的地址,路徑 -->
        <property name="hibernate.connection.url">jdbc:mysql///hibernate</property>
        <!-- hibernate.connection.username : 連接數據庫的用戶名 -->
        <property name="hibernate.connection.username">robin</property>
        <!-- hibernate.connection.password : 連接數據庫的密碼 -->
        <property name="hibernate.connection.password">robin</property>

        <!--配置hibernate(可選)-->
        <!--有SQL語句輸出-->
        <property name="hibernate.show_sql">true</property>
        <!--對語句進行格式化-->
        <property name="hibernate.format_sql">true</property>
        <!--
            hibernate創建表的配置
            update:如果不存在表,則創建,如果存在,則更新
        -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!--
            配置數據庫方言
            MySql:limit
            Oracle:rownum
        -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 配置本地線程綁定session-->
        <property name="hibernate.current_session_context_class">thread</property>

        <!--把映射文件加載到核心配置文件中-->
        <mapping resource="cn/robin/hibernate/demo01/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>
<!--
    映射配置文件
    1.映射配置文件的位置沒有任何要求
    2.映射配置文件標簽中name屬性都是實體類的名稱 column是表中字段的名稱
        class中name屬性的值是實體類的全路徑
    3.id和property標簽中的column屬性可以省略,默認是name屬性的值
    4.property標簽中的type屬性,用來設置字段的類型,自動對應類型
-->
<!--
    核心配置文件
    1.必須寫在session-factory標簽中
    2.名稱和位置是固定的
        src hibernate.cfg.xml
-->

接下來就是測試了

public void demo() {
        // 加載hibernate核心配置文件
        Configuration configuration = new Configuration();
        configuration.configure();

        // 創建SessionFactory封裝對象
        // 這個關系中,可能會根據映射關系創建表
        SessionFactory sessionFactory = configuration.buildSessionFactory();

        // 使用SessionFactory創建Session
        // 類似Connection
        Session session = sessionFactory.openSession();

        // 開啟事務
        Transaction transaction = session.beginTransaction();

        // crud
        User user = new User();
        user.setUsername("robin");
        user.setPassword("123");

        // 調用session進行添加操作
        session.save(user);

        // 提交事務
        transaction.commit();

        // 關閉資源
        session.close();
        sessionFactory.close();
    }

Hibernate入門一