2 class="limq.hibernate.vo.Students"
3 column="student_id" >
4 many-to-one>
5
用过MyEclipse开发Hibernate的就知道,MyEclipse会帮助我们生成持久对象和抽象对象,我们要在Students.java中加入对History的引用
privateSethistory=newHashSet();
publicSetgetHistory(){
returnhistory;
}
publicvoidsetHistory(Sethistory){
this.history=history;
}
同时,在AbstractHistory.java中删除student_id以及对应的get,set方法,History.java中加入
privateStudentsstudent;
publicStudentsgetStudent(){
returnstudent;
}
publicvoidsetStudent(Studentsstudent){
this.student=student;
}
具体内容请查看源代码。
2DAO数据访问层
首先,编写IBaseDao与BaseDao,其中IBaseDao代码如下:
1 package limq.hibernate.dao;
2
3 import java.util.Collection;
4 import java.util.List;
5 import net.sf.hibernate.Criteria;
6 import net.sf.hibernate.Query;
7 import net.sf.hibernate.Session;
8 import limq.exception.DaoException;
9
10 public interface IBaseDao {
11
12 public Session openSession();
13
14 public int getTotalCount( String hql) throws Exception;
15
16 public Query getQuery(String sql) throws Exception;
17
18 public Criteria getCriteria(Class clazz) throws Exception;
19
20 public int getTotalPage(int totalCount,int pageSize);
21
22 public void create(Object entity);
23
24 public void update(Object entity);
25
26 public void delete(Object entity) throws DaoException;
27
28 public void deleteAll(Class clazz) throws DaoException;
29
30 public void deleteAll(Collection entities) throws DaoException;
31
32 public Object loadByKey(Class clazz, String keyName, Object keyValue);
33
34 public List find(String queryString) throws DaoException;
35
36 public List find(String queryString, Object param) throws DaoException;
37
38 public List find(String queryString, Object[] params) throws DaoException;
39
40 }
41
BaseDao继承org.springframework.orm.hibernate.support.HibernateDaoSupport
实现以上的定义的方法
如:
1 public void create(Object entity) {
2 try {
3 getHibernateTemplate().save(entity);
4
5 } catch (Exception e) {
6 log.error("保存 " + entity.getClass().getName() + " 实例到数据库失败", e);
7
8 }
9 }
10 /**
11 * 获得session
12 */
13 public Session openSession() {
14 return SessionFactoryUtils.getSession(getSessionFactory(), false);
15 }
16
17 /**
18 * 获得Query对象
19 */
20 public Query getQuery(String sql) throws Exception{
21 Session session = this.openSession();
22 Query query = session.createQuery(sql);
23 return query;
24 }
25 /**
26 * 获得Criteria对象
27 */
28 public Criteria getCriteria(Class clazz) throws Exception{
29
30 Session session=this.openSession();
31 Criteria criteria = session.createCriteria(clazz);
32 return criteria;
33 }
34
可以看到,这里即充分利用了Spring对Hibernate的支持,还弥补了Spring的不足。
最后分别为每个持久对象建立Interface,以及DAO,使其分别继承IBaseDao与BaseDao。
如IDepartment,DepartmentDao
1 public interface IDepartment extends IBaseDao {}
2
3 public class DepartmentDao extends BaseDao implements IBaseDao {}
4
3Service层
在这里需要认真思考每个业务逻辑所能用到的持久层对象和DAO,还要完成配置Spring框架,首先我一起看看applications-service.xml
1
xml version="1.0" encoding="UTF-8"?
>
2 DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
3 "http:
//www.springframework.org/dtd/spring-beans.dtd">
4
5
6
7 com.mysql.jdbc.Drivervalue>
8 property>
9
10 jdbc:
mysql:
//localhost:
3306/Studentvalue>
11 property>
12
13 rootvalue>
14 property>
15
16 value>
17 property>
18 bean>
19
20
21
22 property>
23
24
25 limq/hibernate/vo/Admins.hbm.xmlvalue>
26 limq/hibernate/vo/Classes.hbm.xmlvalue>
27 limq/hibernate/vo/Courses.hbm.xmlvalue>
28 limq/hibernate/vo/Students.hbm.xmlvalue>
29 limq/hibernate/vo/ClassesInfo.hbm.xmlvalue>
30 limq/hibernate/vo/Contact.hbm.xmlvalue>
31 limq/hibernate/vo/Department.hbm.xmlvalue>
32 limq/hibernate/vo/History.hbm.xmlvalue>
33 limq/hibernate/vo/Teachers.hbm.xmlvalue>
34 list>
35 property>
36
37
38 net.sf.hibernate.dialect.MySQLDialectprop>
39 trueprop>
40 props>
41 property>
42 bean>
43
44
45
46 property>
47 bean>
48
49
50
51
52 property>
53 bean>
54
55
56
57 property>
58 bean>
59
60
61
62 property>
63 bean>
64
65
66
67 property>
68 bean>
69
70
71
72 property>
73 bean>
74
75