关于如何配置请参看:Hibernate学习笔记(一)--用MyEclipse 6.5+MySQL 5.0的环境跑起来
准备:建表
用MySQL在名为STMS数据库中建表personx
src/org.lxh.hibernate2.Personx.java
1
package
org.lxh.hibernate2;
2
3 /** */ /**
4 * @author ∪∩BUG E-mail: [email protected]
5 * @version Aug 31, 2008 9:56:51 AM @ POJO类
6 */
7
8 // 实现复合主键应满足的要求:1.本类必须实现Serializable 接口
9 public class Personx implements java.io.Serializable {
10
11 private PersonxId id;
12 private int age;
13
14 public Personx() {
15 }
16
17 public PersonxId getId() {
18 return this.id;
19 }
20
21 public void setId(PersonxId id) {
22 this.id = id;
23 }
24
25 public int getAge() {
26 return age;
27 }
28
29 public void setAge(int age) {
30 this.age = age;
31 }
32}
2
3 /** */ /**
4 * @author ∪∩BUG E-mail: [email protected]
5 * @version Aug 31, 2008 9:56:51 AM @ POJO类
6 */
7
8 // 实现复合主键应满足的要求:1.本类必须实现Serializable 接口
9 public class Personx implements java.io.Serializable {
10
11 private PersonxId id;
12 private int age;
13
14 public Personx() {
15 }
16
17 public PersonxId getId() {
18 return this.id;
19 }
20
21 public void setId(PersonxId id) {
22 this.id = id;
23 }
24
25 public int getAge() {
26 return age;
27 }
28
29 public void setAge(int age) {
30 this.age = age;
31 }
32}
通过Hibernate反向工程建立personx表与Personx类的映射
首先调出DB Browser视图(Windows—view show—other—MyEclipse datebase—DB Browser)—展开MySQL_localhost至表person—右键表personx—Hibernate Reverse Engineering
src/org.lxh.hibernate2.PersonxId.java
1
package
org.lxh.hibernate2;
2
3 import org.apache.commons.lang.builder.EqualsBuilder;
4 import org.apache.commons.lang.builder.HashCodeBuilder;
5 import org.lxh.hibernate1.Personx;
6
7 /** */ /**
8 * @author ∪∩BUG E-mail: [email protected]
9 * @version Aug 31, 2008 9:56:51 AM @ 复合主键类
10 */
11 // 实现复合主键应满足的要求:
12 // 1.本类必须实现Serializable 接口
13 // 2.复写equals(比较对象)和hashCode(取得Hash编码)方法(可用commons-lang-2.4.jar来复写,
14 // 下载: http://apache.mirror.phpchina.com/commons/lang/binaries/commons-lang-2.4-bin.zip )
15 public class PersonxId implements java.io.Serializable {
16
17 // Fields
18
19 private String name;
20 private String phone;
21
22 // Constructors
23
24 /** *//** default constructor */
25 public PersonxId() {
26 }
27
28 /** *//** full constructor */
29 public PersonxId(String name, String phone) {
30 this.name = name;
31 this.phone = phone;
32 }
33
34 // Property accessors
35
36 public String getName() {
37 return this.name;
38 }
39
40 public void setName(String name) {
41 this.name = name;
42 }
43
44 public String getPhone() {
45 return this.phone;
46 }
47
48 public void setPhone(String phone) {
49 this.phone = phone;
50 }
51
52 // 修改复写equals的方法
53 public boolean equals(Object obj) {
54 if (this == obj) {
55 return true;
56 }
57
58 // 如果不是Personx的实例
59 if (!(obj instanceof Personx)) {
60 return false;
61 }
62 PersonxId p = (PersonxId) obj;
63 return new EqualsBuilder().append(this.name, p.getName()).append(
64 this.phone, p.getPhone()).isEquals();
65 }
66
67 //修改复写hashCode的方法
68 public int hashCode() {
69 return new HashCodeBuilder().append(this.name).append(
70 this.phone).toHashCode();
71 }
72
73}
2
3 import org.apache.commons.lang.builder.EqualsBuilder;
4 import org.apache.commons.lang.builder.HashCodeBuilder;
5 import org.lxh.hibernate1.Personx;
6
7 /** */ /**
8 * @author ∪∩BUG E-mail: [email protected]
9 * @version Aug 31, 2008 9:56:51 AM @ 复合主键类
10 */
11 // 实现复合主键应满足的要求:
12 // 1.本类必须实现Serializable 接口
13 // 2.复写equals(比较对象)和hashCode(取得Hash编码)方法(可用commons-lang-2.4.jar来复写,
14 // 下载: http://apache.mirror.phpchina.com/commons/lang/binaries/commons-lang-2.4-bin.zip )
15 public class PersonxId implements java.io.Serializable {
16
17 // Fields
18
19 private String name;
20 private String phone;
21
22 // Constructors
23
24 /** *//** default constructor */
25 public PersonxId() {
26 }
27
28 /** *//** full constructor */
29 public PersonxId(String name, String phone) {
30 this.name = name;
31 this.phone = phone;
32 }
33
34 // Property accessors
35
36 public String getName() {
37 return this.name;
38 }
39
40 public void setName(String name) {
41 this.name = name;
42 }
43
44 public String getPhone() {
45 return this.phone;
46 }
47
48 public void setPhone(String phone) {
49 this.phone = phone;
50 }
51
52 // 修改复写equals的方法
53 public boolean equals(Object obj) {
54 if (this == obj) {
55 return true;
56 }
57
58 // 如果不是Personx的实例
59 if (!(obj instanceof Personx)) {
60 return false;
61 }
62 PersonxId p = (PersonxId) obj;
63 return new EqualsBuilder().append(this.name, p.getName()).append(
64 this.phone, p.getPhone()).isEquals();
65 }
66
67 //修改复写hashCode的方法
68 public int hashCode() {
69 return new HashCodeBuilder().append(this.name).append(
70 this.phone).toHashCode();
71 }
72
73}
src/org.lxh.hibernate2.PersonxOperate.java
1
package
org.lxh.hibernate2;
2
3
4 import org.hibernate.Session;
5 import org.hibernate.cfg.Configuration;
6
7 /** */ /**
8 * @author ∪∩BUG E-mail: [email protected]
9 * @version Aug 31, 2008 9:56:51 AM
10 * @ 具体操作Hibernate的类
11 */
12 public class PersonxOperate {
13 // 在Hibernate中所有的操作都是通过Session来完成
14 private Session session;
15
16 // Session 是一个接口,必须实例化
17 // 在构造方法中实例实化Session对象
18 public PersonxOperate() {
19 // 找到Hibernae配置文件,从全局文件中取出SessionFactory,从sessionFactory中取出一个session
20 this.session = new Configuration().configure().buildSessionFactory()
21 .openSession();
22 }
23
24 // 所有的操作都是通过Session进行
25 // (1)增加操作
26 public void insert(Personx p) {
27 // 将数据存放到数据库中
28 this.session.save(p);
29
30 // 事务提交
31 this.session.beginTransaction().commit();
32 }
33}
34
2
3
4 import org.hibernate.Session;
5 import org.hibernate.cfg.Configuration;
6
7 /** */ /**
8 * @author ∪∩BUG E-mail: [email protected]
9 * @version Aug 31, 2008 9:56:51 AM
10 * @ 具体操作Hibernate的类
11 */
12 public class PersonxOperate {
13 // 在Hibernate中所有的操作都是通过Session来完成
14 private Session session;
15
16 // Session 是一个接口,必须实例化
17 // 在构造方法中实例实化Session对象
18 public PersonxOperate() {
19 // 找到Hibernae配置文件,从全局文件中取出SessionFactory,从sessionFactory中取出一个session
20 this.session = new Configuration().configure().buildSessionFactory()
21 .openSession();
22 }
23
24 // 所有的操作都是通过Session进行
25 // (1)增加操作
26 public void insert(Personx p) {
27 // 将数据存放到数据库中
28 this.session.save(p);
29
30 // 事务提交
31 this.session.beginTransaction().commit();
32 }
33}
34
src/org.lxh.hibernate2.Test.java
1
package
org.lxh.hibernate2;
2
3
4
5 /** */ /**
6 * @author ∪∩BUG E-mail: [email protected]
7 * @version Aug 31, 2008 9:54:16 AM
8 * @测试类
9 */
10 public class Test {
11
12 /** *//**
13 * @param args
14 */
15 public static void main(String[] args) {
16 Personx p = new Personx();
17 PersonxId pk = new PersonxId();
18
19 //name,phone在表中是主键当插入值为空时将无法插入
20// p.setAge(4);
21// p.setName("Hibernate");
22// p.setPhone("123456");
23
24 p.setAge(2);
25 pk.setName("MySQL");
26 pk.setPhone("87654");
27 p.setId(pk);
28 PersonxOperate po = new PersonxOperate();
29 po.insert(p);
30 }
31
32}
33
2
3
4
5 /** */ /**
6 * @author ∪∩BUG E-mail: [email protected]
7 * @version Aug 31, 2008 9:54:16 AM
8 * @测试类
9 */
10 public class Test {
11
12 /** *//**
13 * @param args
14 */
15 public static void main(String[] args) {
16 Personx p = new Personx();
17 PersonxId pk = new PersonxId();
18
19 //name,phone在表中是主键当插入值为空时将无法插入
20// p.setAge(4);
21// p.setName("Hibernate");
22// p.setPhone("123456");
23
24 p.setAge(2);
25 pk.setName("MySQL");
26 pk.setPhone("87654");
27 p.setId(pk);
28 PersonxOperate po = new PersonxOperate();
29 po.insert(p);
30 }
31
32}
33
src/org.lxh.hibernate2.Personx.hbm.xml
1
xml version="1.0" encoding="utf-8"?>
2 DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4
7<hibernate-mapping>
8 <class name="org.lxh.hibernate2.Personx" table="personx"
9 catalog="stms">
10
14 <composite-id name="id" class="org.lxh.hibernate2.PersonxId">
15 <key-property name="name" type="java.lang.String">
16 <column name="name" length="100" />
17 key-property>
18 <key-property name="phone" type="java.lang.String">
19 <column name="phone" length="50" />
20 key-property>
21 composite-id>
22 <property name="age" type="java.lang.Integer">
23 <column name="age" />
24 property>
25 class>
26 hibernate-mapping>
27
2 DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4
7<hibernate-mapping>
8 <class name="org.lxh.hibernate2.Personx" table="personx"
9 catalog="stms">
10
14 <composite-id name="id" class="org.lxh.hibernate2.PersonxId">
15 <key-property name="name" type="java.lang.String">
16 <column name="name" length="100" />
17 key-property>
18 <key-property name="phone" type="java.lang.String">
19 <column name="phone" length="50" />
20 key-property>
21 composite-id>
22 <property name="age" type="java.lang.Integer">
23 <column name="age" />
24 property>
25 class>
26 hibernate-mapping>
27
src/hibernate.cfg.xml
1
xml version='1.0' encoding='UTF-8'?>
2 DOCTYPE hibernate-configuration PUBLIC
3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
5
6
7<hibernate-configuration>
8
9<session-factory>
10 <property name="connection.username">root property>
11 <property name="connection.url">
12 jdbc:mysql://localhost:3306/STMS
13 property>
14 <property name="dialect">
15 org.hibernate.dialect.MySQLDialect
16 property>
17 <property name="myeclipse.connection.profile">
18 MySql_localhost
19 property>
20 <property name="connection.password">root property>
21 <property name="connection.driver_class">
22 com.mysql.jdbc.Driver
23 property>
24 <property name="show_sql">true property>
25
26
27 <mapping resource="org/lxh/hibernate2/Personx.hbm.xml" />
28
29 session-factory>
30
31 hibernate-configuration>
2 DOCTYPE hibernate-configuration PUBLIC
3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
5
6
7<hibernate-configuration>
8
9<session-factory>
10 <property name="connection.username">root property>
11 <property name="connection.url">
12 jdbc:mysql://localhost:3306/STMS
13 property>
14 <property name="dialect">
15 org.hibernate.dialect.MySQLDialect
16 property>
17 <property name="myeclipse.connection.profile">
18 MySql_localhost
19 property>
20 <property name="connection.password">root property>
21 <property name="connection.driver_class">
22 com.mysql.jdbc.Driver
23 property>
24 <property name="show_sql">true property>
25
26
27 <mapping resource="org/lxh/hibernate2/Personx.hbm.xml" />
28
29 session-factory>
30
31 hibernate-configuration>
例子结构: