怎么样使用JdbcTemplate连接数据库?
怎么样使用JdbcTemplate连接数据库?
老张说:什么叫框架? 原本自己要写的程序现在用框架写变成写 XML配置文件了.
下面就示例一个程序,用xml配制文件和JdbcTemplate来连接一个数据库(mysql)实现下面三个功能:
1:Spring中用JdbcTemplate的update插入一条数据
2:Spring中用JdbcTemplate的batchUpdate插入一组数据
3:Spring中用JdbcTemplate的RowMapper查询数据
1:首先写一个Student类
package cn.itcast;
public class Student {
private int id;
private String name;
private String sex;
private int salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
2:写一个设置属性的类并继承BatchPreparedStatementSetter这个接口,并实现它的setValues方法
package cn.itcast;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
public class InsertPersonStatementCreator implements
BatchPreparedStatementSetter {
List list;
public void setValues(PreparedStatement arg0, int arg1) throws SQLException {
Student stu = (Student) list.get(arg1);
arg0.setString(1, stu.getName());
arg0.setString(2, stu.getSex());
arg0.setInt(3, stu.getSalary());
}
public int getBatchSize() {
return list.size();
}
public void setList(List list) {
this.list = list;
}
}
3:在写一个客户端调用程序
由于时间的因素,没有把三个实现功能分开写,读者自己实验时可以分开写.
package cn.itcast;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;
public class JdbcTempleDemo {
private final static String sql = "insert into student (name,sex,salary)values(?,?,?)";
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
JdbcTemplate jt = (JdbcTemplate) context.getBean("jt");
InsertPersonStatementCreator ipstc = (InsertPersonStatementCreator) context
.getBean("config");
// 1:Spring中用JdbcTemplate的update插入一条数据
// jt.update("insert into student
// (name,sex,salary)values('bcd','m',1500) ");
// 2:Spring中用JdbcTemplate的batchUpdate插入一组数据
//jt.batchUpdate(sql, ipstc);
//System.out.println("插入成功!...");
//3:Spring中用RowMapper查询数据
final String sql2 = "select * from Student";
RowMapper rowMapper = new RowMapper() {
public Object mapRow(ResultSet rs, int index) throws SQLException {
Student student = new Student();
student.setId(rs.getInt(1));
student.setName(rs.getString(2));
student.setSex(rs.getString(3));
student.setSalary(rs.getInt(4));
return student;
}
};
PreparedStatementCreator psc = new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection arg0)
throws SQLException {
return arg0.prepareStatement(sql2);
}
};
List list = jt.query(psc, rowMapper);
for (Object obj : list) {
Student stu = (Student) obj;
System.out.println(stu.getId() + "/t" + stu.getName() + "/t"
+ stu.getSex() + "/t" + stu.getSalary());
}
}
}
4:最后写个配置文件就可以了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql:///itcast</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="ds" />
</property>
</bean>
<bean id="config" class="cn.itcast.InsertPersonStatementCreator">
<property name="list">
<list>
<ref bean="stu1" />
<ref bean="stu2" />
<ref bean="stu3" />
</list>
</property>
</bean>
<bean id="stu1" class="cn.itcast.Student">
<property name="name"><value>ccc</value></property>
<property name="sex"><value>m</value></property>
<property name="salary"><value>3000</value></property>
</bean>
<bean id="stu2" class="cn.itcast.Student">
<property name="name"><value>ddd</value></property>
<property name="sex"><value>f</value></property>
<property name="salary"><value>5000</value></property>
</bean>
<bean id="stu3" class="cn.itcast.Student">
<property name="name"><value>eee</value></property>
<property name="sex"><value>m</value></property>
<property name="salary"><value>1000</value></property>
</bean>
</beans>
以上程序我都实验过,可以顺利跑通,如果读者实验时,遇到什么问题,可以给我留言.