整合hibernate4到spring4mvc框架

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

http://itlab.idcquan.com/Java/Hibernate/809957.html

http://itlab.idcquan.com/Java/Hibernate/953976.html (增刪改查)

相關文章
相關標籤/搜索