`
senton
  • 浏览: 205698 次
  • 性别: Icon_minigender_1
  • 来自: 紫禁城
社区版块
存档分类
最新评论

一个使用JdbcTemplate增加一组数据的完整例子

阅读更多

一个使用JdbcTemplate增加一组数据的完整的例子,简单的代码不再解释:

1) 首先来创建一个数据库和表,这里用的是Sql server数据库:
create database Human
go

create table Person
(
 id int primary key,
 firstName varchar(20),
 lastName varchar(20)
)
go

2) 创建一个Person类:
package cn.itcast;

public class Person {
 private int id;

 private String firstName;

 private String lastName;

 public String getFirstName() {
  return firstName;
 }

 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getLastName() {
  return lastName;
 }

 public void setLastName(String lastName) {
  this.lastName = lastName;
 }
}

3) 创建一个 MyBatchPreparedStatementSetter 类。此类实现 BatchPreparedStatementSetter 接口。
package cn.itcast;

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

import org.springframework.jdbc.core.BatchPreparedStatementSetter;

public class MyBatchPreparedStatementSetter implements
  BatchPreparedStatementSetter {

//这里用于测试的是一组Person对象。
 List<Person> persons;

 public void setPersons(List<Person> persons) {
  this.persons = persons;
 }

//重写 BatchPreparedStatementSetter 的 setValues() 和 getBatchSize() 方法。
//setValues() 方法用于设置 sql 语句里面的参数
 public void setValues(PreparedStatement ps, int index) throws SQLException {
  Person person = persons.get(index);
  ps.setInt(1, person.getId());
  ps.setString(2, person.getFirstName());
  ps.setString(3, person.getLastName());
 }
//getBatchSize()返回这一组数据的大小。
 public int getBatchSize() {
  return persons.size();
 }

}

4) 创建一个 MyJdbcTemplate 类:
package cn.itcast;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class MyJdbcTemplate {

//定义一个 JdbcTemplate 对象,用于调用 batchUpdate()方法。
 private JdbcTemplate jdbcTemplate;

 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  this.jdbcTemplate = jdbcTemplate;
 }

 public int[] updatePersons() {
//从xml配置文件中读取出注册好的 MyBatchPreparedStatementSetter 对象
  ApplicationContext context = new ClassPathXmlApplicationContext(
    "applicationContext.xml");
  String sql = "insert into Person values (?,?,?)";
  MyBatchPreparedStatementSetter setter = (MyBatchPreparedStatementSetter)

context
    .getBean("myBatchPreparedStatementSetter");
  return jdbcTemplate.batchUpdate(sql, setter);
 }
}

5) 一个客户端的类:
package cn.itcast;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Client {

 private static Log log = LogFactory.getLog(Client.class);

 public static void main(String[] args) {
  ApplicationContext context = null;
//从xml文件中读取出已经注册好的MyJdbcTemplate对象:
  context = new ClassPathXmlApplicationContext("/applicationContext.xml");
  MyJdbcTemplate myJdbcTemplate = (MyJdbcTemplate) context
    .getBean("myJdbcTemplate");
//调用MyJdbcTemplate的updatePersons()方法。此方法返回一个整型数组,数组里的每一个数如果是 1

就说明sql语句执行成功。
  int[] arr = myJdbcTemplate.updatePersons();
  for (int n : arr) {
   if (n == 1) {
    log.info("增加成功");
   }
  }
 }
}

6) 数据库连接配置信息的属性文件 jdbc.properties:
url=jdbc:sqlserver://127.0.0.1:1433;database=Study
driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
username=sa
password=

7) XML 文件 applicationContext.xml:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring

-beans.dtd">

<beans>

//注册一个PropertyPlaceholderConfigurer,此Bean的location属性告诉Spring去哪找配置信息。
 <bean id="propertyConfigurer"

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location">
   <value>jdbc.properties</value>
  </property>
 </bean>

//注册一个DataSource,此例用的是Spring自带的DriverManagerDataSource
 <bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName">
   <value>${driverClassName}</value>
  </property>
  <property name="url">
   <value>${url}</value>
  </property>
  <property name="username">
   <value>${username}</value>
  </property>
  <property name="password">
   <value>${password}</value>
  </property>
 </bean>

//注册一个JdbcTemplate,此Bean的dataSource属性引用上面的dataSource
 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
 </bean>

//注册一个我们自定义的MyJdbcTemplate,此Bean的jdbcTemplate属性引用上面的jdbcTemplate
 <bean id="myJdbcTemplate" class="cn.itcast.MyJdbcTemplate">
  <property name="jdbcTemplate">
   <ref bean="jdbcTemplate" />
  </property>
 </bean>

//注册5个Person对象
 <bean id="person1" class="cn.itcast.Person">
  <property name="id">
   <value>1</value>
  </property>
  <property name="firstName">
   <value>田</value>
  </property>
  <property name="lastName">
   <value>三</value>
  </property>
 </bean>
 <bean id="person2" class="cn.itcast.Person">
  <property name="id">
   <value>2</value>
  </property>
  <property name="firstName">
   <value>常</value>
  </property>
  <property name="lastName">
   <value>四</value>
  </property>
 </bean>
 <bean id="person3" class="cn.itcast.Person">
  <property name="id">
   <value>3</value>
  </property>
  <property name="firstName">
   <value>金</value>
  </property>
  <property name="lastName">
   <value>五</value>
  </property>
 </bean>
 <bean id="person4" class="cn.itcast.Person">
  <property name="id">
   <value>4</value>
  </property>
  <property name="firstName">
   <value>徐</value>
  </property>
  <property name="lastName">
   <value>六</value>
  </property>
 </bean>
 <bean id="person5" class="cn.itcast.Person">
  <property name="id">
   <value>5</value>
  </property>
  <property name="firstName">
   <value>张</value>
  </property>
  <property name="lastName">
   <value>七</value>
  </property>
 </bean>

//注册一个MyBatchPreparedStatementSetter,设置它的persons属性,此属性是一个包含Person的List


//这里的就引用上面注册好的5个Person对象
 <bean id="myBatchPreparedStatementSetter"

class="cn.itcast.MyBatchPreparedStatementSetter">
  <property name="persons">
   <list>
    <ref bean="person1" />
    <ref bean="person2" />
    <ref bean="person3" />
    <ref bean="person4" />
    <ref bean="person5" />
   </list>
  </property>
 </bean>

</beans>

8) Log4j配置文件log4j.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="false" xmlns:log4j="http://jakarta.apache.org/log4j/">
 <appender name="systemout" class="org.apache.log4j.ConsoleAppender">
  <layout class="org.apache.log4j.SimpleLayout" />
 </appender>
 <root>
  <level value="info" />
  <appender-ref ref="systemout" />
 </root>
</log4j:configuration>

9)运行:
INFO - 增加成功
INFO - 增加成功
INFO - 增加成功
INFO - 增加成功
INFO - 增加成功

我们看到输出了5条增加成功的信息,
再来看看数据库中Person表:
select * from Person
1 田 三
2 常 四
3 金 五
4 徐 六
5 张 七
 

分享到:
评论

相关推荐

    Spring JdbcTemplate例子

    使用Spring JdbcTemplate的第一步是创建一个JdbcTemplate实例。这通常通过Spring的IoC容器(依赖注入)完成,将DataSource配置到JdbcTemplate中。例如: ```java @Autowired private DataSource dataSource; @Bean...

    打印JdbcTemplate执行sql

    当在一个事务中执行多条SQL语句时,如果其中一个失败,所有操作都将回滚,确保数据的一致性。你可以通过`JdbcTemplate`的`execute`方法执行一组SQL操作,并在需要时捕获并处理异常。 5. **性能优化**:通过日志,...

    Spring JdbcTemplate.batchUpdate 例子

    `JdbcTemplate`的`batchUpdate`方法返回一个整数数组,其中每个元素表示相应批处理语句影响的行数。如果数据库不支持获取每条语句的更新计数,数组可能会包含null值。 批处理可以显著提高性能,特别是在需要插入...

    struts+spring +jdbctemplate demo

    这个Demo为学习和理解Struts、Spring和JdbcTemplate的集成提供了一个实际的例子,帮助开发者更好地掌握Java Web开发中的这些核心工具。通过实践,我们可以了解到如何在实际项目中有效地组合这些技术,提高代码的可...

    SpringMVC整合jdbcTemplate实例

    在本文中,我们将深入探讨如何将SpringMVC与jdbcTemplate集成,同时利用Druid作为连接池,实现一个基于REST风格的简单CRUD应用。我们将主要关注以下知识点: 1. **SpringMVC框架**:SpringMVC是Spring框架的一个...

    spring 的简单例子工程适合初学者

    这个"spring 的简单例子工程"为初学者提供了一个全面的起点,涵盖了 Spring 框架中与数据库交互的基础知识,包括 JdbcTemplate 的使用、DataSource 配置,以及 Spring MVC 和注解驱动开发的基本概念。通过这个项目,...

    Spring 中jdbcTemplate 实现执行多条sql语句示例

    在这个例子中,`@Transactional`注解告诉Spring为`grantPermissions`方法开启一个事务,所有在该方法内部的数据库操作都将在同一个事务中进行,从而确保了数据完整性。 总结来说,Spring的JdbcTemplate提供了一种...

    J2EE 0.2—加入dao\\dataSource\\jdbcTemplate等联系方法

    以下是一个简单的`jdbcTemplate`使用示例: ```java @Autowired private DataSource dataSource; @Bean public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(dataSource); } public List&lt;User&gt; ...

    用java中的ssh三大框架做的一个入门的例子

    这个例子旨在为初学者提供一个基于SSH的简单应用示例,帮助他们理解和掌握这三个框架的集成与使用。 Struts是MVC(Model-View-Controller)设计模式的一个实现,主要用于处理Web层的业务逻辑。它提供了一个灵活的...

    hibernate和spring的几个小例子

    Spring还包含了诸如数据访问、Web服务、安全控制等多个模块,形成了一个完整的应用开发生态。在Spring中,我们可以通过配置XML或者使用Java配置来实现DI,让Spring容器管理对象的生命周期和依赖关系。 结合...

    struts2+spring2.5+hibernate3.3例子(增删改)

    这个例子展示了如何将这三个框架整合在一起,实现一个简单的图书管理系统的增删改操作。 **Struts2** 是一个基于MVC设计模式的Web应用框架,它提供了一种组织应用程序的方式,使得业务逻辑与展示层分离。Struts2的...

    ssh框架集成例子

    这个例子是一个实际的集成项目,旨在帮助初学者快速理解和应用SSH框架。 Struts2是MVC(模型-视图-控制器)设计模式的一个实现,主要负责处理HTTP请求,控制应用流程,以及与视图层进行交互。它通过Action类来接收...

    Spring中文帮助文档

    使用@ModelAttribute提供一个从模型到数据的链接 13.12.6. 使用@SessionAttributes指定存储在会话中的属性 13.12.7. 自定义WebDataBinder初始化 13.13. 更多资源 14. 集成视图技术 14.1. 简介 14.2. JSP和...

    druid的用法实例

    下面是一个简单的Spring Boot项目中使用Druid的例子: ```java @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DruidDataSource druid...

    spring+hibernate+spring小例子

    这个小例子可能是为了帮助初学者理解这三个技术如何协同工作来构建一个完整的Web应用程序。 1. **Spring框架**:Spring是Java领域最广泛使用的轻量级应用框架,提供了依赖注入(Dependency Injection, DI)和面向切...

    SSH简单例子

    SSH是Java开发中的一种经典框架组合,分别代表Struts2、Spring和...这个"SSH简单例子"提供了一个完整的示例,帮助开发者理解SSH框架的集成过程和分页功能的实现,对于学习和实战Java Web开发具有很高的参考价值。

    ssh2+ext demo例子

    这个"ssh2+ext demo例子"显然提供了一个实际的示例,演示了如何将Struts2、Spring、Hibernate以及EXT.js这四个关键组件集成到一个项目中。下面将详细解释这些技术以及它们在项目中的作用。 首先,Struts2是基于MVC...

    存储过程.docx

    在IT行业中,存储过程是数据库管理中的一个重要组成部分,它是一组预先编译的SQL语句集合,可以被多次调用,以提高数据库操作的效率。在Java开发中,经常需要与数据库进行交互,包括调用存储过程。本文将详细阐述...

    Spring-JDBC,带一小例子

    在博文链接中,作者可能分享了一个使用Spring-JDBC的实际示例,虽然具体内容未给出,但我们可以探讨Spring-JDBC的一些关键特性: 1. **JdbcTemplate**: 这是Spring-JDBC的主要组件,它通过提供一组模板方法来执行...

    Spring2.5学习文档3.pdf

    在这个例子中,我们展示了如何使用`execute()`方法添加一个新的用户。通过传递一个匿名内部类实现`ConnectionCallback`接口,我们可以在回调方法`doInConnection()`中编写SQL语句和预编译参数。这样,JdbcTemplate会...

Global site tag (gtag.js) - Google Analytics