Posted on 2008-08-30 16:58
∪∩BUG 阅读(4161)
评论(4) 编辑 收藏 所属分类:
Hibernate学习笔记
准备:建表
用MySQL在名为STMS数据库中建表person
在MyEclipse中建连接数据库的连接名为MySQL_localhost,在Driver JARS中导入MySQL的驱动程序mysql-connector-java-5.1.6-bin.jar
一.新建名为MySQLHibernate的Web Project
File—new—project—MyEclipse—Java Enterprice Projects—Web Project(Optional Maven Support)
在Project Name中输入MySQLHibernate---点击Finsh完成
1xml version='1.0' encoding='UTF-8'?>
2DOCTYPE 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
11 <property name="connection.username">rootproperty>
12
13
14 <property name="connection.url">
15 jdbc:mysql://localhost:3306/STMS?useUnicode=true&characterEncoding=GBK
16 property>
17
18
19 <property name="dialect">
20 org.hibernate.dialect.MySQLDialect
21 property>
22
23
24 <property name="myeclipse.connection.profile">
25 MySql_localhost
26 property>
27
28
29 <property name="connection.password">rootproperty>
30
31
32 <property name="connection.driver_class">
33 com.mysql.jdbc.Driver
34 property>
35
36
37 <property name="show_sql">trueproperty>
38
39
40 <mapping resource="org/lxh/hibernate/demo01/Person.hbm.xml" />
41
42 session-factory>
43
44hibernate-configuration>
二:给项目加入Hibernate支持
选中刚刚新建的项目—MyEcplipse—Project Capabilites—Add Hibernate Capabilites
Next—Next—选择连接数据库的连接名—Next--
点击Finash完成
三:建立Person表的POJO类
1package org.lxh.hibernate.demo01;
2
3/** *//**
4 * @author ∪∩BUG E-mail: tidelgl@163.com
5 * @version Aug 30, 2008 8:05:41 AM
6 * @person表的POJO类,类名与表名相同
7 */
8public class Person {
9
10 //以下的属性与Person表中的字段名相同
11 private String id;
12 private String name;
13 private String password;
14 private String sex;
15 private String email;
16
17 public String getId() {
18 return id;
19 }
20
21 public void setId(String id) {
22 this.id = id;
23 }
24
25 public String getName() {
26 return name;
27 }
28
29 public void setName(String name) {
30 this.name = name;
31 }
32
33 public String getPassword() {
34 return password;
35 }
36
37 public void setPassword(String password) {
38 this.password = password;
39 }
40
41 public String getSex() {
42 return sex;
43 }
44
45 public void setSex(String sex) {
46 this.sex = sex;
47 }
48
49 public String getEmail() {
50 return email;
51 }
52
53 public void setEmail(String email) {
54 this.email = email;
55 }
56
57}
58
四:通过Hibernate反向工程建立person表与Person类的映射
首先调出DB Browser视图(Windows—view show—other—MyEclipse datebase—DB Browser)—展开MySQL_localhost至表person—右键表person—Hibernate Reverse Engineering
Finash完成
1xml version="1.0" encoding="utf-8"?>
2DOCTYPE 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
13 <class name="Dao.Student" table="student" catalog="stms">
14 <id name="sno" type="java.lang.String">
15 <column name="Sno" length="20" />
16
17 <generator class="increment" />
18 id>
19 <property name="sname" type="java.lang.String">
20 <column name="Sname" length="20" not-null="true" />
21 property>
22 <property name="password" type="java.lang.String">
23 <column name="Password" length="20" />
24 property>
25 class>
26hibernate-mapping>
27
五:建立具体操作Hibernate的类
src/org.lxh.hibernate.demo01.PersonOperate.java
1package org.lxh.hibernate.demo01;
2
3import java.util.Iterator;
4import java.util.List;
5
6import org.hibernate.Query;
7import org.hibernate.Session;
8import org.hibernate.SessionFactory;
9import org.hibernate.Transaction;
10import org.hibernate.cfg.Configuration;
11
12/** *//**
13 * @author ∪∩BUG E-mail: tidelgl@163.com
14 * @version Aug 30, 2008 8:27:53 AM
15 * @ 具体操作Hibernate的类
16 * @ 功能:增加,删除,个性,按ID查询,模糊查询,查询全部操作
17 * @注意导入的包:从org.hibernate.*;
18 */
19public class PersonOperate {
20 // 在Hibernate中所有的操作都是通过Session来完成
21 private Session session = null;
22
23 // Session 是一个接口,必须实例化
24 // 在构造方法中实例实化Session对象
25 public PersonOperate() {
26 // 找到Hibernate配置文件
27 Configuration config = new Configuration().configure();
28
29 // 从全局配置文件中取出SessionFactory
30 SessionFactory factory = config.buildSessionFactory();
31
32 // 从SessionFactory中取出一个Session
33 this.session = factory.openSession();
34
35 }
36
37 // 所有的操作都是通过Session进行
38 // (1)实现向数据库中插入数据
39 public void insert(Person p) {
40 // 1.开始事务
41 Transaction tran = this.session.beginTransaction();
42
43 // 2.执行语句
44 this.session.save(p);
45
46 // 提交事务
47 tran.commit();
48 }
49
50 // (2)实现修改数据库的数据
51 public void update(Person p) {
52 // 1.开始事务
53 Transaction tran = this.session.beginTransaction();
54
55 // 2.执行语句
56 this.session.update(p);
57
58 // 提交事务
59 tran.commit();
60
61 }
62
63 // (3)实现查询数据库的数据
64 // 使用HQL按ID查询
65 public Person queryById(String id) {
66 Person p = null;
67
68 // 使用Hibernate查询语句(HQL)
69 String hql = "From Person as p where p.id=?";// 从Person类中对象p的id查
70
71 // 通过Query接口查询
72 Query q = this.session.createQuery(hql);
73 q.setString(0, id); // 下标从0开始(id是第一个属性)
74 List l = q.list(); // 导入的包是 java.util.List;
75 Iterator iter = l.iterator();
76 if (iter.hasNext()) {
77 p = (Person) iter.next();
78 }
79 return p;
80 }
81
82 // (4)实现删除数据库的数据
83 public void delete(Person p) {
84 // 1.开始事务
85 Transaction tran = this.session.beginTransaction();
86
87 // 2.执行语句
88 this.session.delete(p);
89
90 // 提交事务
91 tran.commit();
92
93 }
94
95 //通过HQL语句实现删除数据库的数据(推荐)
96 public void delete(String id){
97 String hql = "delete Person where id=?";
98 Query q = this.session.createQuery(hql);
99 //设置参数
100 q.setString(0, id);
101 //执行更新语句
102 q.executeUpdate();
103 //提交事务处理
104 this.session.beginTransaction().commit();
105
106 }
107
108 //通过HQL查询全部数据
109 public List queryAll(){
110 List l = null;
111 String hql = "From Person as p";
112 Query q = this.session.createQuery(hql);
113 l = q.list();
114 return l;
115 }
116
117 //通过HQL查询全部数据
118 public List queryByLike(String cond){
119 List l = null;
120 //条件
121 String hql = "From Person as p where p.name like ?";
122 Query q = this.session.createQuery(hql);
123 //设置参数
124 q.setString(0, "%"+cond+"%");
125 l = q.list();
126 return l;
127 }
128
129}
130
六:建立测试类
src/org.lxh.hibernate.demo01.TestPO.java
1package org.lxh.hibernate.demo01;
2
3import java.util.Iterator;
4import java.util.List;
5
6/** *//**
7 * @author ∪∩BUG E-mail: tidelgl@163.com
8 * @version Aug 29, 2008 9:53:52 PM
9 * @POJO类的测试类
10 */
11public class TestPO {
12
13 /** *//**
14 * @param args
15 */
16 public static void main(String[] args) {
17
18 // 生成POJO类实例化对象
19 Person p = new Person();
20
21// p.setId("Hibernate");
22// p.setId("MySQL");
23// p.setName("学习笔记");
24 p.setName("使用用Hibernate");
25 p.setPassword("123");
26 p.setEmail("tidelgl@163.com");
27 p.setSex("男");
28
29 // 实例化PersonOperate对象
30 PersonOperate po = new PersonOperate();
31
32 // 1.插入数据
33// po.insert(p);
34
35 // 2.修改数据
36// po.update(p);
37
38 //3.查询数据
39// Person p = po.queryById("Hibernate");
40// System.out.println(p.getName());
41
42 //通过HQL查询全部数据
43// List l = po.queryAll();
44 //通过HQL模糊查询
45// List l = po.queryByLike("用");
46// Iterator iter = l.listIterator();
47// while(iter.hasNext()){
48// Person p = (Person)iter.next();
49// System.out.println(p.getName());
50//
51// }
52
53 //4.删除数据
54// po.delete(p); //通过查询结果删除
55// po.delete("Hibernate"); //通过HQL语句删除
56
57
58 }
59
60}
61
例子结构: