从来没使用过,感觉还是很有意思的,有工夫可以玩完,呵呵。
spring提供了类 org.springframework.jdbc.core.JdbcTemplate,它借助配置文件获取数据库信息,实现了对JDBC开发过程中的 加载驱动,创建连接,执行sql语句,对事务进行处理以及一些数据类型转化等操作的封装。只需要程序员对其传入sql语句和必要的参数即可轻松进行 JDBC编程。
Dao类:
public class StudentDaoJDBCImpl implements StudentDao {
private JdbcTemplate template;
//template的setter.getter方法
@Override
public void delete(Student s) {
deleteById(s.getId());
}
@Override
public void deleteById(Integer id) {
String sql = "delete from spring_student where id=?";
Object[] args = { id };// 数组元素依次对应sql语句中的?
template.update(sql, args);// 只需传sql语句和参数数组,template会自动加载驱动,创建连结,执行sql语句,并且进行事务处理
}
@Override
public void insert(Student s) {
String sql = "insert into spring_student(id,name,birthday) values(spring_stu_seq.nextval,?,?)";
Object[] args = { s.getName(), s.getBirthday() };//template会对Date类型数据进行转化
template.update(sql, args);
}
@Override
public Student queryById(Integer id) {
String sql = "select id,name,birthday from spring_student where id=?";
Object[] args = { id };
final Student s = new Student();
template.query(sql, args, new RowCallbackHandler() {
//它要求程序员自己在RowCallbackHandler类型对象的processRow方法中对结果集进行处理
@Override
public void processRow(ResultSet rs) throws SQLException {
if (!(rs.isAfterLast())) {// 把查询结果封装到一个对象中
s.setId(rs.getInt(1));
s.setName(rs.getString(2));
s.setBirthday(rs.getDate(3));
}
}
});
if (s.getId() == null) {
return null;
} else {
return s;
}
}
@Override
public List<Student> queryAll() {
String sql="select id,name,birthday from spring_student";
List<Student> ret=template.query(sql, new RowMapper(){
//它要求程序员自己在RowMapper类型对象的mapRow方法中说明结果集中每条记录如何封装成一个对象,
//template.query方法会自动把对象加入到集合中。
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
//rs:结果集
//rowNum:迭代次数
Student s=new Student();
s.setId(rs.getInt(1));
s.setName(rs.getString(2));
s.setBirthday(rs.getDate(3));
return s;
}
});
return ret;
}
}
private JdbcTemplate template;
//template的setter.getter方法
@Override
public void delete(Student s) {
deleteById(s.getId());
}
@Override
public void deleteById(Integer id) {
String sql = "delete from spring_student where id=?";
Object[] args = { id };// 数组元素依次对应sql语句中的?
template.update(sql, args);// 只需传sql语句和参数数组,template会自动加载驱动,创建连结,执行sql语句,并且进行事务处理
}
@Override
public void insert(Student s) {
String sql = "insert into spring_student(id,name,birthday) values(spring_stu_seq.nextval,?,?)";
Object[] args = { s.getName(), s.getBirthday() };//template会对Date类型数据进行转化
template.update(sql, args);
}
@Override
public Student queryById(Integer id) {
String sql = "select id,name,birthday from spring_student where id=?";
Object[] args = { id };
final Student s = new Student();
template.query(sql, args, new RowCallbackHandler() {
//它要求程序员自己在RowCallbackHandler类型对象的processRow方法中对结果集进行处理
@Override
public void processRow(ResultSet rs) throws SQLException {
if (!(rs.isAfterLast())) {// 把查询结果封装到一个对象中
s.setId(rs.getInt(1));
s.setName(rs.getString(2));
s.setBirthday(rs.getDate(3));
}
}
});
if (s.getId() == null) {
return null;
} else {
return s;
}
}
@Override
public List<Student> queryAll() {
String sql="select id,name,birthday from spring_student";
List<Student> ret=template.query(sql, new RowMapper(){
//它要求程序员自己在RowMapper类型对象的mapRow方法中说明结果集中每条记录如何封装成一个对象,
//template.query方法会自动把对象加入到集合中。
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
//rs:结果集
//rowNum:迭代次数
Student s=new Student();
s.setId(rs.getInt(1));
s.setName(rs.getString(2));
s.setBirthday(rs.getDate(3));
return s;
}
});
return ret;
}
}
配置:
<beans>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@localhost:1521:orcl10</value>
</property>
<property name="username">
<value>scott</value>
</property>
<property name="password">
<value>yf123</value>
</property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="dao" class="com.yangfei.spring.jdbc.dao.StudentDaoJDBCImpl">
<property name="template">
<ref local="jdbcTemplate"/>
</property>
</bean>
</beans>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@localhost:1521:orcl10</value>
</property>
<property name="username">
<value>scott</value>
</property>
<property name="password">
<value>yf123</value>
</property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="dao" class="com.yangfei.spring.jdbc.dao.StudentDaoJDBCImpl">
<property name="template">
<ref local="jdbcTemplate"/>
</property>
</bean>
</beans>
测试:
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("jdbc.xml");
StudentDao dao=(StudentDao)ctx.getBean("dao");
System.out.println(dao.queryById(2));
//dao.deleteById(1);
Student s=new Student();
s.setName("xiaozhang");
s.setBirthday(new Date());
dao.insert(s);
ApplicationContext ctx=new ClassPathXmlApplicationContext("jdbc.xml");
StudentDao dao=(StudentDao)ctx.getBean("dao");
System.out.println(dao.queryById(2));
//dao.deleteById(1);
Student s=new Student();
s.setName("xiaozhang");
s.setBirthday(new Date());
dao.insert(s);
本文出自 “夜狼” 博客,请务必保留此出处http://yangfei520.blog.51cto.com/1041581/246476
相关推荐
本文将深入探讨Spring对JDBC(Java Database Connectivity)的支持,以及如何在实际项目中使用这些功能。 首先,Spring JDBC的核心是`org.springframework.jdbc`包,它提供了一套高级抽象,用于简化数据库操作。在...
3. **ORM支持**: 尽管不如JPA(Java Persistence API)强大,但Spring Data JDBC仍然提供了对象关系映射的能力,将Java对象与数据库表关联。 4. **简化事务管理**: Spring的事务管理器使得事务控制变得简单,无需...
"spring-jdbc jar包"包含了Spring框架中与JDBC相关的所有类和接口,为开发者提供了强大的数据访问支持。 首先,我们来看看Spring JDBC的核心组件: 1. **JdbcTemplate**:这是Spring JDBC的核心类,它通过模板方法...
此外,Spring JDBC也支持存储过程的调用,以及批量更新操作。在处理大量数据时,还可以通过分页查询来优化性能。在分布式环境下,Spring JDBC配合Spring的事务管理功能,可以实现跨数据库操作的事务一致性。 这个...
Spring框架是Java开发中最常用的框架之一,其对JDBC(Java Database Connectivity)的支持极大地简化了数据库操作,使得...无论是简单的CRUD操作,还是复杂的业务逻辑,Spring的JDBC支持都能提供强大而稳定的后盾。
Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于使用的编程模型来简化数据库访问。在这个“spring_jdbc_4.0.0.zip”压缩包中,包含的是Spring JDBC 4.0.0版本的jar文件,即...
Spring JDBC模块是Spring框架对Java数据库连接(JDBC)的一层抽象,它简化了数据库操作,通过提供模板类和 dao 支持来减少样板代码。Spring JDBC 提供了 JdbcTemplate 和 NamedParameterJdbcTemplate,这两个工具类...
首先,Spring-JdbcTemplate是Spring对JDBC API的一种封装,它消除了大量繁琐的JDBC代码,如打开和关闭连接、处理结果集等,让开发者可以专注于SQL语句和业务逻辑。它的核心类是JdbcTemplate,提供了各种执行SQL的...
在Java开发中,Spring框架以其强大的功能和易用性深受开发者喜爱,其中Spring JDBC模块提供了对数据库操作的支持。Spring JDBC DAO(Data Access Object)模式是Spring提供的一种数据库访问机制,旨在简化传统的JDBC...
当我们谈论"Spring+JDBC实例"时,通常是指在Spring框架中使用JDBC进行数据访问的方式,这种方式可以利用Spring提供的便利性,同时保留对数据库的直接控制。 在Spring框架中,JDBC操作被封装在`org.springframework....
2. **Transaction Management**: Spring-JDBC支持声明式事务管理,允许开发者使用注解(如@Transactional)来控制事务的边界,无需手动调用commit()和rollback()。这提高了代码的可读性和可维护性。 3. **...
《Spring JDBC:Spring框架对JDBC的封装与实践》 Spring框架是Java开发中的一个核心组件,它极大地简化了企业级应用的开发工作。在Spring框架中,Spring JDBC(Java Database Connectivity)模块扮演着重要的角色,...
Spring 框架是 Java 开发中的一个核心组件,它为开发者提供了丰富的功能,包括对 JDBC(Java Database Connectivity)的支持。在 Spring 中,对 JDBC 的处理被设计得更加优雅和易于管理,通过引入数据访问对象(DAO...
Spring对Java数据库连接(JDBC)的支持是通过其Spring JDBC模块来实现的,该模块提供了一组JDBC相关的抽象以及数据访问模板,使得开发者可以更加便捷地使用JDBC进行数据库操作。 JdbcTemplate是Spring JDBC模块中...
6. **批处理**:Spring JDBC支持批处理操作,可以一次执行多个SQL语句,提高性能。通过`BatchPreparedStatementSetter`接口,我们可以设置批量操作的参数。 7. **DataSourceUtils**:Spring提供的工具类,用于获取...
Spring 框架是 Java 开发中的一个核心组件,它为构建可维护、松耦合的应用程序提供了强大的支持。在企业级开发中,Spring 的 JDBC 集成扮演着重要角色,因为它简化了数据库操作,使得开发者能够更专注于业务逻辑而...
SpringJDBC则是Spring对Java数据库连接(JDBC)的一层封装,它简化了数据库操作,降低了出错的可能性。SpringJDBC通过JdbcTemplate或NamedParameterJdbcTemplate提供了一套模板方法,使得SQL查询和参数绑定更加直观...
在事务和JDBC操作的配合下,Spring JDBC支持多种数据库供应商,如MySQL、Oracle、PostgreSQL等,这得益于其良好的数据库供应商无关性。通过`DataSource`的配置,开发者可以轻松切换不同的数据库,而无需修改大部分...
Spring 4的JDBC支持让数据库操作变得简单且易于维护。通过`JdbcTemplate`,我们能优雅地执行SQL查询和更新,同时,结合Spring的事务管理和异常处理机制,确保了应用程序的健壮性。了解并熟练掌握这些知识点,将有助...