spring整合Hibernate
来源:互联网 发布:java数组倒置 编辑:程序博客网 时间:2024/05/22 00:44
spring整合Hibernate需要导入spring和hibernate必要的jar包,如果有相同的jar包,去掉旧的,保留新的和大的jar包。
需要的配置文件有spring的applicationContext.xml,hibernate的hibernate.cfg.xml,还有po类的Xxx.hbm.xml
下面以Emp类为例:
import java.util.Date;/** * Emp generated by MyEclipse Persistence Tools */public class Emp implements java.io.Serializable { private Integer empno; private Dept dept; private String ename; private String job; private Integer mgr; private Date hiredate; private Integer sal; private Integer comm; // Constructors /** default constructor */ public Emp() { } public Emp(Integer empno, String ename, String job, Integer sal) {super();this.empno = empno;this.ename = ename;this.job = job;this.sal = sal;}/** full constructor */ public Emp(Dept dept, String ename, String job, Integer mgr, Date hiredate, Integer sal, Integer comm) { this.dept = dept; this.ename = ename; this.job = job; this.mgr = mgr; this.hiredate = hiredate; this.sal = sal; this.comm = comm; } // Property accessors public Integer getEmpno() { return this.empno; } public void setEmpno(Integer empno) { this.empno = empno; } public Dept getDept() { return this.dept; } public void setDept(Dept dept) { this.dept = dept; } public String getEname() { return this.ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return this.job; } public void setJob(String job) { this.job = job; } public Integer getMgr() { return this.mgr; } public void setMgr(Integer mgr) { this.mgr = mgr; } public Date getHiredate() { return this.hiredate; } public void setHiredate(Date hiredate) { this.hiredate = hiredate; } public Integer getSal() { return this.sal; } public void setSal(Integer sal) { this.sal = sal; } public Integer getComm() { return this.comm; } public void setComm(Integer comm) { this.comm = comm; }}
下面是Emp.hbm.xml配置文件内容:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping package="com.xxx.po"> <class name="Emp" table="emp" catalog="struts2"> <id name="empno" type="java.lang.Integer"> <column name="EMPNO" /> <generator class="native"></generator> </id> <many-to-one name="dept" class="Dept" fetch="select"> <column name="DEPTNO" /> </many-to-one> <property name="ename" type="java.lang.String"> <column name="ENAME" length="10" /> </property> <property name="job" type="java.lang.String"> <column name="JOB" length="9" /> </property> <property name="mgr" type="java.lang.Integer"> <column name="MGR" /> </property> <property name="hiredate" type="java.util.Date"> <column name="HIREDATE" length="10" /> </property> <property name="sal" type="java.lang.Integer"> <column name="SAL" /> </property> <property name="comm" type="java.lang.Integer"> <column name="COMM" /> </property> </class></hibernate-mapping>
下面是hibernate的配置文件hibernate.cfg.xml内容:
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="myeclipse.connection.profile">test</property><property name="connection.url">jdbc:mysql://localhost:3306/struts2</property><property name="connection.username">root</property><property name="connection.password">1234</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="show_sql">true</property><mapping resource="com/xxx/po/Dept.hbm.xml" /><mapping resource="com/xxx/po/Emp.hbm.xml" /></session-factory></hibernate-configuration>
下面是一个dao的实现类,里面简单的写了几个方法:spring也提供了一个工具类来操作数据,就是HibernateTemplate,要使用此类,需要注入一个SessionFactory
import java.sql.SQLException;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.orm.hibernate3.HibernateCallback;import org.springframework.orm.hibernate3.HibernateTemplate;public class EmpDaoImpl implements IEmpDao {private HibernateTemplate hibernateTemplate;//注入SessionFactorypublic void setSessionFactory(SessionFactory sessionFactory){hibernateTemplate = new HibernateTemplate(sessionFactory);}// 根据empno删除emp数据public void deleteById(int empno) {Emp emp = new Emp();emp.setEmpno(7934);hibernateTemplate.delete(emp);}public long findCount() {String hql = "select count(empno) from Emp";return (Long) hibernateTemplate.find(hql).get(0);}// 根据id查询对象public Emp findEmpById(int empno) {return (Emp) hibernateTemplate.get(Emp.class, empno);}public List<Emp> findEmps() {// 要求只查询出5个属性的,使用hql的构造方法查询String hql = "select new com.xxx.po.Emp(empno,ename,job,sal) from Emp ";return hibernateTemplate.find(hql);}public List<Emp> findPage(final int firstResult, final int maxResult) {//hibernate 对分页的支持很好,只能使用回调调用sessionreturn (List<Emp>) hibernateTemplate.execute(new HibernateCallback(){public Object doInHibernate(Session session) throws HibernateException, SQLException {String hql = "from Emp";return session.createQuery(hql).setFirstResult(firstResult).setMaxResults(maxResult).list();}});}}
最后是配置spring配置文件applicationContext.xml,这种方式是直接读取了hibernate.cfg.xml配置文件
<?xml version="1.0" encoding="UTF-8"?><!-- - Application context definition for JPetStore's business layer. - Contains bean references to the transaction manager and to the DAOs in - dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation"). --><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><!-- 配置SessionFactory :1)读取hibernate.cfg.xml文件--><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation" value="classpath:hibernate.cfg.xml"></property></bean><!-- 1 指定事务管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 2 配置事务的特性(事务的传播特性和事务的隔离级别) --><tx:advice id="mAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" propagation="NOT_SUPPORTED" isolation="READ_COMMITTED" read-only="true"/><tx:method name="*" propagation="REQUIRED" isolation="READ_COMMITTED"/></tx:attributes></tx:advice><!-- 3 配置Aop:事务配置service层(此处没有service就配置到了dao层) --><aop:config><aop:pointcut id="curd" expression="execution (* com.xxx.dao..*.*(..))"/><aop:advisor advice-ref="mAdvice" pointcut-ref="curd"/></aop:config><bean id="empDao" class="com.xxx.dao.impl.EmpDaoImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean></beans>
我们也可以丢弃掉hibernate.cfg.xml文件,把这些信息配置到.properties文件中,然后在spring配置文件中读取,这样的好处是,项目完结后,源代码一般不给,就可以给这个.properties配置文件,用户可以根据需要自行修改里面的内容
hibernate用的c3p0连接池,所以我这里就把配置文件名称叫做c3p0.properties,内容为:
jdbc.driverClass=com.mysql.jdbc.Driverjdbc.url=jdbc\:mysql\://localhost\:3306/struts2jdbc.username=rootjdbc.password=1234dialect=org.hibernate.dialect.MySQLDialectShowSql=true
spring配置文件就这样配置:
<?xml version="1.0" encoding="UTF-8"?><!-- - Application context definition for JPetStore's business layer. - Contains bean references to the transaction manager and to the DAOs in - dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation"). --><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><!-- 读取C3P0.properties文件 --><context:property-placeholder location="classpath:c3p0.properties"/><!-- 配置SessionFactory :3参数:连接池 hibernate自身特性 注册映射文件连接池(C3p0)可以在外界修改参数C3P0核心类:ComboPooledDataSource--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><property name="driverClass" value="${jdbc.driverClass}"></property><property name="jdbcUrl" value="${jdbc.url}"></property><property name="user" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">${dialect}</prop><prop key="hibernate.show_sql">${ShowSql}</prop></props></property><property name="mappingResources"><list><value>com/xxx/po/Dept.hbm.xml</value><value>com/xxx/po/Emp.hbm.xml</value></list></property></bean><!-- 1 指定事务管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 2 配置事务的特性(事务的传播特性和事务的隔离级别) --><tx:advice id="mAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" propagation="NOT_SUPPORTED" isolation="READ_COMMITTED" read-only="true" /><tx:method name="*"propagation="REQUIRED"isolation="READ_COMMITTED"/></tx:attributes></tx:advice><!-- 3 配置Aop:事务配置service层 --><aop:config><aop:pointcut id="curd" expression="execution (* com.xxx.dao..*.*(..))"/><aop:advisor advice-ref="mAdvice" pointcut-ref="curd"/></aop:config><bean id="empDao" class="com.xxx.dao.impl.EmpDaoImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean></beans>
自此,spring整合hibernate就算配置完成了。
- Spring:Spring整合Hibernate
- 【Spring】Spring+hibernate整合
- struts整合spring整合hibernate
- spring 整合hibernate整合方式
- 整合 struts spring hibernate
- struts+spring+hibernate整合
- struts,hibernate,spring整合
- struts+spring+hibernate整合
- struts+spring+hibernate整合
- Spring+hibernate+DWR整合
- webwork+spring+hibernate整合
- webwork+spring+hibernate整合
- Spring整合Hibernate
- Struts hibernate Spring 整合
- Struts hibernate Spring 整合
- Spring整合Hibernate
- 整合Spring、Struts、Hibernate
- webwork+spring+hibernate整合
- 【Linux基础】守护进程概述
- java获取当前类的绝对路径
- 简单卷积程序
- C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- 从零开始学习MFC与数字图像处理(二)
- spring整合Hibernate
- Ubuntu 下GTK编译、安装、测试(转载)
- ACM整数的尾数
- 数据库系统工程师下午试题分析与解答
- html小知识1
- 子网划分
- 数字统计
- sqlite
- Qt 通过ODBC连接SQL Server