`

Spring + Hibernate + JdbcTemplate

 
阅读更多
spring同时使用hibernate和jdbcTemplate事务 http://hi.baidu.com/i_ccboy/item/c9b82d88bc07cacdef083d1f
Spring的事务管理难点剖析(5):联合军种作战的混乱 http://www.iteye.com/topic/1121586
spring jdbcTemplate使用 http://log-cd.iteye.com/blog/215059
spring3 jdbctemplate 注解实例 http://blog.csdn.net/shadowsick/article/details/8888187
Spring JdbcTemplate方法详解 http://blog.csdn.net/dyllove98/article/details/7772463
Spring--JdbcTemplate详解-1 http://canann.iteye.com/blog/1729600
Spring--JdbcTemplate详解-2 http://canann.iteye.com/blog/1729604

两个配合使用的类:
NamedParameterJdbcTemplate 详解 http://blog.csdn.net/dyllove98/article/details/7772470
MapSqlParameterSource  http://wangjianwei866.blog.163.com/blog/static/9295823200991545549940/



部分源码
web.xml
==================================================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <display-name>Archetype Created Web Application</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>openSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>





servlet.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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans.xsd
    	http://www.springframework.org/schema/mvc
    	http://www.springframework.org/schema/mvc/spring-mvc.xsd
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context.xsd">
    <mvc:annotation-driven/>
    <context:component-scan base-package="com.controller" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>-->
    </context:component-scan>
    <mvc:resources location="/resources/" mapping="/resources/**"/>

    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
    <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="requestContextAttribute" value="rc"/>
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>





applicationContext-hibernate.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"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans.xsd
    	http://drools.org/schema/drools-spring
    	http://drools.org/schema/drools-spring-1.3.0.xsd
    	http://www.springframework.org/schema/tx
    	http://www.springframework.org/schema/tx/spring-tx.xsd
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context.xsd
    	http://www.springframework.org/schema/aop
    	http://www.springframework.org/schema/aop/spring-aop.xsd
    	http://www.springframework.org/schema/util
    	http://www.springframework.org/schema/util/spring-util.xsd"
       default-lazy-init="true">

    <!-- spring的jdbcTemplate -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- hibernate的sessionFactory -->
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
          p:packagesToScan="com.model">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <!--<prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
                <prop key="hibernate.cache.use_structured_entries">true</prop>
                <prop key="hibernate.generate_statistics">true</prop>-->
            </props>
        </property>
    </bean>
    <!-- 事务管理 -->
    <!-- 同时管理jdbcTemplate和hibernate事务 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 单独管理jdbcTemplate的事务 -->
    <!--<bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>-->
    <tx:annotation-driven transaction-manager="transactionManager"  proxy-target-class="true"/>

</beans>




service
==========================================================
package com.service.impl;

import com.dao.SysUserDao;
import com.model.SysUser;
import com.service.SysUserService;
import org.hibernate.SessionFactory;
import org.springframework.jdbc.core.*;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.jdbc.object.SqlUpdate;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import javax.sql.DataSource;
import java.sql.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * //Hibernate和JdbcTemplate的混合使用来测试事务
 * Created by Administrator on 14-6-16.
 */
@Service("sysUserService")
@Transactional
public class SysUserServiceImpl implements SysUserService {
    @Resource(name = "dataSource")
    private DataSource dataSource;
    @Resource(name = "hibernateTemplate")
    private HibernateTemplate hibernateTemplate;
    @Resource(name = "sessionFactory")
    private SessionFactory sessionFactory;
    @Resource(name = "jdbcTemplate")
    private JdbcTemplate jdbcTemplate;

    @Resource(name = "sysUserDao")
    private SysUserDao sysUserDao;

    //NamedParameterJdbcTemplate对JdbcTemplate封装,增加了命名参数特性
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
    //SimpleJdbcTemplate对JdbcTemplate封装,某些特性要在java5以上才工作
    //private SimpleJdbcTemplate simpleJdbcTemplate;

    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public void test(boolean isNeedCommit) {
        //Hibernate
        testHibernate();
        testHibernateTemplate();


        //Spring JDBCTemplate
        testJdbcTemplateInsert1();
        testJdbcTemplateInsert2();
        testJdbcTemplateDelete();
        testJdbcTemplateUpdate();

        testJdbcFindCountByFirstName();

        testJdbcTemplateSearch1();
        testJdbcTemplateSearch2();
        testJdbcTemplateSearch3();

        //是否回滚,由前台提交的参数决定
        sysUserDao.isNeedCommit(isNeedCommit);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public void testHibernate() {
        Date date = new Date();
        SysUser user = new SysUser();
        user.setUserName("Hibernate[" + date.getTime() + "]");
        sessionFactory.getCurrentSession().save(user);
    }


    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public void testHibernateTemplate() {
        Date date = new Date();
        SysUser user = new SysUser();
        user.setUserName("HibernateTemplate[" + date.getTime() + "]");
        hibernateTemplate.save(user);
    }

    /**
     * 用SimpleJdbcInsert插入一条记录
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public void testJdbcTemplateInsert1() {
        System.out.println("===================================================testJdbcTemplateInsert1");
        Date date = new Date();
        //jdbcTemplate = new JdbcTemplate(dataSource);
        //namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
        //SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource); //这个类已经过时,使用NamedParameterJdbcTemplate代替
        SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(dataSource)
                .withTableName("sys_user")
                .usingColumns("user_name", "password")//插入这些字段
                .usingGeneratedKeyColumns("user_id");//带回生成的id

        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("user_name", "testJdbcTemplateInsert1[" + date.getTime() + "]");
        parameters.put("password", "testJdbcTemplateInsert1");
        long id = simpleJdbcInsert.executeAndReturnKey(parameters).longValue();
        System.out.println(id);
    }

    /**
     * 插入记录并返回自动生成的主键Id(MySQL中不行,Oracle可以)
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public void testJdbcTemplateInsert2() {
        System.out.println("===================================================testJdbcTemplateInsert2");
        final String addSql = "insert into sys_user(user_name,password) values (?,?)";
        final Date date = new Date();
        KeyHolder keyHolder = new GeneratedKeyHolder();
        jdbcTemplate.update(new PreparedStatementCreator() {
            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
                PreparedStatement ps =
                        conn.prepareStatement(addSql, new String[]{"id"});//返回id
                ps.setString(1, "testJdbcTemplateInsert2[" + date.getTime() + "]");
                ps.setString(2, null);
                return ps;
            }

        });
        System.out.println(keyHolder.getKey());
    }

    /**
     * //使用SqlUpdate编译sql并执行
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public void testJdbcTemplateUpdate() {
        System.out.println("===================================================testJdbcTemplateUpdate");
        SqlUpdate sqlUpdate = new SqlUpdate();
        sqlUpdate.setDataSource(dataSource);
        sqlUpdate.setSql("update sys_user set password=? where user_name=?");
        sqlUpdate.declareParameter(new SqlParameter(Types.VARCHAR));
        sqlUpdate.declareParameter(new SqlParameter(Types.VARCHAR));
        sqlUpdate.setReturnGeneratedKeys(true);
        sqlUpdate.compile();

        Date date = new Date();
        Object[] params = new Object[]{date.getTime() + "------", "testJdbcTemplateUpdate[1403262022766]"};
        KeyHolder keyHolder = new GeneratedKeyHolder();
        sqlUpdate.update(params, keyHolder);
        int id = -1;
        if (keyHolder.getKey() != null)
            id = keyHolder.getKey().intValue();
        System.out.println(id);
    }

    @Override
    public void testJdbcTemplateDelete() {

    }

    /**
     * 插入/更新/删除数据
     */
    public int testJdbcUpdate(String sql, Object[] obj) {
        return jdbcTemplate.update(sql, obj);
    }

    /**
     * 根据SQL查询记录总数
     *
     * @param sql
     * @return
     */
    public int testJdbcFindRowCountBySQL(String sql) {
        return jdbcTemplate.queryForInt(sql);
    }


    /**
     * SqlParameterSource
     * 统计user_name相同的总数
     */
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public void testJdbcFindCountByFirstName() {
        System.out.println("===================================================findCountByFirstName");
        String sql = "select count(0) from sys_user where user_name = :user_name";
        SqlParameterSource namedParameters = new MapSqlParameterSource("user_name", "pandy");
        //Map namedParameter = Collections.singletonMap("first_name",firstName);
        //还有一种Bean封装的方式
        //SqlParameterSource namedParameters = new BeanPropertySqlParameterSource(exampleActor);
        namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
        int id = namedParameterJdbcTemplate.queryForInt(sql, namedParameters);
        System.out.println(id);
    }

    /**
     * //使用RowMapper接口处理查询结果集
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public void testJdbcTemplateSearch1() {
        System.out.println("===================================================testJdbcTemplateSearch1");
        String sql = "select t1.* from sys_user t1 where t1.user_name = ?";
        List<SysUser> list = jdbcTemplate.query(sql,
                new Object[]{"pandy"}, new RowMapper() {
            @Override
            public Object mapRow(ResultSet resultSet, int rowNum) throws SQLException {
                SysUser vo = new SysUser();
                vo.setUserId(resultSet.getInt("user_id"));
                vo.setUserName(resultSet.getString("user_name"));
                vo.setPassword(resultSet.getString("password"));
                vo.setEmail(resultSet.getString("email"));
                return vo;
            }
        });
        System.out.println(list == null ? 0 : list.size());
    }

    /**
     * // MapSqlParameterSource 参数设定
     * // namedParameterJdbcTemplate //执行查询
     * // 使用ParameterizedRowMapper处理结果集
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public void testJdbcTemplateSearch2() {
        System.out.println("===================================================testJdbcTemplateSearch2");
        //String sql = "select user_id,user_name,password,email from sys_user where user_name = ?";
        String sql = "select user_id,user_name,password,email from sys_user where user_name = :user_name";
        ParameterizedRowMapper<SysUser> mapper = new ParameterizedRowMapper<SysUser>() {
            //notice the return type with respect to java 5 covariant return types
            public SysUser mapRow(ResultSet resultSet, int rowNum) throws SQLException {
                SysUser vo = new SysUser();
                vo.setUserId(resultSet.getInt("user_id"));
                vo.setUserName(resultSet.getString("user_name"));
                vo.setPassword(resultSet.getString("password"));
                vo.setEmail(resultSet.getString("email"));
                return vo;
            }
        };
        SysUser vo = null;
        /*simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
        vo = simpleJdbcTemplate.queryForObject(sql, mapper, "pandy");*/

        MapSqlParameterSource sqlParameterSource = new MapSqlParameterSource();
        sqlParameterSource.addValue("user_name", "pandy");
        namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
        vo = namedParameterJdbcTemplate.queryForObject(sql, sqlParameterSource, mapper);
        System.out.println(vo.getEmail());

    }

    /**
     * 返回所有对象
     *
     * @return
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public void testJdbcTemplateSearch3() {
        System.out.println("===================================================testJdbcTemplateSearch3");
        List<SysUser> list = jdbcTemplate.query(
                "select user_id,user_name,password,email from sys_user",
                new RowMapper() {
                    @Override
                    public Object mapRow(ResultSet resultSet, int i) throws SQLException {
                        SysUser vo = new SysUser();
                        vo.setUserId(resultSet.getInt("user_id"));
                        vo.setUserName(resultSet.getString("user_name"));
                        vo.setPassword(resultSet.getString("password"));
                        vo.setEmail(resultSet.getString("email"));
                        return vo;
                    }
                });
    }

    /**
     * 批量更新
     */
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public int[] testJdbcUpdateBatchActors(final List list) {
        System.out.println("===================================================updateBatchActors");
        int[] updateCounts = jdbcTemplate.batchUpdate(
                "update actors set first_name = ?, last_name = ? where id =? ",
                new BatchPreparedStatementSetter() {

                    public int getBatchSize() {
                        return list.size();
                    }

                    public void setValues(PreparedStatement ps, int i) throws SQLException {
//                        ps.setString(1, ((Actor)actors.get(i)).getFirstName());
//                        ps.setString(2, ((Actor)actors.get(i)).getLastName());
//                        ps.setLong(3, ((Actor)actors.get(i)).getId());
                    }

                });
        return updateCounts;
    }

    /**
     * 批量更新,
     * MapSqlParameterSource s,NamedParameterJdbcTemplate配合替换这里的代码,还没实现。
     */
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public int[] testJdbcUpdateBatchActorsSimple(final List<SysUser> sysUsers) {
        System.out.println("===================================================updateBatchActorsSimple");
        /*//如果对象数组与占位符出现位置一一对应
        //SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(actors.toArray());
        List<Object[]> batch = new ArrayList<Object[]>();
        for (SysUser sysUser : sysUsers) {
            Object[] values = new Object[]{//注意顺序
//                    actor.getFirstName(),
//                    actor.getLastName(),
//                    actor.getId()
            };
            batch.add(values);
        }
        int[] updateCounts = this.simpleJdbcTemplate.batchUpdate(
                "update actors set first_name = ?, last_name = ? where id =? ",
                batch);
        return updateCounts;*/
        return null;
    }

}
分享到:
评论

相关推荐

    Spring+Hibernate整合

    这种整合能够充分利用Spring的管理能力,对Hibernate进行配置和控制,同时利用Spring的数据访问支持,如JdbcTemplate或HibernateTemplate,来简化数据操作。 在整合过程中,首先需要配置Spring的ApplicationContext...

    Spring+hibernate整合源代码

    Spring 可以通过工厂方法或 JdbcTemplate、HibernateTemplate 提供的模板方法来获取 Session。 6. **Service 层设计**:Service 层是业务逻辑的核心,通常会注入 DAO 实例并调用其方法来完成业务处理。Service 层...

    struts2+spring+hibernate框架jar包

    此外,Spring还提供了数据库访问的支持,如JdbcTemplate和HibernateTemplate,可以方便地与Hibernate集成。 Hibernate是一个对象关系映射(ORM)框架,它解决了在Java应用中操作数据库的繁琐工作。Hibernate通过...

    Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA+JdbcTemplate

    在"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA+JdbcTemplate"的DEMO中,开发者通常会创建一个Maven工程,配置相关依赖,然后分别设置Spring的配置文件(如`applicationContext.xml`)、SpringMVC的配置文件...

    struts2.1.8+spring+hibernate框架整合所需jar包

    5. **整合Hibernate和Spring**:通过Spring的HibernateTemplate或JdbcTemplate来执行数据库操作,或者使用Hibernate的Session工厂,通过@Autowired注解自动注入到需要的地方。 6. **编写Action类**:Action类作为...

    struts2+hibernate+spring+jdbctemplate+EXT集成实例

    Struts2、Hibernate、Spring、JdbcTemplate以及EXT是Java Web开发中的重要框架和技术,它们各自在应用程序的不同层面发挥着关键作用。将这些技术整合在一起,可以构建出高效、灵活且可维护的Web应用。 1. **Struts2...

    Struts+Spring+Hibernate实现的增删查该Demo(不带jar包)

    在整合这三大框架时,通常会使用Spring的`HibernateTemplate`或`JdbcTemplate`来协调Struts和Hibernate的交互,避免直接在Action类中处理数据库操作,保持业务逻辑的纯粹。Spring还能够管理Hibernate的Session,确保...

    轻量级Java EE企业应用开发实战—光盘——Struts 2+Spring+Hibernate整合开发

    Spring与Hibernate的整合进一步简化了数据访问层的编写,通过Spring的数据访问抽象,如JdbcTemplate或HibernateTemplate,可以实现更优雅的数据库操作。 这个实战教程的压缩包文件包含了多个部分,可能代表教程的...

    Xfire配置Web Service+Spring+Hibernate详细配置流程

    接着,通过Spring的DAO模板(如JdbcTemplate或HibernateTemplate)将ORM操作委托给Hibernate,这样可以避免直接在业务逻辑代码中处理数据库细节。 5. **Web服务配置**: 要实现Web服务,Spring需要配置一个Servlet...

    学生信息系统(使用了Sturts+Spring+Hibernate技术)

    Spring的数据访问层则可以通过其提供的JdbcTemplate或HibernateTemplate,方便地与数据库进行交互。 接下来,Hibernate作为对象关系映射(Object-Relational Mapping,ORM)框架,简化了数据库操作。在这个学生信息...

    Struts2 + spring + hibernate + dwr 完美整合代码

    此外,Spring还提供了数据访问抽象,如JdbcTemplate或HibernateTemplate,使得数据库操作更为简单。 **Hibernate** 是一款强大的对象关系映射(ORM)框架,它将数据库操作转换为对Java对象的操作,简化了数据库操作...

    struts2+spring+hibernate+生成报表

    此外,Spring还提供了数据访问抽象层,如JdbcTemplate或HibernateTemplate,简化了数据库操作。 Hibernate是ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库。在报表生成时,我们通常需要从...

    struts2 + spring + hibernate3实现的投票系统后台

    此外,Spring还提供了数据访问抽象,如JdbcTemplate和HibernateTemplate,用于简化数据库操作。 3. Hibernate3:Hibernate是一个对象关系映射(Object-Relational Mapping,ORM)框架,它消除了Java应用与数据库...

    Spring+Hibernate+JSF实例

    - **Spring Data Access**:学习如何使用JdbcTemplate或HibernateTemplate与数据库进行交互。 2. **Hibernate ORM**: - **实体映射**:学习如何定义实体类,以及如何通过Hibernate的注解或XML配置将它们映射到...

    用maven整合struts+spring+hibernate

    - 使用Spring的JdbcTemplate或Hibernate的Session进行数据库操作。 6. 测试与调试: 在整合完成后,可以通过单元测试和集成测试来确保各个组件正常工作。JUnit和Mockito等工具可以辅助进行测试,同时IDE如...

    最小的Spring+Hibernate应用系统

    使用Spring的JdbcTemplate或Hibernate的Session接口,可以轻松实现对数据库的增删改查操作。在Service层,我们封装这些操作为业务方法,供Controller调用。 8. 整合测试: 使用JUnit和Mockito进行单元测试,确保...

    Struts+Spring+Hibernate整合教程.pdf

    在整合过程中,通常会使用Spring的HibernateTemplate或者JdbcTemplate来简化数据库操作,减少代码量并提高可维护性。 整合步骤大致如下: 1. 引入相关库:添加Struts、Spring和Hibernate的jar包到项目中。 2. 配置...

    Spring+hibernate实例

    Spring的JdbcTemplate或HibernateTemplate可以帮助简化数据访问层的编写,同时Spring的声明式事务管理可以确保事务的一致性。 4. **Spring MVC**:如果SpringDemo涉及到Web应用,那么Spring MVC会是前端控制器。它...

Global site tag (gtag.js) - Google Analytics