日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate简单例子以及笔记

發布時間:2023/12/4 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate简单例子以及笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


先創建Person類,代碼如下:(Person.java)

import java.util.*;

public class Person {

public int id;

public String name;

public String password;

public Date birthday;

public Person() {

}

public Person(String name, String password, Date birthday) {

super();

this.name = name;

this.password = password;

this.birthday = birthday;

}

@Override

public String toString() {

return "Person [id=" + id + ", name=" + name + ", password=" + password

+ ", birthday=" + birthday + "]";

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public Date getBirthday() {

return birthday;

}

public void setBirthday(Date birthday) {

this.birthday = birthday;

}

}

創建person的映射,代碼如下:(Person.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>

? ? <!-- 配置要映射的類 -->

? ? <class name="Person" table="person" >

? ? ? ? <id name="id" column="id">

? ? ? ? ? ? <generator class="native"/>

? ? ? ? </id>

? ? ? ? <!-- column如果不寫,那么會根據name中的值,自動創建;若已存在的話,那就自動映射 -->

? ? ? ? <property name="name"></property>

? ? ? ? <property name="password" column="password"></property>

? ? ? ? <property name="birthday" column="birthday"></property>

? ? </class>


</hibernate-mapping>

? ?


配置Hibernate文件,代碼如下:(hibernate.cfg.xml)

<!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>

<!-- 那些name的屬性的值都可以從hibernate文件包中的hibernate.properties拷貝,根據不同數據庫類型,復制不同的語句 -->

<!-- ?數據庫方言,就是能讓數據庫發揮最大的特性 ?-->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 加載數據庫的驅動 -->

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<!-- 要連接的數據庫,相當于獲取連接吧 -->

<property name="hibernate.connection.url">jdbc:mysql:///hibernatedemo</property>

<!-- 數據庫賬號 -->

<property name="hibernate.connection.username">root</property>

<!-- ?數據庫密碼 ?-->

<property name="hibernate.connection.password">123456</property>

<property name="show_sql">true</property>

<!-- 若表不存在,,添加這句可以自動建表 -->

<!--?

create-drop 每次啟動時候創建對應數據表結構,在SessionFactory關閉時候刪除對應的表結構

create 每次啟動時候刪除上次創建的表結構然后重新創建一個新的表結構

validate 每次啟動時候會驗證并修改表結構

-->

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 映射,這個resource的路徑一定要寫正確,要寫上包名,可以右擊那個文件,選擇roperties就可以看到路徑,把src后面的復制黏貼過來即可 -->

<mapping resource="Person.hbm.xml"/>

</session-factory>

</hibernate-configuration>


創建Test類,主要用于測試各個功能,代碼如下:(Test.java)

import org.hibernate.*;

import org.hibernate.cfg.*;

import org.hibernate.metamodel.source.annotations.entity.ConfiguredClass;

import org.hibernate.service.ServiceRegistry;

import org.hibernate.service.ServiceRegistryBuilder;

import org.hibernate.service.spi.ServiceBinding;


public class Test {

public static void main(String[] args) {

// test();


// sava();


// get();


// load();


// update1();


// update2();


// merge1();


merge2();


}



private static void merge2() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

Person p1 = new Person();

p1.setId(4);

p1.setName("tttmm");

Person p2 = (Person) session.merge(p1);

p1.setName("uuudhaf");

p2.setName("kkkkjjss");

tx.commit();

session.close();

}


private static void merge1() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

Person p1 = (Person) session.load(Person.class, 3);

p1.setName("jjoo");

Person p2 = (Person) session.merge(p1);

// p1.setName("oojj");

// p2.setName("qqww");


p2.setName("qqww");

p1.setName("oojj");


tx.commit();

session.close();

}


private static void update2() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

Person p1 = new Person();

p1.setName("ooxx");// 同樣執行這句時候,因為p1是臨時態,因此此時的name并沒有改變

p1.setId(4);

// session.update(p1);

// p1.setName("xxoo");

tx.commit();

session.close();

}


private static void update1() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

Person p1 = (Person) session.get(Person.class, 3);

p1.setName("tom"); // 這句執行完畢的時候,數據庫中的name已經變成了tom了。這就是持久態的一種作用。

// session.update(p1);

// p1.setName("lalala");

// //此時數據庫中的name變成了lalala,就是上面說的實時改動,也可看做是一種數據庫一天記錄的引用,,,一有改變就改變。

tx.commit();

session.close();

}


private static void load() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Person p = (Person) session.load(Person.class, 3);

System.out.println("load----->" + p);

session.close();

}


private static void get() {

Configuration config = new Configuration().configure();

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Person p = (Person) session.get(Person.class, 1);

System.out.println("get----->" + p);

session.close();

}


private static void sava() {

Person p = new Person("kkjj", "123456", new java.util.Date());

Configuration config = new Configuration().configure();

// 這是在hibernate4一種新的獲取SessionFactory的方法,這個方法比舊的方法更高效、安全

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry();

SessionFactory factory = config.buildSessionFactory(sr);

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

session.save(p);

tx.commit();

session.close();

}


private static void test() {

Person p = new Person("kk", "123", new java.util.Date());

// 讀取配置文件

Configuration cfg = new Configuration().configure();

// hibernate的核心接口

// 下面這種方法獲取SessionFactory已經被淘汰了,在hibernate4已經用另外的方法了。

SessionFactory factory = cfg.buildSessionFactory();

Session session = factory.openSession();

// 開啟事務

Transaction tx = session.beginTransaction();



session.save(p);

// 提交,類似執行吧,可以理解為excetuUpdate()

tx.commit();

session.close();

}

}



轉載于:https://blog.51cto.com/773478496/1584571

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Hibernate简单例子以及笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。