锘??xml version="1.0" encoding="utf-8" standalone="yes"?> Hibernate.cfg.xml閰嶇疆鏂囦歡錛?br />
<?xml version="1.0" encoding="utf-8"?> 鏁版嵁搴撹〃涓婚敭鐨勭煡璇嗙偣錛?br />
Generator 涓烘瘡涓?POJO 鐨勫疄渚嬫彁渚涘敮涓鏍囪瘑銆備竴鑸儏鍐碉紝鎴戜滑浣跨敤“native”銆俢lass 琛ㄧず閲囩敤鐢辯敓鎴愬櫒鎺ュ彛net.sf.hibernate.id.IdentifierGenerator 瀹炵幇鐨勬煇涓疄渚嬶紝鍏朵腑鍖呮嫭錛?/p>
“assigned” “hilo” “seqhilo” “increment” “identity” “sequence” “native” “uuid.hex” “uuid.string” “foreign” 浠ヤ笅涓句緥錛?br />
1銆佹寚瀹氬弬鏁扮殑鎯呭喌錛?br />
<id name="id" unsaved-value="0"> 2銆佸浜巗ql server2000涓殑鏁版嵁搴撳瓙澧炲瓧孌?鍦ㄩ厤緗枃浠朵嬌鐢ㄤ笅鍒楁柟娉曞疄鐜幫細 3銆佸鏋滆〃涓殑涓婚敭鐢ㄥ瓧絎︿覆綾誨瀷:鍙互鐢╤ibernate鑷繁鎻愪緵鐨勬柟娉曞疄鐜頒富閿敮涓: 閲嶈鐨勭煡璇嗙偣: 4. 鍑犱釜鍊煎緱娉ㄦ剰鐨勯棶棰? 5. hibernate涓璈QL璇█鐨勬煡璇㈡牴鎹綘鐨剆ql鐨勪笉鍚岃岃繑鍥炰笉鍚岀殑瀵硅薄綾誨瀷. package com.gpdi.test; import org.hibernate.Session; import com.gpdi.orm.object.Address; public class Testp { /** } } <?xml version="1.0" encoding="utf-8"?> </class> package com.gpdi.orm.object; import java.util.HashSet; public class People implements java.io.Serializable } 1銆佹暟鎹簱緇撴瀯 category琛細{ categoryId , categoryName } item琛細{ itemId , itemName } category_item琛細{ idCategory , idItem} 2銆丆ategory.hbm.xml 3銆両tem.hbm.xml 4銆丆ategory.java鍜孖tem.java 鏄犲皠鏂囦歡涓繕鍙互涓嶇敤set鑰岀敤bag錛屽彧瑕佹妸set鍑虹幇鐨勫湴鏂規敼鎴恇ag灝辮錛岃繖鏍風浉搴旂殑category.java鍜孖tem.java 鏂囦歡褰撲腑灝卞彲浠ョ敤List銆?/span>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- properties -->
<!-- jndi -->
<property name="connection.datasource">java:comp/env/jdbc/quickstart</property>
<property name="connection.provider_class">net.sf.hibernate.connection.DatasourceConnectionProvider</property>
<property name="dialect">net.sf.hibernate.dialect.SQLServerDialect</property>
<!-- jdbc
<property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=pubs</property>
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
-->
<property name="jdbc.fetch_size">50</property><!-- 涓嬈¤鐨勬暟鎹簱璁板綍鏁?-->
<property name="jdbc.batch_size">30</property><!-- 璁懼畾瀵規暟鎹簱榪涜鎵歸噺鍒犻櫎 -->
<property name="show_sql">true</property><!-- 灝咹ibernate鍙戦佺粰鏁版嵁搴撶殑sql鏄劇ず鍑烘潵 -->
<!-- Mapping files -->
<mapping resource="cat.hbm.xml"/>
</session-factory>
</hibernate-configuration>
涓婚敭鐢卞閮ㄧ▼搴忚礋璐g敓鎴愶紝鍦?save() 涔嬪墠鎸囧畾涓涓?/p>
閫氳繃hi/lo 綆楁硶瀹炵幇鐨勪富閿敓鎴愭満鍒訛紝闇瑕侀澶栫殑鏁版嵁搴撹〃鎴栧瓧孌墊彁渚涢珮浣嶅兼潵婧愩?/p>
涓巋ilo 綾諱技錛岄氳繃hi/lo 綆楁硶瀹炵幇鐨勪富閿敓鎴愭満鍒訛紝闇瑕佹暟鎹簱涓殑 Sequence錛岄傜敤浜庢敮鎸?Sequence 鐨勬暟鎹簱錛屽Oracle銆?/p>
涓婚敭鎸夋暟鍊奸『搴忛掑銆傛鏂瑰紡鐨勫疄鐜版満鍒朵負鍦ㄥ綋鍓嶅簲鐢ㄥ疄渚嬩腑緇存寔涓涓彉閲忥紝浠ヤ繚瀛樼潃褰撳墠鐨勬渶澶у鹼紝涔嬪悗姣忔闇瑕佺敓鎴愪富閿殑鏃跺欏皢姝ゅ煎姞1浣滀負涓婚敭銆傝繖縐嶆柟寮忓彲鑳戒駭鐢熺殑闂鏄細涓嶈兘鍦ㄩ泦緹や笅浣跨敤銆?/p>
閲囩敤鏁版嵁搴撴彁渚涚殑涓婚敭鐢熸垚鏈哄埗銆傚DB2銆丼QL Server銆丮ySQL 涓殑涓婚敭鐢熸垚鏈哄埗銆?/p>
閲囩敤鏁版嵁搴撴彁渚涚殑 sequence 鏈哄埗鐢熸垚涓婚敭銆傚 Oralce 涓殑Sequence銆?/p>
鐢?Hibernate 鏍規嵁浣跨敤鐨勬暟鎹簱鑷鍒ゆ柇閲囩敤 identity銆乭ilo銆乻equence 鍏朵腑涓縐嶄綔涓轟富閿敓鎴愭柟寮忋?/p>
鐢?Hibernate 鍩轟簬128 浣?UUID 綆楁硶 鐢熸垚16 榪涘埗鏁板鹼紙緙栫爜鍚庝互闀垮害32 鐨勫瓧絎︿覆琛ㄧず錛変綔涓轟富閿?/p>
涓巙uid.hex 綾諱技錛屽彧鏄敓鎴愮殑涓婚敭鏈繘琛岀紪鐮侊紙闀垮害16錛夛紝涓嶈兘搴旂敤鍦?PostgreSQL 鏁版嵁搴撲腑銆?/p>
浣跨敤鍙﹀涓涓浉鍏寵仈鐨勫璞$殑鏍囪瘑絎︿綔涓轟富閿?/p>
<generator class="sequence">
<param name="sequence">SEQ_CHILD</param>
</generator>
</id>
浣跨敤鐨勬槸sequence錛岄傚悎oracle鏁版嵁搴擄紱
<id name="id" type="long" unsaved-value="0">
<column name="id" sql-type="numeric" not-null="true" />
<generator class="identity" />
</id>
榪欓噷涓昏鏄?identity:浠h〃鐢眘ql server2000鏁版嵁搴撹嚜宸辨彁渚涘瓙澧炲瓧孌?濡傛灉瑕乭ibernate鑷繁鎻愪緵,鍒欑敤increment鍏抽敭瀛楁潵瀹炵幇
<id name="id" type="string" unsaved-value="null">
<column name="cid" sql-type="char(32)" not-null="true" />
<generator class="uuid.hex" />
</id>
浣跨敤鐨勬槸uuid.hex: 閲囩敤128浣嶇殑綆楁硶鏉ョ敓鎴愪竴涓?2浣嶅瓧絎︿覆銆傛渶閫氱敤鐨勪竴縐嶆柟寮忋傞傜敤浜庢墍鏈夋暟鎹簱銆?/p>
1. 濡傛灉鏈夐儴闂ㄨ〃,鏈夊憳宸ヨ〃,鍛樺伐琛ㄤ腑鏈塪ep_id,鍒欒〃閮ㄩ棬綾誨拰鍛樺伐綾繪槸one-to-many鐨勫叧緋?
鍙互浣跨敤: ( 鍦ㄩ儴闂ㄧ被department涓嬌鐢ㄤ笅鍒?
Department綾?
/** 閮ㄩ棬鐨勬墍鏈夊憳宸?#160; */
private Set staffs = new TreeSet();
xml鐨勬枃浠?
<set name="staffs" >
<key column="dep_id"/>
<one-to-many class="hbp.sys.data.Staff"/>
</set>
濡傛灉鏄痩ist,闇瑕佺敤绱㈠紩<index> </index>,鍏蜂綋鍏朵腑鐨勫惈涔?涓嶆槸寰堟槑鐧?寰呬互鍚庣爺絀?br />
2. 濡傛灉閮ㄩ棬瑕佹湁涓涓礋璐d漢,鍗抽儴闂ㄨ〃(tb_department)涓湁涓涓瓧孌?staff_id.
閭d箞琛ㄧず閮ㄩ棬鍜岃礋璐d漢涔嬮棿鐨勫叧緋繪槸many-to-one鐨勫叧緋?br />
Department綾?
/** 閮ㄩ棬璐熻矗浜篿d */
private Staff staff;
xml 鏂囦歡
<many-to-one name="staff" class="hbp.sys.data.Staff" column="staff_id"/>
3. 澶氬澶氬叧緋?涓鑸垜浠槸鍋氫竴涓腑闂村叧鑱旇〃.鎴戠敤瑙掕壊鍜屾潈闄愬仛浜嗕釜渚嬪瓙,
Right(id,name) Role(id,name) 涓棿琛?tb_role_right(role_id,right_id)
Right綾諱腑鏈変竴涓猂ole鐨勯泦鍚?private Set roles=new TreeSet();
Role綾諱腑涔熸湁涓涓猂ight鐨勯泦鍚?private Set rights=new TreeSet();
鍒欎袱鑰呮槸鏄庢樉鐨勫瀵瑰鍏崇郴.浣跨敤many-to-many鏉ュ疄鐜?
xml鏂囦歡涓?br />
right.hbm.xml:濡備笅:
<set name="roles" table="tb_role_right" cascade="all">
<key column="right_id"/>
<many-to-many column="role_id" class="hbp.sys.data.Role"/>
</set>
role.hbm.xml鏂囦歡涓被浼?
<set name="rights" table="tb_role_right" cascade="all">
<key column="role_id"/>
<many-to-many column="right_id" class="hbp.sys.data.Right"/>
</set>
a)鍦▁ml?鏄犲皠鏂囦歡涓?鍐欑被鐨勫悕瀛楁椂涓瀹氱敤綾葷殑鍏ㄥ悕:鍗?鍖?綾誨悕濡?(hbp.sys.data.Staff),榪欎釜閿欒浣挎垜璐逛簡鍗婂ぉ鍔?:(
b)鎴戝湪鍐欏疄鐜板熀鏈珼AO鎿嶄綔鏃?鍐欎簡
session.delete("from Right as right where right.id="+id);
紼嬪簭姝繪椿鎶ラ敊,鎴戞姌鑵句簡鍗婂ぉ,璺熻釜鍒板簳,鎵嶆亶鐒跺ぇ鎮?hibernate鍦ㄨВ鏋恠ql璇彞鐨勬椂鍊欐妸
鍏朵腑鐨剅ight,褰撴垚浜嗘暟鎹簱涓殑鍙寵繛鎺?"淇濈暀瀛?),鍞?榪欑鍏抽敭瀛?涓嶈兘闅忎究鐢ㄥ晩,:)
濡傛灉浣犱嬌鐢╯ession.find(String hql)
涓鑸細榪斿洖涓涓狶ist,濡?from Staff staff;榪斿洖鐨勬槸鍖呭惈鎵鏈夌殑鍛樺伐瀵硅薄鐨勯泦鍚?br />
濡備綘鐨刪ql涓?select count(*) from Staff staff;鍒欒繑鍥炵殑鏄竴涓狪nteger瀵硅薄
濡傛灉浣犱嬌鐢ㄧ殑hql涓?select count(distinct staff.name),count(*) from Staff staff;鍒欒繑鍥炵殑鏄竴涓狾bject
鍗砄bject[],闇瑕佸厛鎶婁粬杞崲鎴怬bject[],鐒跺悗鍦ㄥ彇[0],[1].
榪欑璁捐鎴戜笉鐭ラ亾hibernate鏄浣曞鐞嗙殑,鎰熻鏃㈠ソ涔熶笉濂?濂界殑鏄彲浠ヤ嬌鐢ㄤ竴涓猣ind鑾峰緱浠繪剰鏌ヨ
涓嶅ソ鍦ㄤ簬鏍規嵁hql鏉ュ鐞嗚繑鍥炵粨鏋?瀹規槗鍑洪敊.
<property name="hibernate.query.factory_class">
org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</property>
people琛細{peopleId,name}
address琛細{addressId,peopleId,addressName,codeNumber}
import com.gpdi.orm.object.People;
* @param args
*/
public static void main(String[] args)
{
People people = new People();
people.setName("linda");
Address address = new Address();
address.setAddressName("yunnan");
address.setCodeNumber("564123");
address.setPeople(people);
people.getAddresses().add(address);
Session session = HibernateSessionFactory.currentSession();
session.beginTransaction();
session.save(people);
session.getTransaction().commit();
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.gpdi.orm.object.People" table="People">
<id name="id" column="peopleId" unsaved-value="0" >
<generator class="increment">
</generator>
</id>
<property name="name" column="name"></property>
<set name="addresses" cascade="save-update">
<key column="peopleId" not-null="true" />
<one-to-many class="com.gpdi.orm.object.Address"/>
</set>
</hibernate-mapping>
import java.util.Set;
{
private long id;
private String name;
private Set addresses = new HashSet();
public Set getAddresses() {
return addresses;
}
public void setAddresses(Set addresses) {
this.addresses = addresses;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.gpdi.orm.object.Address" table="Address">
<id name="id" column="addressId" unsaved-value="0">
<generator class="increment">
</generator>
</id>
<many-to-one name="people" column="peopleId" insert="false" update="false"></many-to-one>
<property name="addressName" column="addressName"></property>
<property name="codeNumber" column="codeNumber"></property>
</class>
</hibernate-mapping>
Address.java
package com.gpdi.orm.object;
public class Address implements java.io.Serializable
{
private long id;
private People people;
private String addressName;
private String codeNumber;
public String getAddressName() {
return addressName;
}
public void setAddressName(String addressName) {
this.addressName = addressName;
}
public String getCodeNumber() {
return codeNumber;
}
public void setCodeNumber(String codeNumber) {
this.codeNumber = codeNumber;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public People getPeople() {
return people;
}
public void setPeople(People people) {
this.people = people;
}
}
涓嬭澆渚嬪瓙:鏁寸悊鍚?br />
涓瀵瑰鐨勫畬鏁翠緥瀛?/a>
涓嬭澆渚嬪瓙:鏁寸悊鍓?br />
Hibernate澶氬澶氬弻鍚戝叧鑱旀槧灝?
<hibernate-mapping>
<class name="com.persistent.Category" table="category">
<id name="id" column="categoryId" unsaved-value="null">
<generator class="increment"></generator>
</id>
<property name="name" column="categoryName"></property>
<set name="items" table="category_item" cascade="all" lazy="false">
<key column="idCategory"></key>
<many-to-many class="com.persistent.Item" column="idItem"></many-to-many>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.persistent.Item" table="item">
<id name="id" column="itemId" unsaved-value="null">
<generator class="increment"></generator>
</id>
<property name="name" column="itemName"></property>
<set name="categories" table="category_item" lazy="false" inverse="true">
<key column="idItem"></key>
<many-to-many class="com.persistent.Category" column="idCategory"></many-to-many>
</set>
</class>
</hibernate-mapping>
public class Category {
private Long id;
private String name;
private Set items = new HashSet();
...
}
public class Item {
private Long id;
private String name;
private Set categories = new HashSet();
...
}
鍓嶆湡鐨勭郴緇熷垱寤恒乻truts銆乭ibernate銆乻pring鐨勯泦鎴愬伐浣滃氨涓嶇敤璇翠簡錛屼竴璺笅鏉?#8230;………
涓昏鐪?span class="hilite1">DWR鐨勫簲鐢紝瀹冪敤浜庤〃鍗曢獙璇侊細
1銆佸厛鐪嬪畠鐨勯厤緗細
錛?錛夊湪web.xml閲屽姞涓婏細
錛?錛夊啀寤轟竴涓被錛岀敤浜庤幏鍙栭獙璇佽緭鍑轟俊鎭殑灞炴ф枃浠訛紝榪欎釜鏂囦歡鏄弬鑰冧簡鑹憶鏍?鐨?strong>DWR 鍏ラ杸鑸囨噳鐢紙涓錛?/font>
閲岀殑Book浠g爜
java 浠g爜
錛?錛夌紪鍐欏睘鎬ф枃浠?span class="hilite1">dwrPro_zh_CN.propertie錛堜腑鏂囷級鍜?span class="hilite1">dwr_en.properties錛堣嫳鏂囷級
錛?錛夐厤緗?span class="hilite1">dwr.xml錛岄噷闈㈢敤浜唖pring鐨刡ean 鍜宩ava綾?/p>
spring beanName 鐨剉alue =“userManager”浠巃pplicationContext.xml閲屽彇寰?/p>
榪欓噷搴旇澶у閮芥噦錛屽氨涓嶇綏鍡︿簡
錛?錛夐厤濂戒簡榪欎簺錛屽氨鍙互鍦ㄩ〉闈㈤噷鐢ㄤ簡
璇誨彇dwr.xml鐨?font face="Arial">userManager錛岀劧鍚庤鍙朼pplicationContext.xml閲?font face="Arial">userManager bean 錛岃繘鑰屽疄琛?font face="Arial">findUserIsExist鏂規硶銆?/font>
package com.gpdi.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class TestMain {
/**
* 瀛樺偍涓涓敤鎴?br />
* @param user
*/
public void save(User user){
user.setUsername("TEST");
Card card=new Card();
//Card card1=new Card();
card.setCardnum("HGJUYT");
//card1.setCardnum("fghy55");
user.setCard(card);
//user.setCard(card1);
Session session=HibernateSessionFactory.currentSession();
card.setUser(user);
//card1.setUser(user);
Transaction tr=session.beginTransaction();
session.save(user);
//session.save(card);
tr.commit();
session.close();
}
public static void main(String[] args) throws Exception {
TestMain test=new TestMain();
test.save(new User());
}
}
Card.java
package com.gpdi.test;
/**
* Card generated by MyEclipse - Hibernate Tools
*/
public class Card implements java.io.Serializable {
// Fields
private Integer cardid;
private String cardnum;
private User user;
// Constructors
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
/** default constructor */
public Card() {
}
/** full constructor */
public Card(String cardnum) {
this.cardnum = cardnum;
}
// Property accessors
public Integer getCardid() {
return this.cardid;
}
public void setCardid(Integer cardid) {
this.cardid = cardid;
}
public String getCardnum() {
return this.cardnum;
}
public void setCardnum(String cardnum) {
this.cardnum = cardnum;
}
}
User.java
package com.gpdi.test;
import java.util.HashSet;
import java.util.Set;
/**
* User generated by MyEclipse - Hibernate Tools
*/
public class User implements java.io.Serializable {
// Fields
private Integer userid;
private String username;
private Card card;
//private Set card = new HashSet();
// Constructors
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
/** default constructor */
public User() {
}
/** full constructor */
public User(String username) {
this.username = username;
}
// Property accessors
public Integer getUserid() {
return this.userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
}
HibernateSessionFactory.java
package com.gpdi.test;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html}.
*/
public class HibernateSessionFactory {
/**
* Location of hibernate.cfg.xml file.
* NOTICE: Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file. That
* is place the config file in a Java package - the default location
* is the default Java package.<br><br>
* Examples: <br>
* <code>CONFIG_FILE_LOCATION = "/hibernate.conf.xml".
* CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".</code>
*/
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
/** Holds a single instance of Session */
private static final ThreadLocal threadLocal = new ThreadLocal();
/** The single instance of hibernate configuration */
private static final Configuration cfg = new Configuration();
/** The single instance of hibernate SessionFactory */
private static org.hibernate.SessionFactory sessionFactory;
/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the <code>SessionFactory</code> if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
/**
* Default constructor.
*/
private HibernateSessionFactory() {
}
}
Card.hbm.xml