`
xiaoliang330
  • 浏览: 114514 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

spring 对jdbc的支持

阅读更多
我写了个小测试,熟悉一下spring对JDBC的支持与配置过程

实体类:
public class User {
	private int id;
	private String name;

//setter & getter
}


DAO层:
package com.xll.jdbc.dao;

import java.util.List;

import com.xll.jdbc.bean.User;

public interface UserDao {
	void save(User user);
	void delete(User user);
	User get(int id);
	List<User> getUsers();
}



DAO的实现类:
package com.xll.jdbc.daoImpl;

import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.transaction.annotation.Transactional;

import com.xll.jdbc.bean.User;
import com.xll.jdbc.dao.UserDao;

@Transactional
public class UserDaoImpl implements UserDao{
	private JdbcTemplate jdbcTemplate;
	
	public void setDatasouce(DataSource datasource) {
		jdbcTemplate = new JdbcTemplate( datasource);
	}
	public void delete(User user) {
		this.jdbcTemplate.update("delete from user where id=?", new Object[]{user.getId()});
		System.out.println("删除成功!");
	}
	public User get(int id) {
		User user = (User)this.jdbcTemplate.queryForObject("select * from user where id=?", new Object[]{id},
				new UserMapper());
		return user;
	}
	@SuppressWarnings("unchecked")
	public List<User> getUsers() {
		return this.jdbcTemplate.query("select * from user", new UserMapper());
	}

	public void save(User user) {
		this.jdbcTemplate.update("insert into user(id,name) values(?,?)",
				new Object[]{user.getId(),user.getName()});
		System.out.println("保存成功!");
	}
	private static final class UserMapper implements RowMapper {
	   
		public Object mapRow(java.sql.ResultSet rs, int rowNum)
				throws SQLException {
			  User user = new User();
		      user.setId(rs.getInt("id"));
		      user.setName(rs.getString("name"));
		        return user;
		}
	}
}	




在spring的主配置文件中配置:
<?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: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.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
		
		
		
	<bean id="Datasource"
		class="org.apache.commons.dbcp.BasicDataSource">
			<property name="driverClassName" value="com.mysql.jdbc.Driver" />
			<property name="url" value="jdbc:mysql://localhost:3306/mydb" />
			<property name="username" value="root" />
			<property name="password" value="123" />
			<property name="initialSize" value="2" />
			<property name="maxActive" value="100" />
			<property name="maxIdle" value="2" />
			<property name="minIdle" value="1" />
	</bean>
		<bean id="txManager"	class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
			<property name="dataSource" ref="Datasource" />
		</bean>
		
	<tx:annotation-driven transaction-manager="txManager" />
		
	<bean id="userDaoImp" class="com.xll.jdbc.daoImpl.UserDaoImpl">
	<property name="datasouce" ref="Datasource" />
	</bean>
</beans>		


其中我配置了事务管理,这里我的DAO的实现类中用datasource初始化了jdbcTemplate,在配置文件中,向userDaoImpl中注入了datasource。当然你也可以直接extends
JdbcDaoSupport




我的测试类如下:

public void testGetAll(){
		ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");
		UserDao ud = (UserDao)ctx.getBean("userDaoImp");
		List list = ud.getUsers();
		
		Iterator iter = list.iterator();
		while(iter.hasNext()){
			User user = (User)iter.next();
			System.out.println(user);
		}
	}
	


结果为:
name=xiaoliang,id=7
name=xiao,id=9



这里有个小细节,就是默认情况下用的是spring的代理,也就是这句
UserDao ud = (UserDao)ctx.getBean("userDaoImp");  
你得写成接口来接收,不然报错,当然你可以在配置文件中加入这句
<aop:config proxy-target-class="true"></aop:config>



这时候使用的是cglib的代理来实现的,所以这时候你的测试类中可以写成这样:
UserDaoImpl ud = (UserDaoImpl)ctx.getBean("userDaoImp");





上面已经配置了事务,并开启了注解的功能,<tx:annotation-driven transaction-manager="txManager" />,

这时,我在DAO实现类的save()中作如下改动:
public void save(User user) {
		this.jdbcTemplate.update("insert into user(id,name) values(?,?)",
				new Object[]{user.getId(),user.getName()});
		int i = 10/0;
		System.out.println("保存成功!");
	}



这时候运行我的测试类,数据将不会插入成功,而去掉实现类上面的事务注解@Transactional,再运行测试类,这是虽然也抛异常,但数据已经插入到数据库了,可以看到事务的功能。
分享到:
评论

相关推荐

    spring对jdbc的支持jar包

    本文将深入探讨Spring对JDBC(Java Database Connectivity)的支持,以及如何在实际项目中使用这些功能。 首先,Spring JDBC的核心是`org.springframework.jdbc`包,它提供了一套高级抽象,用于简化数据库操作。在...

    Spring Data JDBC与JDBC的区别

    3. **ORM支持**: 尽管不如JPA(Java Persistence API)强大,但Spring Data JDBC仍然提供了对象关系映射的能力,将Java对象与数据库表关联。 4. **简化事务管理**: Spring的事务管理器使得事务控制变得简单,无需...

    spring-jdbc jar包.rar

    "spring-jdbc jar包"包含了Spring框架中与JDBC相关的所有类和接口,为开发者提供了强大的数据访问支持。 首先,我们来看看Spring JDBC的核心组件: 1. **JdbcTemplate**:这是Spring JDBC的核心类,它通过模板方法...

    spring_JDBC整合包

    此外,Spring JDBC也支持存储过程的调用,以及批量更新操作。在处理大量数据时,还可以通过分页查询来优化性能。在分布式环境下,Spring JDBC配合Spring的事务管理功能,可以实现跨数据库操作的事务一致性。 这个...

    Spring对JDBC的支持jar包.rar

    Spring框架是Java开发中最常用的框架之一,其对JDBC(Java Database Connectivity)的支持极大地简化了数据库操作,使得...无论是简单的CRUD操作,还是复杂的业务逻辑,Spring的JDBC支持都能提供强大而稳定的后盾。

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于使用的编程模型来简化数据库访问。在这个“spring_jdbc_4.0.0.zip”压缩包中,包含的是Spring JDBC 4.0.0版本的jar文件,即...

    Spring-JDBC整合-MySQL8、java8版本

    Spring JDBC模块是Spring框架对Java数据库连接(JDBC)的一层抽象,它简化了数据库操作,通过提供模板类和 dao 支持来减少样板代码。Spring JDBC 提供了 JdbcTemplate 和 NamedParameterJdbcTemplate,这两个工具类...

    Spring对JDBC的支持

    本篇文章将详细探讨Spring对JDBC的支持,包括如何使用JdbcTemplate进行数据库的更新和查询,以及如何实现具名参数的JDBC操作。 1. **JdbcTemplate简介** JdbcTemplate是Spring框架的一部分,它通过提供一套模板...

    spring-jdbc源码

    首先,Spring-JdbcTemplate是Spring对JDBC API的一种封装,它消除了大量繁琐的JDBC代码,如打开和关闭连接、处理结果集等,让开发者可以专注于SQL语句和业务逻辑。它的核心类是JdbcTemplate,提供了各种执行SQL的...

    spring-jdbc-dao

    在Java开发中,Spring框架以其强大的功能和易用性深受开发者喜爱,其中Spring JDBC模块提供了对数据库操作的支持。Spring JDBC DAO(Data Access Object)模式是Spring提供的一种数据库访问机制,旨在简化传统的JDBC...

    Spring+JDBC实例

    当我们谈论"Spring+JDBC实例"时,通常是指在Spring框架中使用JDBC进行数据访问的方式,这种方式可以利用Spring提供的便利性,同时保留对数据库的直接控制。 在Spring框架中,JDBC操作被封装在`org.springframework....

    Spring-JDBC,带一小例子

    2. **Transaction Management**: Spring-JDBC支持声明式事务管理,允许开发者使用注解(如@Transactional)来控制事务的边界,无需手动调用commit()和rollback()。这提高了代码的可读性和可维护性。 3. **...

    spring jdbc.zip

    《Spring JDBC:Spring框架对JDBC的封装与实践》 Spring框架是Java开发中的一个核心组件,它极大地简化了企业级应用的开发工作。在Spring框架中,Spring JDBC(Java Database Connectivity)模块扮演着重要的角色,...

    开源框架spring详解-----spring对JDBC的支持

    Spring 框架是 Java 开发中的一个核心组件,它为开发者提供了丰富的功能,包括对 JDBC(Java Database Connectivity)的支持。在 Spring 中,对 JDBC 的处理被设计得更加优雅和易于管理,通过引入数据访问对象(DAO...

    hualinux spring 3.16:Spring对JDBC的支持.pdf

    Spring对Java数据库连接(JDBC)的支持是通过其Spring JDBC模块来实现的,该模块提供了一组JDBC相关的抽象以及数据访问模板,使得开发者可以更加便捷地使用JDBC进行数据库操作。 JdbcTemplate是Spring JDBC模块中...

    spring封装jdbc查询

    6. **批处理**:Spring JDBC支持批处理操作,可以一次执行多个SQL语句,提高性能。通过`BatchPreparedStatementSetter`接口,我们可以设置批量操作的参数。 7. **DataSourceUtils**:Spring提供的工具类,用于获取...

    spring与JDBC集成Demo

    Spring 框架是 Java 开发中的一个核心组件,它为构建可维护、松耦合的应用程序提供了强大的支持。在企业级开发中,Spring 的 JDBC 集成扮演着重要角色,因为它简化了数据库操作,使得开发者能够更专注于业务逻辑而...

    java开发之SpringMVC + Spring + SpringJDBC整合.zip

    SpringJDBC则是Spring对Java数据库连接(JDBC)的一层封装,它简化了数据库操作,降低了出错的可能性。SpringJDBC通过JdbcTemplate或NamedParameterJdbcTemplate提供了一套模板方法,使得SQL查询和参数绑定更加直观...

    Spring Jdbc的jar包

    在事务和JDBC操作的配合下,Spring JDBC支持多种数据库供应商,如MySQL、Oracle、PostgreSQL等,这得益于其良好的数据库供应商无关性。通过`DataSource`的配置,开发者可以轻松切换不同的数据库,而无需修改大部分...

    spring4 jdbc star t

    Spring 4的JDBC支持让数据库操作变得简单且易于维护。通过`JdbcTemplate`,我们能优雅地执行SQL查询和更新,同时,结合Spring的事务管理和异常处理机制,确保了应用程序的健壮性。了解并熟练掌握这些知识点,将有助...

Global site tag (gtag.js) - Google Analytics