一个使用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 张 七
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值