`

spring整合hibernate

    博客分类:
  • j2ee
 
阅读更多

1. Spring 整合 Hibernate 整合什么 ?
1). 有 IOC 容器来管理 Hibernate 的 SessionFactory
2). 让 Hibernate 使用上 Spring 的声明式事务


2. 整合步骤:

1). 加入 hibernate
①. jar 包
②. 编写PO对象,用hibernate注解创建表


2). 加入 Spring
①. jar 包
②. 加入 Spring 的配置文件
3). 整合.

3. 编写代码

 

 

 

1.写Bean包里面的Po包里的Po对象,并用hibernate注解创建表。

po

 

package com.sysmaster.po;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="T_People")
public class PeoplePO {
	private int pid;
	private String name;
	private Date birthday;
	
	@Id
	@GeneratedValue
	public int getPid() {
		return pid;
	}
	public void setPid(int pid) {
		this.pid = pid;
	}
	@Column(length=10)
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Temporal(TemporalType.DATE)
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}



2.编写Dao层和Impl

dao

 

package com.sysmaster.dao;

import java.io.Serializable;
import java.util.List;

public interface IGenericDAO<Obj,Id extends Serializable>{
	public boolean addObj(Obj obj);
	public boolean uptObj(Obj obj);
	public boolean delObj(Obj obj);
	public Obj getObj(Id id);
	public List<Obj> getObjs(String hql);
}


impl

 

package com.sysmaster.dao.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;

import com.sysmaster.dao.IGenericDAO;

@Repository
public abstract class GenericDAOImpl<Obj,Id extends Serializable> implements IGenericDAO<Obj,Id>{
	
	@Resource
	private SessionFactory sessionFactory;
	
	private Class<Obj> clzz;

	@SuppressWarnings("unchecked")
	public GenericDAOImpl(){
		clzz=(Class<Obj>)((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
	}
	
	public boolean addObj(Obj obj) {
		boolean flag = false;
		try{
		//	Session session = sessionFactory.openSession();
			Session session = sessionFactory.getCurrentSession();
		//	session.beginTransaction();
			session.persist(obj);
		//	session.getTransaction().commit();
		//	session.close();
			flag = true;
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		return flag;
	}

	public boolean uptObj(Obj obj) {
		boolean flag = false;
		try{
			Session session = sessionFactory.getCurrentSession();
		//	Session session = sessionFactory.openSession();
		//	session.beginTransaction();
			session.update(obj);
		//	session.getTransaction().commit();
		//	session.close();
			flag = true;
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		return flag;
	}

	public boolean delObj(Obj obj) {
		boolean flag = false;
		try{
		//	Session session = sessionFactory.openSession();
			Session session = sessionFactory.getCurrentSession();
		//	session.beginTransaction();
			session.delete(obj);
		//	session.getTransaction().commit();
		//	session.close();
			flag = true;
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		return flag;
	}

	@SuppressWarnings("unchecked")
	public Obj getObj(Id id) {
		Obj obj = null;
		try{
	//		Session session = sessionFactory.openSession();
			Session session = sessionFactory.getCurrentSession();
	//		session.beginTransaction();
			obj = (Obj)session.get(clzz, id);
	//		session.getTransaction().commit();
	//		session.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		return obj;
	}

	@SuppressWarnings("unchecked")
	public List<Obj> getObjs(String hql) {
		List<Obj> objList = null;
		try{
			Session session = sessionFactory.getCurrentSession();
		//	session.beginTransaction();
			Query query = session.createQuery(hql);
			objList = query.list();
		//	session.getTransaction().commit();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		return objList;
	}

}


2.bo

 

package com.sysmaster.bo;


public class PeopleBO {
	private int pid;
	private String name;
	private int age;
	public int getPid() {
		return pid;
	}
	public void setPid(int pid) {
		this.pid = pid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}


4. service层

 

package com.sysmaster.service;

import com.sysmaster.bo.PeopleBO;

public interface IPeopleService {
	public boolean addPeople(PeopleBO people);
	public boolean uptPeople(PeopleBO people);
	public boolean delPeople(PeopleBO people);
	public PeopleBO getPeople(int pid);
}


4.ServiceImpl

 

package com.sysmaster.service.impl;

import java.util.Date;

import javax.annotation.Resource;

import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sysmaster.bo.PeopleBO;
import com.sysmaster.dao.IPeopleDAO;
import com.sysmaster.po.PeoplePO;
import com.sysmaster.service.IPeopleService;

@Service("peopleService")
//事物的注解
@Transactional 
public class PeopleServiceImpl implements IPeopleService{

	@Resource
	private IPeopleDAO peopleDAO;
	
//	public PeopleServiceImpl()
//	{
//		peopleDAO = new PeopleDAOImpl();
//	}
	
	@SuppressWarnings("deprecation")
	public boolean addPeople(PeopleBO people) {
		PeoplePO peoplePO = new PeoplePO();
		
		BeanUtils.copyProperties(people, peoplePO);
		
		//计算出生日期
		Date date = new Date();
		date.setYear(date.getYear()-people.getAge());
		peoplePO.setBirthday(date);
		
		boolean flag = peopleDAO.addObj(peoplePO);
		return flag;
	}

	@SuppressWarnings("deprecation")
	public boolean uptPeople(PeopleBO people) {
		PeoplePO peoplePO = peopleDAO.getObj(people.getPid());
		BeanUtils.copyProperties(people, peoplePO,new String[]{"pid"});
		//计算出生日期
		Date date = new Date();
		date.setYear(date.getYear()-people.getAge());
		peoplePO.setBirthday(date);
		
		boolean flag = peopleDAO.uptObj(peoplePO);
		return flag;
	}

	public boolean delPeople(PeopleBO people) {
		boolean flag = false;
		PeoplePO peoplePO = peopleDAO.getObj(people.getPid());
		if(peoplePO!=null)
			flag = peopleDAO.delObj(peoplePO);
		return flag;
	}

	@SuppressWarnings("deprecation")
	public PeopleBO getPeople(int pid) {
		PeoplePO peoplePO = peopleDAO.getObj(pid);
		PeopleBO people = new PeopleBO();
		
		BeanUtils.copyProperties(peoplePO, people);
		
		people.setAge(new Date().getYear() - peoplePO.getBirthday().getYear());
		
		return people;
	}
	
}

 

5.配置Spring.xml

 

<?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:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
			http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			http://www.springframework.org/schema/tx
			http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
			http://www.springframework.org/schema/context
			http://www.springframework.org/schema/context/spring-context-3.0.xsd
			http://www.springframework.org/schema/aop
			http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
           
    <tx:annotation-driven transaction-manager="transactionManager"/>
	<!-- 配置自动扫描的包: 需要加入 aop 对应的包 -->
	<context:component-scan base-package="com.hmx"/>

	<!-- 导入配置文件  -->
	<context:property-placeholder location="classpath:config/database/mysql.properties"/>

	<!-- 配置c3p0  -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="${driverClass}"/>
		<property name="jdbcUrl" value="${jdbcUrl}"/>
		<property name="properties">
            <props>
                <prop key="c3p0.acquire_increment">${c3p0.acquire_increment}</prop>
                <prop key="c3p0.idle_test_period">${c3p0.idle_test_period}</prop>
                <prop key="c3p0.timeout">${c3p0.timeout}</prop>
                <prop key="c3p0.max_size">${c3p0.max_size}</prop>
                <prop key="c3p0.max_statements">${c3p0.max_statements}</prop>
                <prop key="c3p0.min_size">${c3p0.min_size}</prop>
                <prop key="user">${user}</prop> 
                <prop key="password">${password}</prop>
            </props>
		</property>
	</bean>
	
	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<!-- 配置数据源  -->
		<property name="dataSource" ref="dataSource"/>
		<!-- 配置hibernate原生属性  -->
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="current_session_context_class">${current_session_context_class}</prop>
			</props>
		</property>
		<!-- 扫描PO包里面的映射文件,只能扫描PO包,PO下面的子包不会扫描  -->
		<property name="packagesToScan" value="com.hmx.bean.po"/>
	</bean>
	
	<!-- 配置Spring的声明式事物 @Transactional注解要配置在ServiceImpl上 -->
	<!-- 1.配置事物管理器-->
	<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        	<property name="sessionFactory" ref="sessionFactory" />
       </bean>
</beans>


6.数据库配置文件。c3p0

mysql

 

#数据库连接类
driverClass = com.mysql.jdbc.Driver
#连接资源
jdbcUrl = jdbc\:mysql\://127.0.0.1\:3306/hmx?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
#用户名
user = root
#密码
password = 123456
#当连接池里面的连接用完的时候,C3P0一下获取的新的连接数
c3p0.acquire_increment = 2
#每隔120秒检查连接池里的空闲连接,单位是秒
c3p0.idle_test_period = 120
#获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒
c3p0.timeout = 1000
#最大连接数
c3p0.max_size = 100
#最大的PreparedStatement的数量
c3p0.max_statements = 100
#最小连接数
c3p0.min_size = 20
#每次都验证连接是否可用
c3p0.validate = true

#数据库方言
hibernate.dialect = org.hibernate.dialect.MySQLDialect
#连接池大小
hibernate.connection.pool_size = 5
#是否自动生成表
hibernate.hbm2ddl.auto = update
#是否格式化SQL
hibernate.format_sql = true
#是否显示SQL
hibernate.show_sql = true
#设定会话的线程绑定
current_session_context_class = thread


oracle

。。。。。

 



分享到:
评论

相关推荐

    spring整合hibernate示例代码

    标题"spring整合hibernate示例代码"提示我们,我们将讨论如何在实际项目中结合这两个框架。Spring可以帮助管理Hibernate的SessionFactory和Transaction,提供声明式事务管理,以及通过AOP(面向切面编程)实现更灵活...

    Spring整合Hibernate.jar

    标题"Spring整合Hibernate.jar"意味着我们将讨论如何将这两个强大的框架集成在一起,以便在Spring管理的环境中使用Hibernate进行数据库操作。这通常涉及到以下步骤和知识点: 1. **引入依赖**:首先,你需要在项目...

    spring整合hibernate实现事务处理

    本篇文章将详细探讨如何通过Spring整合Hibernate来实现事务处理,重点介绍注解方式和XML配置方式。 首先,我们了解事务处理在数据库操作中的重要性。事务是一组操作,这些操作要么全部成功,要么全部失败,确保数据...

    spring整合hibernate的jar包

    标题中的“spring整合hibernate的jar包”指的是在Java Web开发中,Spring框架与Hibernate持久层框架的集成。这两个框架结合使用可以提供强大的数据访问和业务逻辑处理能力。Spring作为一个全面的轻量级框架,提供了...

    spring整合hibernate所用相关jar包

    本文将深入探讨Spring整合Hibernate的相关知识点,适合初学者入门。 首先,我们需要理解Spring的核心理念。Spring框架提供了一个轻量级的容器,它能够管理应用程序中的对象,包括初始化、配置和依赖注入。AOP则是...

    Spring整合Hibernate

    Spring4整合Hibernate4实现用户购买图书和结账等操作,整合主要实现用IoC容器来管理Hibernate的SessionFactory实例,并使Hibernate使用Spring所提供的声明式事务……

    spring整合hibernate实例

    这篇名为"spring整合hibernate实例"的内容,显然是关于如何将这两个框架协同工作,构建一个高效、灵活的Java应用的教程。在整合过程中,我们将探讨以下几个关键知识点: 1. **Spring的ApplicationContext**: 这是...

    Spring整合HIbernate

    《Spring整合Hibernate实战指南》 在Java开发领域,Spring框架以其强大的依赖注入、AOP(面向切面编程)以及丰富的模块支持,成为了企业级应用开发的首选。而Hibernate作为持久层框架,以其对象关系映射(ORM)能力...

    Spring整合Hibernate 详解.doc

    Spring整合Hibernate是现代Java开发中常见的一种技术组合,利用Spring框架的强大功能来管理和协调Hibernate的持久化操作。Spring为Hibernate提供了全面的集成方案,简化了DAO(Data Access Object)的开发,同时也...

    使用spring整合hibernate和struts时所要用到的所有jar包

    首先,我们需要理解Spring如何与Hibernate和Struts进行整合: 1. **Spring与Hibernate整合**: - Spring通过其`HibernateTemplate`或`HibernateDaoSupport`类简化了对Hibernate的操作,提供了事务管理。你可以定义...

    Spring整合Hibernate示例完整代码

    下面,我们将深入探讨Spring整合Hibernate的相关知识点。 1. **依赖注入**:Spring框架的核心特性之一是依赖注入(DI),它允许我们在不进行硬编码的情况下管理对象之间的依赖关系。在整合Hibernate时,Spring可以...

    spring整合hibernate与struts2所需jar包

    标题"spring整合hibernate与struts2所需jar包"表明我们需要关注的是如何将这三个框架整合在一起,并且提供了所需的一些基础组件。整合SSH可以让开发者利用Spring的管理能力,让Hibernate更易于使用,同时通过Struts2...

    Spring整合Hibernate示例

    Spring整合Hibernate配置测试示例

    spring整合hibernate开发源码

    在"spring整合hibernate开发源码"的压缩包中,可能包含了以下内容: 1. **配置文件**:如`applicationContext.xml`,其中配置了Spring和Hibernate的相关bean,如DataSource、SessionFactory、TransactionManager等。...

    Spring整合Hibernate需要用到的部分jar包

    这里的jar包只是说Spring自带的关于Hibernate的jar包,即这四个jar包: hibernate3.jar, hibernate-annotations.jar, hibernate-entitymanager.jar hibernate-commons-annotations.jar 因为我原来下载了一个,但是...

    Spring+hibernate整合源代码

    这个“Spring+hibernate整合源代码”应该包含了实现上述整合步骤的示例代码,可以作为学习和参考的资源。通过学习和实践这些代码,你可以更好地理解和掌握 Spring 和 Hibernate 整合的细节,提升你的 Java Web 开发...

    spring整合Hibernate学习笔记.docx

    Spring 整合 Hibernate 是一种常见的企业级应用开发模式,它将 Spring 框架的管理优势与 Hibernate 的持久层功能结合起来,提供了更高效、更稳定的应用解决方案。在本学习笔记中,我们将深入探讨如何实现这一整合,...

    Spring整合hibernate(2)之基于HibernateTemplate的整合

    Spring整合Hibernate基于HibernateTemplate的方式,极大地简化了数据库操作,同时也让事务管理和代码的编写变得更加规范和高效。在实际项目中,可以根据需求进一步配置和优化,比如使用JPA的...

    spring整合hibernate例子

    当我们谈到"Spring整合Hibernate例子"时,这意味着我们将探讨如何将这两个强大的框架结合在一起,以实现更高效、更灵活的数据库操作。 Spring框架的核心特性之一是依赖注入(Dependency Injection,DI),这使得...

Global site tag (gtag.js) - Google Analytics