這里所說的1對1 其實就是表和表的之間的關系! 其實1對1是1對多的特例,1對多是多對多的特例。
在hibernate里實現1對1 其實就把把表用對象來表示!讓2個表產生一對一的關系!例如 一個人有一個身份
證。是先有人,后才有的身份證的!所以 可以看做人的身份號ID是自己的主鍵,省份證的ID是自己的主鍵。而證表的ID引用人表的ID來當自己的外鍵! 當我們想添加一個人的 時候!可以自動添加一個 身份出來!
現在具體來說明下!
步驟:
1 新建設一個j2ee的web project
2?添加hibernate包,user libraries不選 白色框里2個都選 單選框選下面一個。
?? 2.1需要配置個數據連接 操作:new的下一步,復選框的溝去掉-》下一部門-》
?? 2.2建立一個存放sessionFoctory工廠的包如 org.hibernate--》完成
3 這時候hibernate.cfg.xml產生 還產生了一個HibernateSessionFactory的session的工廠類
4 需要給hibernate.cfg.xml里寫數據庫的連接:下面以sql數據庫的連接來講解:
4.1 在hibernate.cfg.xml的設計器里點:new
4.2 .Profile name:隨便寫 只要不重復
4.3如果沒有你需要的Driver 就自己新建一個 點超級連接configure那個
4.4在下拉框里選你要連的數據庫。如過你選sql server
4.5在url里? 填jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs
4.6倒入sqlserver連java的3個jar包 點add jars選擇你要的jars包 點確定
4.7填 name和pwd下一部——>完成
至此數據庫?hibernate.cfg.xml已經配置完畢。
5下面需要把數據表? 轉成 類
講解
1切換到數據庫的模式下,選到你要轉成類的表!
2右鍵,倒數第2個選
3選擇一個包。一般我們起的名字叫bean
4第一個復選框 是說是否產生這個類的hbm.xml文件
5第2個復選框就是問 需要產生一個抽象的 類不
6 我們選擇一個包,把前2個復選的點上 就ok了下一部
7給我們的主鍵 選擇適合的增長方式!一般選native如果是外鍵就是foreign--->完成
6--另外一個類 雷同 我就不講了只是?增長方式 用foreign表示 表示根據別的表來設置自己
? 下面講怎么把2個表的一對一關系 搞出來!
???增長一個人的時候 就會增長一個證 !?所以證 應該成為 人 類的一個屬性,同時我們給他get,set?方法
??而且證里 id是通過人里id在設置的,所以 證里 也應該 包含人 這個類的對象作為屬性!用老師的話說
就是你中有我,我中有你!testTable類 相當與人???car類相當與證???
alt+shift+s可以倒到屬性的get 和set方法
7配置他們各自的***.hbm.xml文件
作為主表的 人類(textTable)中 應該加如下代碼:(代碼應寫在<class></class>里)
<one-to-one name="car"? class="org.bean.Car" cascade="all"></one-to-one>
解釋一下:one-to-one表示現在2個表的關系是一對一 name里的car就是 textTable 里一個屬性 的對象名
這個對象就是 我要關聯那個表的類的對象名! cascade=''all" 表示現在這個表是主動表
作為從表的 證類(Car)中加入如下代碼:
<one-to-one name="testTable" class="org.bean.TestTable"></one-to-one>
補充說明下:雖然這個類和 這個xml在一個文件夾里,但是并不表示一個包里,所以我們寫class的值的時候要寫全稱的路徑。
重點:因為 這個表是從表,他的id要跟隨的主表的變化而變化 所以 因該在id里加 如:
<param name="property">testTable</param>
解釋:name="property"表示引用的是屬性?? testTable表示引用的值 這個值就是另一個類?,他現在作為一個屬性放在了當前類里。這樣:我們就把主表的主鍵和從表的主鍵關聯起來了!并且從表的主鍵引用主表的主鍵當自己的外鍵。
8以上完成了 2個表的連接,關系操作!了?? 下面 我們就要進行一個插入操作 ,看我們插入一個人的時候,是否也能插入一個證!
9新建設servlet其中? 注意他在web-xml中是如何配置的!到時候jsp里訪問就容易了!
???新建2個表的類的對象! 給其中不是相關的屬性 通過set方法 給值。
如:Car car=new Car();
??TestTable testTable=new TestTable();
testTable.setUsername("wudi");
??testTable.setCar(car);
??car.setTestTable(testTable);
??car.setCarMoney(new Integer(123));
需要調用 主表的 dao類中的save方法 進行插入 同時把主表的對象 作為參數傳過去
9建立一個存放Dao的包dao 和一個我們要在TestTable這個表上進行一系列操作的類? TestTableDao
???public void save(TestTable table)
?{
??Session session=HibernateSessionFactory.getSession();
??Transaction tx=session.beginTransaction();
??
??session.save(table);
??tx.commit();
?}
說明 先產生hibernateSessionFactory工廠子類的對象!然后 用他產生事物的對象!
在用他調用save ()方法?其實這就是hql語言?就是insert方法!最后提交事物
?