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简单例子以及笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MYSQL性能优化分享(分库分表)
- 下一篇: IOS开发学习的有用链接