框架整合----------Hibernate、spring整合

说到整合框架,其实也就是环境的搭建了,首先我们要导包,这里连接数据库我们用到了spring容器,我们用连接池来进行数据库的连接,我们需要导入c3p0和jdbc的jar包,其余的就是spring和Hibernate的jar包

之后我们在src下新建一系列的包和类,dao层我们新建一个接口,在建一个接口的实现类,同样service层也是新建一个接口和实现类,再写一个测试的main方法,当然实体类肯定不能少

接下来新建一个spring的xml(app.xml),在这个xml中我们获得sessionfactory,并加载配置文件和映射关系

接下来就要在xml中配置bean了

  1首先是dao层

  2其次就是service层

  3.事务管理器 和sessionFactory关联

  4.事务通知

  5定义切点

现在基本的xml配置就完成了

到这里框架就已经搭建好了,接下来就是main方法中该注意的事项了

下面是main方法代码

package com.hanqi.test;

import java.math.BigDecimal;

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

import com.hanqi.entity.AccountBank;
import com.hanqi.service.AccountBankServiceInterface;

public class TestMain {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根

        ApplicationContext ac =
                new ClassPathXmlApplicationContext("app.xml") ;

        //service层接口实例化
        AccountBankServiceInterface abs = (AccountBankServiceInterface)ac.getBean("kahao1") ;

        System.out.println(abs.getBankCard("123123"));

        AccountBank ab = new AccountBank("123","刘四","9999",new BigDecimal(777),"333") ;

        abs.addCard(ab); 

    }

}

在上面,我们看到了spring容器的调用,也就是下面这行代码

 //service层接口实例化
        AccountBankServiceInterface abs = (AccountBankServiceInterface)ac.getBean("kahao1") ;

这里是接口的实例化而不是实现类的实例化,这里要特别注意,否则会发生下面的异常

Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy9 cannot be cast to com.hanqi.service.impl.AccountBankService
at com.hanqi.test.TestMain.main(TestMain.java:24)

下次遇到这样的异常也会解决了吧,

接下来放上所有的代码供参考

dao接口

package com.hanqi.dao;

import com.hanqi.entity.AccountBank;

public interface AccountBankDAOInterface {

    AccountBank getCard(String kahao) ;

    void insert(AccountBank ab) ;

    void update(AccountBank ab) ;

    void delete(AccountBank ab) ;
}

dao实现类

package com.hanqi.impl;

import org.hibernate.SessionFactory;

import com.hanqi.dao.AccountBankDAOInterface;
import com.hanqi.entity.AccountBank;

public class AccountBankDAO implements AccountBankDAOInterface {

    //  注入SessionFactory
    private SessionFactory sessionFactory ;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public AccountBank getCard(String kahao) {

        AccountBank ab = (AccountBank)sessionFactory
                                        .getCurrentSession()     //得到当前session
                                        .get(AccountBank.class, kahao) ;

        return ab;
    }

    @Override
    public void insert(AccountBank ab) {

        sessionFactory.getCurrentSession().save(ab) ;

    }

    @Override
    public void update(AccountBank ab) {

        sessionFactory.getCurrentSession().update(ab);

    }

    @Override
    public void delete(AccountBank ab) {

        sessionFactory.getCurrentSession().delete(ab); 

    }

}

service接口

package com.hanqi.service;

import com.hanqi.entity.AccountBank;

public interface AccountBankServiceInterface {

    AccountBank getBankCard(String kahao) ;

    void addCard(AccountBank ab) ;

    void updateCard(AccountBank ab) ;

    void deleteCard(AccountBank ab) ;
}

service实现类

package com.hanqi.service.impl;

import com.hanqi.entity.AccountBank;
import com.hanqi.impl.AccountBankDAO;
import com.hanqi.service.AccountBankServiceInterface;

public class AccountBankService implements AccountBankServiceInterface {

    //注入DAO
    private AccountBankDAO accountBankDAO ;

    public void setAccountBankServiceInterface(AccountBankDAO accountBankDAO) {
        this.accountBankDAO = accountBankDAO;
    }

    @Override
    public AccountBank getBankCard(String kahao) {

        return accountBankDAO.getCard(kahao);
    }

    @Override
    public void addCard(AccountBank ab) {

        accountBankDAO.insert(ab);
    }

    @Override
    public void updateCard(AccountBank ab) {

        accountBankDAO.update(ab);
    }

    @Override
    public void deleteCard(AccountBank ab) {

        accountBankDAO.delete(ab);
    }

}

db.properties文件

jdbc.driver_class=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=test0816
jdbc.password=934617699
jdbc.initPoolSize=1
jdbc.maxPoolSize=10

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:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd
        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.2.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">

<!-- 基于c3p0连接池的数据源 -->
<!-- 加载外部配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>

<!-- 连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver_class}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
        <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
</bean>

<!-- Hibernate 的 SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

    <property name="dataSource" ref="dataSource"></property>

    <!-- 加载Hibernate的配置文件 -->
    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>

    <!-- 映射文件, 可以使用*作为通配符-->
    <property name="mappingLocations" value="classpath:com/hanqi/entity/*.hbm.xml" ></property>

</bean>

<!-- bean -->
<!-- DAO -->
<bean id="accountBankDAO"  class="com.hanqi.impl.AccountBankDAO"
            p:sessionFactory-ref="sessionFactory"></bean>

<!-- Service -->
<bean id="kahao1" class="com.hanqi.service.impl.AccountBankService"
            p:accountBankServiceInterface-ref="accountBankDAO"></bean>

<!-- 声明式事务 -->
<!-- 1.事务管理器 和sessionFactory关联 -->
<bean id="transactionManager"
            class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<!-- 事务通知 -->
<tx:advice id="adv" transaction-manager="transactionManager">
        <tx:attributes>
                <tx:method name="*"/><!-- 使用事务的方法 -->
                <tx:method name="get" read-only="true"/> <!-- get开头的只读方法,不使用事务 -->
        </tx:attributes>
</tx:advice>

<!-- 事务切点 -->
<aop:config>
        <aop:advisor advice-ref="adv" pointcut="execution(* com.hanqi.service.*.*(..))"/>  <!-- 接口 -->
</aop:config>

</beans>
时间: 2024-10-09 23:39:21

框架整合----------Hibernate、spring整合的相关文章

Hibernate+Spring整合开发步骤

Hibernate是一款ORM关系映射框架+Spring是结合第三方插件的大杂烩,Hibernate+Spring整合开发效率大大提升. 整合开发步骤如下: 第一步:导入架包: 1.Hibernate基础包+Spring基础包(AOP代理包和cglib...) 第二步:在spring配置文件中配置datasource(数据库连接信息要么写在hibernate.cfg.xml中:要么写在datasource中) <?xml version="1.0" encoding="

Struts 2 + Hibernate + Spring 整合要点

Struts 2 和 Spring 的功能有重合,因此有必要说明下,整合中分别使用了两种框架的哪些技术. Struts 2 使用功能点: 1.拦截器.一处是对非登录用户购物进行拦截,一处是对文件上传的格式进行拦截.前者的拦截器文件需自己手动编写,后者可直接用 Struts 2 框架封装好的拦截器. 2.数据校验,重写 Validate() 方法.对用户注册信息进行校验. 3.核心控制器 FilterDispatcher,限制只有管理员才能访问后台. Spring 使用功能点: 1.配置 bean

Struts2+Hibernate+Spring 整合示例[转]

原文 http://blog.csdn.net/tkd03072010/article/details/7468769 Spring整合Struts2.Hibernate原理概述: 从用户角度来看,用户发出HTTP请求,当MVC框架的控制器组件拦截到用户请求时,将调用系统的业务逻辑组件,业务逻辑组件则调用系统的DAO组件,而DAO组件则依赖于SessionFactory和DataSource等底层组件实现数据库访问. 从系统实现角度看,Ioc容器先创建SessionFactory和DataSou

Spring框架——day03springMVC与Spring整合

一,springMVC与Spring整合 SpringMVC本就是Spring的一部分,因此两个框架并不需要整合,但是因为springmvc属于web层,所以我们希望将web层的配置单独拿出来. 1.创建工程并配置必要的依赖 2.在resources中创建三个配置spring文件: spring-web.xml spring-service.xml spring-dao.xml 3.在web.xml中配置springmvc的前端控制器.spring的监听器.字符集过滤器 <filter> &l

J2EE框架(Struts&amp;Hibernate&amp;Spring)的理解

SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层)Struts:Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求.在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发.(View:沿用JSP,HTTP,Form,Tag,Resourse :Controller:ActionServlet,struts-config.xml,Action)Hibernate:Hibernate是一个持久层框架,它只负责与关系数据库的操作

JavaWeb_(Spring框架)用户登陆Spring整合到Servlet中

一.使用servlet技术开发用户登陆功能 在MySQL中准备一个user表,表中增加一条假数据 使用Servlet实现用户登陆的功能 用户登陆的<from>表单 <form id="loginFrom" action="${pageContext.request.contextPath }/userLogin" method="post"> <div class="input-group input-gr

Struts2,Hibernate,Spring整合时的错误

1 type Exception report 2 3 message 4 5 description The server encountered an internal error that prevented it from fulfilling this request. 6 7 exception 8 9 java.lang.NullPointerException 10 com.bjsxt.registration.action.UserAction.execute(UserActi

SSH整合之spring整合spring(续上)

一.项目结构 二.新建UserAction,继承自ActionSupport,并实现ModelDriven<User>接口:getModel方法是用来装配对象属性的:注意,userService字段名要和applicationContext.xml中配置的userservice bean中id名称一致 package com.hjp.action; import com.hjp.domain.User; import com.hjp.service.UserService; import co

Spring框架学习(4)spring整合hibernate

内容源自:spring整合hibernate    spring整合注解形式的hibernate 这里和上一部分学习一样用了模板模式, 将hibernate开发流程封装在ORM层提供的模板类HibernateTemplate中,通过在DAO中对模板类的使用,实现对传统hibernate开发流程的代替. 一.先来看看Hibernate的传统开发流程: 1) 配置SessionFactory对象 hibernate.cfg.xml <session-factory> a 数据源 driver_cl

Spring 整合 Hibernate

Spring 整合 Hibernate •Spring 支持大多数流行的 ORM 框架, 包括 Hibernate JDO, TopLink, Ibatis 和 JPA. •Spring 对这些 ORM 框架的支持是一致的, 因此可以把和 Hibernate 整合技术应用到其他 ORM 框架上. •Spring 2.0 同时支持 Hibernate 2.x 和 3.x. 但 Spring 2.5 只支持 Hibernate 3.1 或更高版本 1.Spring 整合 Hibernate 整合什么