您的位置:首页 > 编程语言 > Java开发

使用Spring提供的三个JDBC模板类(JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate)操作数据库

2011-06-02 12:14 711 查看
一、JdbcTemplate是Spring中最基本的JDBC模板, 利用JDBC和简单的索引参数查询对数据库进行简单访问

@Resource
private JdbcTemplate jdbcTemplate;


Dao:

package com.s.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.s.entity.User;
//@Repository("userDao")
public class JdbcTemplateUserDao {
@Resource private JdbcTemplate jdbcTemplate;
public void add(User user){
String sql = "insert into user(name,password) values(?,?)";
jdbcTemplate.update(sql, user.getName(),user.getPassword());
}
/**
* 查询所有
* @return User集合
*/
public List<User> find(){
String sql = "select id,name,password from user";
return jdbcTemplate.query(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int arg1) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
return user;
}});
}
/**
* 按ID查询User表
* @param id
* @return user
*/
public User findById(String id){
String sql = "select id,name,password from user where id=?";
return jdbcTemplate.queryForObject(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int arg1) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
return user;
}}, id);
}
/**
* 更新数据的方法
* @param user
*/
public void update(User user){
String sql = "update user set name=?,password=? where id=?";
jdbcTemplate.update(sql, user.getName(),user.getPassword(),user.getId());
}
/**
* 删除数据的方法
* @param id
*/
public void delete(String id){
String sql = "delete from user where id=?";
jdbcTemplate.update(sql, id);
}
}



Test:

package com.s.test;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.s.dao.JdbcTemplateUserDao;
import com.s.entity.User;
public class JdbcTemplateUserDaoTest {
@Test
public void testAdd(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = new User();
user.setName("spring");
user.setPassword("spring");

JdbcTemplateUserDao dao = (JdbcTemplateUserDao) ac.getBean("userDao");
dao.add(user);
}
@Test
public void testFind(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplateUserDao dao = (JdbcTemplateUserDao) ac.getBean("userDao");
List<User> list = dao.find();
for(User user:list){
System.out.println(user.getId()+":"+user.getName()+":"+user.getPassword());
}

}
@Test
public void testFindById(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplateUserDao dao = (JdbcTemplateUserDao) ac.getBean("userDao");
User user = dao.findById("5");
System.out.println(user.getId()+":"+user.getName()+":"+user.getPassword());
}
@Test
public void testUpdate(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplateUserDao dao = (JdbcTemplateUserDao) ac.getBean("userDao");
User user = dao.findById("5");
user.setName("Spring3");
dao.update(user);
}
@Test
public void testDelete(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplateUserDao dao = (JdbcTemplateUserDao) ac.getBean("userDao");
dao.delete("6");
}
}


xml:

<!-- JDBC Template -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="datasource"></property>
</bean>


在Spring的配置文件中使用了数据源,请参考前一篇文章

Spring配置数据源(DBCP数据源、c3p0数据源)

二、

NamedParameterJdbcTemplate能够在查询的时候把值绑定到SQL里的命名参数,而不是索引参数

@Resource
private NamedParameterJdbcTemplate jdbcTemplate;


其具体Dao.java、Test.java,及applicationContext.xml的配置除了属性jdbcTemplate与JdbcTemplate不同外,其它的的配置基本相同,在此就不再赘述,请读者自行参考上面的代码

三、

SimpleJdbcTemplate利用Java5的特性,比如自动装箱、通用和可变参数列表来简化JDBC模板的使用

@Resource
private SimpleJdbcTemplate jdbcTemplate;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: