- 浏览: 3425023 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
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
==================================================================
servlet.xml
=================================================
applicationContext-hibernate.xml
===============================================================
service
==========================================================
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; } }
- SpringHibernateJdbcTemplate.rar (86.8 KB)
- 下载次数: 3
发表评论
-
Spring Boot 属性配置
2016-06-24 11:04 1183Spring Boot 属性配置和使用 http://blog ... -
Spring Boot 集成MyBatis
2016-06-24 10:55 2028Spring Boot 集成MyBatis http://bl ... -
Spring MVC防重复提交
2016-06-17 15:47 1646http://my.oschina.net/zyqjustin ... -
Spring容器加载完之后执行特定任务
2016-06-17 15:36 2288http://my.oschina.net/simpleton ... -
使用spring-session和shiro来代理session的配置
2016-06-16 11:21 12060使用spring-session和redis来代理sessio ... -
JSTL 的 if else : 有 c:if 没有 else 的处理
2016-06-14 09:52 1337http://blog.csdn.net/xiyuan1999 ... -
spring mvc 请求转发和重定向
2016-06-14 09:48 1400http://blog.csdn.net/jackpk/art ... -
mvc:view-controller
2016-05-18 10:26 1084http://blog.csdn.net/lzwglory/a ... -
spring配置事物的方式:注解和aop配置
2016-05-14 00:26 4104参考: Spring AOP中pointcut express ... -
分布式任务调度组件 Uncode-Schedule
2016-05-13 14:47 2287http://www.oschina.net/p/uncode ... -
写个mybatis的拦截插件,实现将所有执行的sql写入文件里
2016-05-12 15:59 5106原文 http://3131854.blog.51cto.co ... -
Mybatis分库分表扩展插件
2016-05-12 15:47 1625http://fangjialong.iteye.com/bl ... -
spring+mybatis+atomikos 实现JTA事务
2016-05-11 22:00 5524sping配置多个数据源 不同用户操作不同数据库 http:/ ... -
Spring中使用注解 @Scheduled执行定时任务
2016-05-10 09:39 1567原文:http://dwf07223.blog.51cto.c ... -
Spring中配置Websocket
2016-05-05 16:55 1278spring+websocket整合(springMVC+sp ... -
redis 集群中Session解决方案之Spring Session
2016-05-04 08:54 1316集群中Session解决方案之Spring Session h ... -
使用Spring-data进行Redis操作
2016-05-04 08:54 4795使用Spring-data进行Redis操作 http://z ... -
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
2016-05-03 13:35 1062Spring4新特性——集成Bean Validation 1 ... -
SpringMVC介绍之Validation
2016-05-03 13:10 985SpringMVC介绍之Validation http://h ... -
spring 注解方式下使用commons-validator 验证表单
2016-05-03 11:08 3078原文: http://www.programgo.com/ar ...
相关推荐
这种整合能够充分利用Spring的管理能力,对Hibernate进行配置和控制,同时利用Spring的数据访问支持,如JdbcTemplate或HibernateTemplate,来简化数据操作。 在整合过程中,首先需要配置Spring的ApplicationContext...
Spring 可以通过工厂方法或 JdbcTemplate、HibernateTemplate 提供的模板方法来获取 Session。 6. **Service 层设计**:Service 层是业务逻辑的核心,通常会注入 DAO 实例并调用其方法来完成业务处理。Service 层...
此外,Spring还提供了数据库访问的支持,如JdbcTemplate和HibernateTemplate,可以方便地与Hibernate集成。 Hibernate是一个对象关系映射(ORM)框架,它解决了在Java应用中操作数据库的繁琐工作。Hibernate通过...
在"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA+JdbcTemplate"的DEMO中,开发者通常会创建一个Maven工程,配置相关依赖,然后分别设置Spring的配置文件(如`applicationContext.xml`)、SpringMVC的配置文件...
5. **整合Hibernate和Spring**:通过Spring的HibernateTemplate或JdbcTemplate来执行数据库操作,或者使用Hibernate的Session工厂,通过@Autowired注解自动注入到需要的地方。 6. **编写Action类**:Action类作为...
Struts2、Hibernate、Spring、JdbcTemplate以及EXT是Java Web开发中的重要框架和技术,它们各自在应用程序的不同层面发挥着关键作用。将这些技术整合在一起,可以构建出高效、灵活且可维护的Web应用。 1. **Struts2...
在整合这三大框架时,通常会使用Spring的`HibernateTemplate`或`JdbcTemplate`来协调Struts和Hibernate的交互,避免直接在Action类中处理数据库操作,保持业务逻辑的纯粹。Spring还能够管理Hibernate的Session,确保...
Spring与Hibernate的整合进一步简化了数据访问层的编写,通过Spring的数据访问抽象,如JdbcTemplate或HibernateTemplate,可以实现更优雅的数据库操作。 这个实战教程的压缩包文件包含了多个部分,可能代表教程的...
接着,通过Spring的DAO模板(如JdbcTemplate或HibernateTemplate)将ORM操作委托给Hibernate,这样可以避免直接在业务逻辑代码中处理数据库细节。 5. **Web服务配置**: 要实现Web服务,Spring需要配置一个Servlet...
Spring的数据访问层则可以通过其提供的JdbcTemplate或HibernateTemplate,方便地与数据库进行交互。 接下来,Hibernate作为对象关系映射(Object-Relational Mapping,ORM)框架,简化了数据库操作。在这个学生信息...
此外,Spring还提供了数据访问抽象,如JdbcTemplate或HibernateTemplate,使得数据库操作更为简单。 **Hibernate** 是一款强大的对象关系映射(ORM)框架,它将数据库操作转换为对Java对象的操作,简化了数据库操作...
此外,Spring还提供了数据访问抽象层,如JdbcTemplate或HibernateTemplate,简化了数据库操作。 Hibernate是ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库。在报表生成时,我们通常需要从...
此外,Spring还提供了数据访问抽象,如JdbcTemplate和HibernateTemplate,用于简化数据库操作。 3. Hibernate3:Hibernate是一个对象关系映射(Object-Relational Mapping,ORM)框架,它消除了Java应用与数据库...
- **Spring Data Access**:学习如何使用JdbcTemplate或HibernateTemplate与数据库进行交互。 2. **Hibernate ORM**: - **实体映射**:学习如何定义实体类,以及如何通过Hibernate的注解或XML配置将它们映射到...
- 使用Spring的JdbcTemplate或Hibernate的Session进行数据库操作。 6. 测试与调试: 在整合完成后,可以通过单元测试和集成测试来确保各个组件正常工作。JUnit和Mockito等工具可以辅助进行测试,同时IDE如...
使用Spring的JdbcTemplate或Hibernate的Session接口,可以轻松实现对数据库的增删改查操作。在Service层,我们封装这些操作为业务方法,供Controller调用。 8. 整合测试: 使用JUnit和Mockito进行单元测试,确保...
在整合过程中,通常会使用Spring的HibernateTemplate或者JdbcTemplate来简化数据库操作,减少代码量并提高可维护性。 整合步骤大致如下: 1. 引入相关库:添加Struts、Spring和Hibernate的jar包到项目中。 2. 配置...
Spring的JdbcTemplate或HibernateTemplate可以帮助简化数据访问层的编写,同时Spring的声明式事务管理可以确保事务的一致性。 4. **Spring MVC**:如果SpringDemo涉及到Web应用,那么Spring MVC会是前端控制器。它...