- 浏览: 3566751 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
HibernateDaoSupport与JdbcDaoSupport
- 博客分类:
- Hibernate
Dao 的支持类可以有好多,如: JdbcDaoSupport , HibernateDaoSupport ,JdoDaoSupport等,下面对最常用的HibernateDaoSupport与JdbcDaoSupport做一小总结: IUserDao.java://定义接口 UserDao.java: TestA.java://调用updateUser()方法 测试: 年轻人要少一些浮躁、多一些真才实学
由于数据的批量处理(比如往RDBMS插入几万条数据)非常耗资源,因此建议在所有场合能够借助于JDBC完成,而不要去采用Hibernate API。本文主要围绕Spring内置的各类JDBC API抽象支持展开的。 1.1. JdbcTemplate
内置的batchUpdate(final String[] sql) 这一方法适合于小批量数据的CUD(增、更新、删除)操作,而且SQL类型不限。由于其内部使用了Statement语句,所以数据的操作效率一般。 1.2. JdbcTemplate
内置的batchUpdate(String sql, final BatchPreparedStatementSetter pss) 这一方法也仅仅适合于小批量数据的CUD(增、更新、删除)操作,但始终是同一SQL(参数具有多样性)。由于其内部使用了PreparedStatement语句,所以数据的操作效率还是不错的。下面给出了操作示例: final int[] no = new int[]{7369,7499,7521,7566,7654,7698}; jt.batchUpdate("update emp set sal = ? where empno = ?", new BatchPreparedStatementSetter(){ public void setValues(PreparedStatement ps, int i) throws SQLException { ps.setInt(1, no[i]); ps.setFloat(2, no[i]); } public int getBatchSize() { return no.length; } }); 这一方法适合于各种批量数据的CUD(增、更新、删除)操作,但始终是同一SQL(参数具有多样性)。由于其内部使用了PreparedStatement语句,所以数据的操作效率还是不错的。下面给出了操作示例: DataSource ds = gbfa.getBean("dataSource"); final int[] no = new int[]{7369,7499,7521,7566,7654,7698}; BatchSqlUpdate bsu = new BatchSqlUpdate(ds, "update emp set sal=? where empno = ?"); bsu.setBatchSize(4); bsu.setTypes(new int[]{Types.FLOAT, Types.INTEGER}); for(int i = 0; i < no.length; ++i){ log.info(bsu.update(new Object[]{no[i],no[i]})) ; } bsu.flush();
同JdbcTemplate内置的batchUpdate(String sql, final
BatchPreparedStatementSetter
pss)相比,BatchSqlUpdate会自动分批待批量处理的数据。比如,如果需要批量操作10万条数据,则可以控制其batchSize,从而在
时间(RDBMS可知性)和空间(内存)上达到平衡。 务必注意,在使用BatchSqlUpdate的最后,不要忘记手工调用其暴露的flush()方法。
一、在Spring框架中实现连接数据库方式:
1、、借助类HibernateDaoSupport的简约化实现:
借助这个类必须需要HIbernate框架,用到HIbernate里提供的HibernateTemplate模板,从而进行增、删、改、查操作。
TestA.java:
public class TestA extends HibernateDaoSupport{
public void test(){
HibernateTemplate template = this.getHibernateTemplate();
List list = template.find("from User");
for(int i=0;i<list.size();i++){
User u = (User)list.get(i);
System.out.println(u.getUserid()+" "+u.getEmail());
}
}
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
TestA t = (TestA)ctx.getBean("testa");
t.test();
}
}
需要在Spring的配置文件applicationContext.xml中控制反转用到连接数据库中的类是注入SessionsFactory,如下:
applicationContext.xml:
<bean id="testa" class="com.sun.demo.TestA">
<property name="sessionFactory">
<ref bean="mySessionFactory"/>
</property>
</bean>
2、、借助类JdbcDaoSupport的简约化实现:
借助这个类不需要HIbernate框架,也不需要有ORM的对象关联映射。但它和HibernateDaoSupport很类似,有JdbcTemplate来实现增、删、改、查操作。
TestA.java:
public class TestA extends JdbcDaoSupport{
public void test(){
int n = this.getJdbcTemplate().queryForInt("select max(userid) from User");
System.out.println(n);
}
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
TestA ta = (TestA)ctx.getBean("testa");
ta.test();
}
}
需要在Spring的配置文件applicationContext.xml中控制反转用到连接数据库中的类是注入DataSource,如下:
applicationContext.xml:
<bean id="testa" class="com.sun.demo.TestA">
<property name="dataSource">
<ref bean="myDataSource"/>
</property>
</bean>
二、编程式事务管理、声明式事务管理中HibernateDaoSupport与JdbcDaoSupport的应用:
1、编程式事务管理:
1>、JdbcDaoSupport编程式事物管理,必须继承JdbcDaoSupport类,得到JdbcTemplate从而实现事务管理;
TestA.java:
public class TestA extends JdbcDaoSupport{
public void test(){
PlatformTransactionManager ptm = new DataSourceTransactionManager(this.getDataSource());
TransactionTemplate tst = new TransactionTemplate(ptm);
tst.execute(new TransactionCallback(){
public Object doInTransaction(TransactionStatus status) {
getJdbcTemplate().update("update User set password='1230' where userid='1001'");
getJdbcTemplate().update("update User set where userid='100000001'");
getJdbcTemplate().update("update User set phone='phone'");
return null;
}
});
}
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
TestA t = (TestA)ctx.getBean("testa");
t.test();
}
}
需要在Spring的配置文件applicationContext.xml中控制反转用到连接数据库中的类是注入DataSource,如下:
applicationContext.xml:
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
... ...
<property name="defaultAutoCommit">
<value>false</value>
</property>
</bean>
<bean id="testa" class="com.sun.demo.TestA">
<property name="dataSource">
<ref bean="myDataSource"/>
</property>
</bean>
2>、HibernateDaoSupport编程式事物管理,必须继承HibernateDaoSupport类,得到HibernateTemplate从而实现事务管理;
TestB.java:
public class TestB extends HibernateDaoSupport{
public void test(){
HibernateTransactionManager hm = new HibernateTransactionManager(this.getSessionFactory());
TransactionTemplate ttm = new TransactionTemplate(hm);
ttm.execute(new TransactionCallback(){
public Object doInTransaction(TransactionStatus status) {
User u1 = new User();
u1.setUserid("3001");
u1.setPassword("3001");
getHibernateTemplate().save(u1);
User u2 = new User();
u2.setUserid("3001");
u2.setPassword("3002");
getHibernateTemplate().save(u2);
return null;
}
});
}
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
TestB t = (TestB)ctx.getBean("testb");
t.test();
}
}
需要在Spring的配置文件applicationContext.xml中控制反转用到连接数据库中的类是注入SessionsFactory,如下:
applicationContext.xml:
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
... ...
<property name="defaultAutoCommit">
<value>false</value>
</property>
</bean>
<bean id="testb" class="com.sun.demo.TestB">
<property name="sessionFactory">
<ref bean="mySessionFactory"/>
</property>
</bean>
2、声明式事务管理:
1>、JdbcDaoSupport声明式样事物管理,必须继承JdbcDaoSupport类;
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
... ....
<property name="defaultAutoCommit">
<value>false</value>
</property>
</bean>
需要在Spring配置文件中配置声明事务处理,用JdbcDaoSupport提供的DataSourceTransactionManager如下:
<!-- 事务管理配置 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="myDataSource"/>
</property>
</bean>
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<!-- 事务管理属性 -->
<property name="transactionAttributes">
<props>
<prop key="updateUser">PROPAGATION_REQUIRED</prop>
</props>
<!-- 事务管理目标bean -->
</property>
<property name="target" ref="userdao"></property>
</bean>
<bean id="userdao" class="com.sun.demo.UserDao">
<property name="dataSource">
<ref bean="myDataSource"/>
</property>
</bean>
public interface IUserDao {
public void updateUser();
}
public class UserDao extends JdbcDaoSupport implements IUserDao{
public void updateUser(){
this.getJdbcTemplate().update("update User set password='password1' where userid='1001'");
this.getJdbcTemplate().update("update User set
password='password9999999999999999999999999999999' where
userid='1002'");
}
}
public class{
public void test(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDao u = (IUserDao)ctx.getBean("baseTransactionProxy");
u.updateUser();
}
public static void main(String[] args) {
TestA t = new TestA();
t.test();
}
}
2>、HibernateDaoSupport声明式事物管理,必须继承HibernateDaoSupport类;
IUserDao.java://定义接口
public interface IUserDao {
public void updateUser();
}
UserDao.java:
public class UserDao extends HibernateDaoSupport implements IUserDao{
public void updateUser(){
User u1 = new User();
u1.setUserid("1001");
u1.setPassword("5001");
this.getHibernateTemplate().update(u1);
User u2 = new User();
u2.setUserid("1003");
u2.setPassword("20015555555555555555555555555555555555555555555");
this.getHibernateTemplate().update(u2);
}
}
public class TestA{
public void test(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDao userdao= (IUserDao)ctx.getBean("userproxy");
userdao.updateUser();
}
public static void main(String[] args) {
TestA t = new TestA();
t.test();
}
}
需要在Spring配置文件中配置声明事务处理,用JdbcDaoSupport提供的HibernateTransactionManager如下:
applicationContext.xml:
<!-- 事务管理配置 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="mySessionFactory"/>
</property>
</bean>
<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<!-- 事务管理属性 -->
<property name="transactionAttributes">
<props>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
</props>
<!-- 事务管理目标bean -->
</property>
</bean>
<bean id="userdao" class="com.sun.demo.UserDao">
<property name="sessionFactory">
<ref bean="mySessionFactory"/>
</property>
</bean>
<bean id="userproxy" parent="baseTransactionProxy">
<property name="target" ref="userdao"></property>
</bean>
断尘居
Spring的JdbcDaoSupport的批量操作
发表评论
-
犯规犯规犯规
2015-09-18 16:45 1352http://bbs.hupu.com/4466597.htm ... -
快速掌握Hibernate中悲观锁和乐观锁
2012-10-19 21:33 1622快速掌握Hibernate ... -
Hibernate延迟加载机制
2012-10-19 21:22 1376Hibernate延迟加载 ... -
Hibernate 子类中不能用session 操作数据库
2012-08-28 14:46 1751Object obj = this.g ... -
hibernate3 下载网址
2012-08-28 12:53 1949我的天啊,居然找个hibernate下载的地址也找了半天 h ... -
师父告诉我诀窍
2012-08-23 16:53 1529<value>classpath*:com ... -
spring 整合 hibernate
2012-07-28 10:41 15021.闲话少说了,先看版本吧。 2.在看要导入的包吧: ... -
使用spring的hibernateTemplate的方法 (转)
2012-07-24 17:12 1548使用spr ... -
hibernate 增删改查
2012-07-24 00:07 1880mysql中库表News,字段如下 id | i ... -
hibernate的对象映射配置文件中属性的介绍和说明
2012-03-04 13:45 1704持久化对象之间一对一的关联关系是通过one-to-one 元 ... -
HIbernate主键生成策略详解 (转)
2012-03-04 13:39 1752HIberna ... -
hibernate 复习 单向一对一的实现
2012-03-03 15:38 1479hibernate中单向一对一实现有三种方式:主键关联, ... -
hibernate 复习--demo
2012-03-02 20:40 1565今天晚上,搞好了hibernate的demo了,明天开始就是搞 ... -
hibernage getcurrentsession
2011-12-28 18:56 1590org.hibernate.Hibe ... -
hibernate开发资料学习资料
2011-12-28 07:42 1553http://dev.21tx.com/java/struts ... -
hibernate one to many lazy 常见错误解决
2011-06-26 20:17 2619解释一个关于Hibernate l ... -
hibernate的增删改查
2011-06-25 22:03 1864package com.endual.test; impor ... -
frameset
2011-05-25 09:43 1096<a href=url target=_blank> ... -
Hibernate+Spring+Struts2+ExtJS开发CRUD功能
2011-05-17 08:56 4843http://blog.csdn.net/myloon/arc ... -
nginx就启动了
2011-05-13 21:09 1806今天下载了nginx 0.7.52,与以往不同的是,这次版本增 ...
相关推荐
1. **HibernateDaoSupport与JdbcDaoSupport**:Spring提供了这些支持类来简化DAO(数据访问对象)的实现,两者分别用于Hibernate和JDBC操作。它们提供了事务管理和数据源的便捷接入。 **三、Hibernate的查询方式** ...
1. **HibernateDaoSupport与JdbcDaoSupport**:`HibernateDaoSupport`是Spring提供的用于简化Hibernate使用的抽象支持类,它提供了`SessionFactory`等资源的注入,简化了Hibernate的使用过程。而`JdbcDaoSupport`则...
Spring对DAO的支持体现在提供了一系列的基类,如HibernateDaoSupport、JdbcDaoSupport、SqlMapClientDAOSupport和JpaDaoSupport等。这些基类为不同ORM框架的使用提供了便利。其中,JdbcDaoSupport是针对JDBC操作进行...
本文将深入探讨Spring对JDBCTemplate和HibernateTemplate的整合使用方法,以及JdbcDaoSupport和HibernateDaoSupport的支持。 **JdbcTemplate** JdbcTemplate是Spring提供的一个简单、灵活且强大的JDBC抽象层。它...
3. **自动注入与便利获取**:Spring同样提供了`HibernateDaoSupport`等支持类,这些类可以自动注入数据源和SessionFactory,并且提供了一个便捷的方法来获取`HibernateTemplate`对象。这使得开发过程更加高效。 ###...
8. **DAO(数据访问对象)支持**:Spring提供了一套通用的DAO接口和抽象类,如JdbcDaoSupport和HibernateDaoSupport,帮助开发者创建符合约定的DAO层,便于测试和扩展。 综上所述,Spring对JDBC和ORM的支持极大地...
在Java的Spring框架中,DAO(Data Access Object)数据访问对象是一种设计模式,用于封装数据库操作,使得业务逻辑层与数据存储层之间解耦。Spring框架提供了对DAO的支持,包括与JDBC、Hibernate、JDO和JPA等不同...
此外,Spring还为其他持久化技术如Hibernate提供了类似的模板类`HibernateTemplate`,以及对应的DAO支持类,如`JdbcDaoSupport`和`HibernateDaoSupport`,这些支持类负责初始化模板对象并提供数据资源。 在数据源...
对于Hibernate,Spring提供`HibernateTemplate`和`HibernateDaoSupport`,它们封装了Hibernate的操作,使得开发者可以专注于业务逻辑,而不是底层的SessionFactory和Session管理。例如,我们可以在DAO中注入`...
- 继承`HibernateDaoSupport`类:该类内部已经实现了`HibernateTemplate`的注入,可以通过`getHibernateTemplate()`方法直接获取。 ##### 3. SessionFactory `SessionFactory`是Hibernate的核心接口之一,用于...
JdbcDaoSupport JdbcOperations JdbcTemplate JdbcTransactionObjectSupport JdbcUpdateAffectedIncorrectNumberOfRowsException JdbcUtils JdkDynamicAopProxy JdkRegexpMethodPointcut JdkVersion ...