多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 數(shù)據(jù)庫 > 數(shù)據(jù)庫應用 > JPA(三):JPA+Hibernate 基礎(chǔ)學習

JPA(三):JPA+Hibernate 基礎(chǔ)學習

來源:程序員人生   發(fā)布時間:2015-05-12 09:01:38 閱讀次數(shù):3885次

      在該系列的第1篇文章中,我們已提到JPA和Hibernate。下圖是二者在系統(tǒng)架構(gòu)中的作用:


      由以上圖片我們可以得出兩個結(jié)論:首先JPA的主要作用就是持久化操作;其次JPA只是1種規(guī)范,它需要1種實現(xiàn),正如上圖顯示的,Hibernate、oPenJPA等等。簡單些,可以說JPA只是1套接口,本身不能完成任何事情。      
      而這篇博文的主要內(nèi)容就是對JPA和Hibernate學習的1個總結(jié)。首先來看1個最簡單的入門demo。

      所需jar包:

     hibernate3.jar

     hibernate-cglib-repack⑵.1_3.jar

     slf4j-api⑴.5.2.jar

     javassist⑶.4.GA.jar

     jta⑴.1.jar

     antlr⑵.7.6.jar

     commons-collections⑶.1.jar

     dom4j⑴.6.1.jar

     ejb3-persistence.jar

     hibernate-annotations.jar

     hibernate-commons-annotations.jar

     hibernate-entitymanager.jar

     log4j.jar

     slf4j-log4j12.jar

 

      創(chuàng)建實體類:

 

/*********************************************************************** * 模塊: BuildType.java * 作者: Jones * 說明: Defines the Class BuildType * 日期: 2014年12月2日 20:56:11 ***********************************************************************/ package com.tgb.itoo.basic.entity; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import org.codehaus.jackson.annotate.JsonIgnore; import org.hibernate.annotations.GenericGenerator; /** * 建筑類型 */ @Entity @Table(name = "TB_BuildType") //默許情況下表名稱是根據(jù)實體類名稱創(chuàng)建的,name可以修改表名稱 public class BuildType extends EntityDelete{ @Id @GenericGenerator(name = "uuidGenerator", strategy = "com.tgb.itoo.base.util.uuid.Base58UuidGenerator") @GeneratedValue(generator = "uuidGenerator") @Column(name = "id", length = 22) private String id; /** * 類型代碼 * */ @Column(name = "buildTypeCode", length = 255) private String buildTypeCode; /** * 類型名稱 */ @Column(name = "buildTypeName", length = 255) private String buildTypeName; /** * 建筑類型中有的建筑信息 */ @JsonIgnore @OneToMany(cascade = CascadeType.ALL, mappedBy = "buildType", targetEntity = Build.class) private Set<Build> builds = new HashSet<Build>(); //*************************get/set方法*******************************// /** * 建筑類型中有的建筑信息 */ public Set<Build> getBuilds() { return builds; } /** * 建筑類型中有的建筑信息 */ public void setBuilds(Set<Build> builds) { this.builds = builds; } /** * 類型代碼 */ public String getBuildTypeCode() { return buildTypeCode; } /** * 類型代碼 */ public void setBuildTypeCode(String buildTypeCode) { this.buildTypeCode = buildTypeCode; } /** * 類型名稱 */ public String getBuildTypeName() { return buildTypeName; } /** * 類型名稱 */ public void setBuildTypeName(String buildTypeName) { this.buildTypeName = buildTypeName; } /** * 主鍵id */ public String getId() { return id; } public void setId(String id) { this.id = id; } }

      其中主鍵生成策略@GeneratedValue(strategy=GenerationType.AUTO)中:

(1)值為AUTO表示根據(jù)數(shù)據(jù)庫由Hibernate自動選擇生成策略,也能夠省略寫@GeneratedValue

(2)值為IDENTITY表示主鍵自增長

(3)值為SEQUENCE表示主鍵采取序列的方式

(4)值為TABLE各個數(shù)據(jù)庫都通用,但效力較低

 

      創(chuàng)建完實體類以后,就需要寫JPA的配置文件了。JPA規(guī)范要求配置文件在類路徑的META-INF目錄下放置名稱為固定的的,即persistence.xml

<?xml version="1.0" encoding="UTF⑻"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <!-- 持久化單元,transaction-type事務類型包括全局事務類型JTA和本地事務類型 RESOURCE_LOCAL--> <persistence-unit name="basic-entity" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:jboss/datasources/JcMysqlDS</jta-data-source> <properties> <!-- 數(shù)據(jù)庫方言 --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> </properties> </persistence-unit> </persistence>

     其中<property name="hibernate.hbm2ddl.auto" value="update" />表示建表方式,value值為creat-drop時表示創(chuàng)建利用的時候建表,結(jié)束利用的時候表自動刪除值為update表示如果映照元數(shù)據(jù)不存在則建立表,如果映照元數(shù)據(jù)存在并新增加了字段則會添加到數(shù)據(jù)庫表中


      測試類:

public class PersonTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void save(){ //Persistence.createEntityManagerFactory("jpa")與配置文件中的持久化單元名稱必須相同 EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); //保存(持久化)方法 em.persist(new Person("Tom")); em.getTransaction().commit(); em.close(); factory.close(); } }

     其中EntityManagerFactory相當于Hibernate中的sessionFactory,EntityManager則相當于Hibernatesession。不過在這里值得注意的是,關(guān)于EntityManager的獲得分別有兩種不同的方式。1種是@PersistenceContex注入;另外一種則是 JNDI取得。

     這樣1個簡單的JPA+Hibernate就能夠履行數(shù)據(jù)庫持久化操作了。你明白了?

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日韩在线视频不卡一区二区三区 | 色妞在线影院色 | 国产亚洲精品久久久久久久网站 | 亚洲欧美日韩中文综合v日本 | 毛片最新网址 | 亚洲一区二区精品视频 | 成人免费毛片一区二区三区 | 波多野结衣 在线资源观看 波多野结衣 一区二区 | 最新国产精品亚洲二区 | 欧美一级欧美三级在线观看 | 加勒比一本大道香蕉在线视频 | 日韩午夜网站 | 久草福利在线视频 | 日本一级毛片在线观看 | 中文字幕在线视频网 | 综合亚洲一区二区三区 | 免费欧洲毛片a级视频无风险 | 国产精品欧美一区二区三区不卡 | 操片 | 午夜视频网站在线观看 | 精品第一页 | 看性过程三级视频在线观看 | 在线观看中文字幕 | 日韩欧美一区二区精品久久 | 69xxxx女人免费 | 在线视频h| 视频在线国产 | 在线中文字幕第一页 | tube 欧美巨大tvhd | videos粗暴极端欧美 | 国产成人精选视频69堂 | 精品一区二区三区高清免费不卡 | 老司机午夜免费福利 | 伊人色婷婷综在合线亚洲 | 亚洲一区二区三区不卡视频 | 欧美黄色片一级 | 俺去啦最新网址 | 微信影院手机在线播放 | 性久久久久久 | 日本三级日本三级日本三级极 | 五月婷婷在线视频观看 |