您的位置:首页 > 编程语言 > Java开发

spring+hibernate注解配置实例

2015-07-31 22:15 417 查看
简单的spring3.2.9和hibernate3的集成配置,有demo供下载。shTest下载

第一步

jdbc.properties配置

driverClassName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/shtest
username=root
password=123456
prototypeCount=1
maxActive=100
houseKeepingSleepTime=60000
minimumConnectionCount=2
maximumConnectionCount=8
simultaneousBuildThrottle=4
alias=springProxool


第二步

applicationContext.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
<context:annotation-config/>
<context:component-scan base-package="com.cqut"/>

<!-- 指定数据库配置文件的位置 -->
<context:property-placeholder location="classpath:jdbc.properties"/>

<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver" value="${driverClassName}"/>
<property name="driverUrl" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
<!-- 测试的SQL执行语句 -->
<property name="houseKeepingTestSql" value="select CURRENT_DATE"/>
<!-- 最少保持的空闲连接数 (默认2个) -->
<property name="prototypeCount" value="${prototypeCount}"/>
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒) -->
<property name="houseKeepingSleepTime" value="${houseKeepingSleepTime}"/>
<!-- 最大活动时间(超过此时间线程将被kill,默认为5分钟)
<property name="maximumActiveTime" value="${maximumActiveTime}"/>-->
<!-- 连接最长时间(默认为4个小时)
<property name="maximumConnectionLifetime" value="${maximumConnectionLifetime}"/>-->
<!-- 最小连接数 (默认2个) -->
<property name="minimumConnectionCount" value="${minimumConnectionCount}"/>
<!-- 最大连接数 (默认5个) -->
<property name="maximumConnectionCount" value="${maximumConnectionCount}"/>
<!--统计
<property name="statistics" value="${statistics}"/> -->
<!-- 别名 -->
<property name="alias" value="${alias}"/>
<!--同时最大连接数 -->
<property name="simultaneousBuildThrottle" value="${simultaneousBuildThrottle}"/>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>

<property name="packagesToScan">
<list>
<value>com.cqut.entity</value>
</list>
</property>

<!--
<property name="annotatedPackages">
<list>
<value>com.cqut.entity.Department</value>
<value>com.cqut.entity.MyClass</value>
<value>com.cqut.entity.Student</value>
</list>
</property>
-->

<property name="hibernateProperties">
<props>
<!--  <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hiberante.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>

<bean id="baseDao" class="com.cqut.dao.BaseDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory" /></property>
</bean>
<!--  通过注解的方式,进行实物管理  -->
<tx:annotation-driven transaction-manager="transactionManager"/>

</beans>


第三步

新建实体,配置注解

package com.cqut.entity;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class Student implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private int stuId;

@Column(length=20,nullable=false)
private String name;
@Column
private int age;

@ManyToOne(cascade=CascadeType.ALL)
private MyClass myClass;

<span style="white-space:pre">	</span>//get set方法省略

}


第四步

配置basedao,直接继承hibernate的daosupport

package com.cqut.dao;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BaseDao extends HibernateDaoSupport{

}


第五步

配置studentDao,及添加注解和配置事务

package com.cqut.dao;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.cqut.entity.Student;

@Transactional
@Component("studentDao")
public class StudentDao {
@Resource
private BaseDao baseDao;

public BaseDao getBaseDao() {
return baseDao;
}

public void setBaseDao(BaseDao baseDao) {
this.baseDao = baseDao;
}
@Transactional(rollbackFor={Exception.class})
public void add(Student student) throws Exception{
baseDao.getHibernateTemplate().save(student);
throw new Exception("异常");
}
public List<Student> getStudents(String hql){

return (List<Student>)baseDao.getHibernateTemplate().find(hql);
}

}
注意:“异常”是为了测试事务的回滚

第六步

测试

package com.cqut.test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.cqut.dao.StudentDao;
import com.cqut.entity.Student;

public class Test {

public static void main(String[] args) {
Student student = new Student();

student.setName("张三");
student.setAge(19);

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentDao studentDao = context.getBean(StudentDao.class);

try {
studentDao.add(student);
} catch (Exception e) {
e.printStackTrace();
}

List<Student> students = studentDao.getStudents("from Student");
for (Student student2 : students) {
System.out.println(student2.getName());
}

}

}


最后是web.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SHTest</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<!-- proxool数据库统计 -->
<servlet>
<servlet-name>Admin</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Admin</servlet-name>
<url-pattern>/adminProxool</url-pattern>
</servlet-mapping>
<!-- spring 启动 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring 字符过滤 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: