1.整體設計思路
html
寫一個HibernateDao的公共接口HibernateCommonDao,實現基本的增刪改查HibernateCommonDaoImpl,全部的具體業務類*DaoImpl都繼承自HibernateCommonDaoImpl而且implements它本身的*Dao接口,這樣一來基本的增刪改查都用公共的,只針對具體業務實現本身的接口方法,業務類Service調用query對象方法的時候須要進行強制類型轉換java
2.springmvc管理hibernate的配置問題web
2.1pom.xml配置仍然是http://my.oschina.net/u/555061/blog/506049,只不過增長Spring4Framework框架spring
2.2SpringHibernate4.xml--解決sessionFactory註冊爲SpringBeansql
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan"> <list> <value>com.zhxjz.model.hibernateEmployee</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="dialect">${hibernate.dialect}</prop> <prop key="show_sql">${hibernate.show_sql}</prop> <!-- <prop key="hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> --> </props> </property> </bean> <!-- 配置Hibernate事務管理器(因爲在SpringDatasource.xml已經配置了事務,所以這裏不能再次配置) <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> --> </beans>
2.3 SpringDatasource.xml事務管理配置以下,這個事務管理對Hibernate的SessionFactory事務生效,同時對JdbcTemplate的事務管理生效shell
2.4 關於事務管理json
須要在*ServiceImpl添加註解@Transactional,而後測試事務生效過程,session
public void add(Object newObj) { Session session = getCurrentSession(); session.save(newObj); SQLQuery query = getCurrentSession().createSQLQuery( "update hibernateemployee set employeeId=2 where uuid='uuid2'"); query.executeUpdate(); }
這個sqlquery就是用來測試回滾的,修改主鍵違反主鍵惟一性原則致使update操做失敗,測試是否先進行的save插入操做是否成功,結果是不成功,證實事務生效。mvc
2.5 hibernate.properties,這裏的含義能夠參考http://my.oschina.net/u/555061/blog/506049app
hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=true #hibernate.hbm2ddl.auto=create
3.公共Dao/DaoImpl結構以下,
這裏HibernateEmployeeDao/HibernateEmployeeDaoImpl是具體業務,HibernateCommonDao和HibernateCommonDaoImpl是公共接口方法(也就是增刪改查ORM實現)
4.給出類源碼
4.1HibernateCommonDao.java
package com.zhxjz.dao; import java.util.List; public interface HibernateCommonDao { public void add(Object newObj); public void del(Class<?> clazz, int id); public void update(Object updObj); public Object queryById(Class<?> clazz, int id); public List queryList(String sql); }
4.2HibernateCommonDaoImpl.java
package com.zhxjz.dao.impl; import java.util.List; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.zhxjz.dao.HibernateCommonDao; @Component public class HibernateCommonDaoImpl implements HibernateCommonDao { @Autowired private SessionFactory sessionFactory; @Override public void add(Object newObj) { Session session = getCurrentSession(); session.save(newObj); SQLQuery query = getCurrentSession().createSQLQuery( "update hibernateemployee set employeeId=2 where uuid='uuid2'"); query.executeUpdate(); } @Override public void del(Class<?> clazz, int id) { Session session = getCurrentSession(); Object delObj = session.get(clazz, id); session.delete(delObj); } @Override public void update(Object updObj) { getCurrentSession().update(updObj); } @Override public Object queryById(Class<?> clazz, int id) { return getCurrentSession().get(clazz, id); } @Override public List queryList(String sql) { SQLQuery query = getCurrentSession().createSQLQuery(sql); return query.list(); } protected Session getCurrentSession() { return sessionFactory.getCurrentSession(); } }
4.3HibernateEmployeeDao.java
package com.zhxjz.dao.hibernateEmployee; import com.zhxjz.dao.HibernateCommonDao; public interface HibernateEmployeeDao extends HibernateCommonDao { public void ownBusiness(); }
4.4HibernateEmployeeDaoImpl.java
package com.zhxjz.dao.hibernateEmployee.impl; import org.springframework.stereotype.Repository; import com.zhxjz.dao.hibernateEmployee.HibernateEmployeeDao; import com.zhxjz.dao.impl.HibernateCommonDaoImpl; @Repository("hibernateEmployeeDao") public class HibernateEmployeeDaoImpl extends HibernateCommonDaoImpl implements HibernateEmployeeDao { @Override public void ownBusiness() { } }
4.5HibernateEmployeeService.java
package com.zhxjz.service.hibernateEmployee; import java.util.List; import com.zhxjz.model.hibernateEmployee.HibernateEmployee; public interface HibernateEmployeeService { public void add(HibernateEmployee hibernateEmployee); public void del(int id); public void update(HibernateEmployee updObj); public HibernateEmployee queryById(int id); public List<HibernateEmployee> queryList(String sql); }
4.6HibernateEmployeeServiceImpl.java
package com.zhxjz.service.hibernateEmployee.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.zhxjz.dao.hibernateEmployee.HibernateEmployeeDao; import com.zhxjz.model.hibernateEmployee.HibernateEmployee; import com.zhxjz.service.hibernateEmployee.HibernateEmployeeService; @Service @Transactional public class HibernateEmployeeServiceImpl implements HibernateEmployeeService { @Autowired private HibernateEmployeeDao hibernateEmployeeDao; @Override public void add(HibernateEmployee hibernateEmployee) { hibernateEmployeeDao.add(hibernateEmployee); } @Override public void del(int id) { hibernateEmployeeDao.del(HibernateEmployee.class, id); } @Override public void update(HibernateEmployee hibernateEmployee) { hibernateEmployeeDao.update(hibernateEmployee); } @Override public HibernateEmployee queryById(int id) { return (HibernateEmployee) hibernateEmployeeDao.queryById( HibernateEmployee.class, id); } @SuppressWarnings("unchecked") @Override public List<HibernateEmployee> queryList(String sql) { return hibernateEmployeeDao.queryList(sql); } }
4.7model類--HibernateEmployee.java
package com.zhxjz.model.hibernateEmployee; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "HIBERNATEEMPLOYEE") public class HibernateEmployee { private String uuid; @Id @Column(name = "EMPLOYEEID") private int employeeId; private String employeeName; private boolean isOnjob; public HibernateEmployee() { } public HibernateEmployee(String uuid, int employeeId, String employeeName, boolean isOnjob) { this.uuid = uuid; this.employeeId = employeeId; this.employeeName = employeeName; this.isOnjob = isOnjob; } 省略getter和setter。。。 }
4.8HibernateEmployeeController.java
package com.zhxjz.controller.hibernateEmployee; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import com.zhxjz.framework.model.json.JsonResult; import com.zhxjz.model.hibernateEmployee.HibernateEmployee; import com.zhxjz.service.hibernateEmployee.HibernateEmployeeService; @Controller @RequestMapping("/hibernateemployee") public class HibernateEmployeeController { @Autowired HibernateEmployeeService hibernateEmployeeService; @RequestMapping("/add.do") public String add(HibernateEmployee hibernateEmployee, ModelMap model) { hibernateEmployee.setUuid("uuid1"); hibernateEmployeeService.add(hibernateEmployee); String message = new JsonResult().toJson(); model.put("message", message); return "message"; } @RequestMapping("/del.do") public String del(int employeeId, ModelMap model) { hibernateEmployeeService.del(employeeId); String message = new JsonResult().toJson(); model.put("message", message); return "message"; } @RequestMapping("/update.do") public String update(int employeeId, String field, Object value, ModelMap model) { Map<String, Object> updInfo = new HashMap<String, Object>(); updInfo.put(field, value); HibernateEmployee hibernateEmployee = new HibernateEmployee("uuid2", employeeId, "testemployee2", false); hibernateEmployeeService.update(hibernateEmployee); String message = new JsonResult().toJson(); model.put("message", message); return "message"; } @RequestMapping("/queryOne.do") public String queryOne(int employeeId, ModelMap model) { HibernateEmployee obj = (HibernateEmployee) hibernateEmployeeService .queryById(employeeId); String message = new JsonResult(obj).toJson(); model.put("message", message); return "message"; } @RequestMapping("/querylist.do") public String querylist(ModelMap model) { String sql = "select * from hibernateemployee limit 0,2"; List<HibernateEmployee> employeeList = hibernateEmployeeService.queryList(sql); String message = new JsonResult(employeeList).toJson(); model.put("message", message); return "message"; } }
5.推薦博客(Spring4 MVC Hibernate4集成 Annotation)
http://www.cnblogs.com/leiOOlei/p/3780290.html
http://gongm-24.iteye.com/blog/1539110 (這篇建立接口設計比個人全,有空再研究下)
http://blog.csdn.net/shan9liang/article/details/9117233 (帖子不錯有水平,springmvc整合hibernate4到位)
6.hqsql查詢語言(HQL: Hibernate查詢語言)
http://www.cnblogs.com/bobomail/archive/2005/09/20/240352.html