`
周一Monday
  • 浏览: 345985 次
  • 来自: 北京
社区版块
存档分类
最新评论

Spring之SimpleJdbcTemplate的使用

阅读更多

1.数据库脚本

create table user
(
	id		int	not null,
	name	varchar(20),
	primary key(id)
);

 

2.实体类

package org.monday.springjdbc;

public class User {

	private int id;
	private String name;

	public User() {
	}

	public User(int id, String name) {
		this.id = id;
		this.name = name;
	}

	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;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + "]";
	}

}

 

3.Dao接口

package org.monday.springjdbc;

import java.util.List;

public interface UserDao {

	public void insert(User user);

	public void update(User user);

	public void delete(User user);

	public void delete(int id);

	public User findById(int id);

	public int findByName(String name);

	public List<User> findAll();

	public int count();

	public void batchInsert(List<User> users);
}

 

4.Dao的实现类

package org.monday.springjdbc;

import java.util.ArrayList;
import java.util.List;

import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;

public class UserDaoImpl extends SimpleJdbcDaoSupport implements UserDao {

	@Override
	public void insert(User user) {
		String sql = "insert into user(id,name)values(?,?)";
		getSimpleJdbcTemplate().update(sql, user.getId(), user.getName());

	}

	@Override
	public void update(User user) {
		String sql = "update user set name=? where id=?";
		getSimpleJdbcTemplate().update(sql, user.getName(), user.getId());
	}

	@Override
	public void delete(User user) {
		String sql = "delete from user where id=?";
		getSimpleJdbcTemplate().update(sql, user.getId());
	}

	@Override
	public void delete(int id) {
		String sql = "delete from user where id=?";
		getSimpleJdbcTemplate().update(sql, id);

	}

	@Override
	public User findById(int id) {
		String sql = "select * from user where id=?";
		return getSimpleJdbcTemplate().queryForObject(sql,
				ParameterizedBeanPropertyRowMapper.newInstance(User.class), id);

		// 下面的方法只能返回一列,所以行不通
		// return getSimpleJdbcTemplate().queryForObject(sql, User.class, id);

	}

	@Override
	public int findByName(String name){
		String sql = "select id from user where name=?";
		return getSimpleJdbcTemplate().queryForObject(sql, Integer.class, name);
		// Integer.class 改成int.class 不行
		// 貌似只能用包装类
		
	}

	@Override
	public List<User> findAll() {
		String sql = "select * from user";
		return getSimpleJdbcTemplate().query(sql,
				ParameterizedBeanPropertyRowMapper.newInstance(User.class));
	}

	@Override
	public int count() {
		String sql = "select count(*) from user";
		return getSimpleJdbcTemplate().queryForInt(sql);
	}

	@Override
	public void batchInsert(List<User> users) {
		String sql = "insert into user(id,name)values(?,?)";
		List<Object[]> parameters = new ArrayList<Object[]>();
		for (User u : users) {
			parameters.add(new Object[] { u.getId(), u.getName() });
		}
		getSimpleJdbcTemplate().batchUpdate(sql, parameters);

	}

}

 

5.beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd">
	
	<!-- 引入外部文件 -->
	<context:property-placeholder location="classpath:jdbc.properties"/>
	
	<!-- 配置数据源 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}"/>
		<property name="url" value="${jdbc.url}"/>
		<property name="username" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
	</bean>
	
	<!-- 配置DAO -->
	<bean id="userDao" class="org.monday.springjdbc.UserDaoImpl">
		<property name="dataSource" ref="dataSource"/>
	</bean>
	
	
</beans>

 

6.jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring
jdbc.username=root
jdbc.password=root

7.测试

package org.monday.springjdbc;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

	private ApplicationContext ctx = new ClassPathXmlApplicationContext(
			"beans.xml");
	private UserDao userDao=(UserDao) ctx.getBean("userDao");

	@Test
	public void testInsert() {
		User user = new User(1,"zy_1");
		userDao.insert(user);
	}

	@Test
	public void testUpdate() {
		User user = new User(5,"zy_test");
		userDao.update(user);
	}

	@Test
	public void testDeleteUser() {
		User user =new User();
		user.setId(5);
		userDao.delete(user);
	}

	@Test
	public void testDeleteInt() {
		userDao.delete(4);
	}

	@Test
	public void testFindById() {
		User user=userDao.findById(1);
		System.out.println(user);
	}

	@Test
	public void testFindByName() {
		int id=userDao.findByName("zy_1");
		System.out.println(id);
	}

	@Test
	public void testFindAll() {
		List<User> list=userDao.findAll();
		System.out.println(list);
	}

	@Test
	public void testCount() {
		int count = userDao.count();
		System.out.println(count);
	}

	@Test
	public void testBatchInsert() {
		List<User> users = new ArrayList<User>();
		users.add(new User(2,"zy_2"));
		users.add(new User(3,"zy_3"));
		users.add(new User(4,"zy_4"));
		users.add(new User(5,"zy_5"));
		userDao.batchInsert(users);
	}

}

 

 

附:自己写这篇文章的时候,用的是Spring2.5.而今天用了Spring3.1后发现,SimpleJdbcTemplate和SimpleJdbcDaoSupport都被标记为@Deprecated (过时了),后来一看源码,有这么一句话,就明白了。

 

@deprecated since Spring 3.1 in favor of {@link org.springframework.jdbc.core.JdbcTemplate} and
 
{@link org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate}. The JdbcTemplate and  NamedParameterJdbcTemplate now provide all the functionality of the SimpleJdbcTemplate.

 

大意就是: 从Spring 3.1开始,JdbcTemplate和NamedParameterJdbcTemplate提供了SimpleJdbcTemplate的功能。

 

那既然这样的话,SimpleJdbcTemplate和SimpleJdbcDaoSupport被标记为过时,就明白了。

 

 

 

分享到:
评论
3 楼 myxuee 2012-12-22  
周一Monday 写道
myxuee 写道
你好,请教一个问题:
在用SimpleJdbcTemplate做mysql的分页查询时,如果不带参数的话没有问题,带上泛型参数的话就会报异常:Parameter index out of range (1 > number of parameters, which is 0).
不知道怎么回事

你好,SimpleJdbcTemplate过时了,推荐使用JdbcTemplate。


呃,问题已解决,多谢。遗留问题
2 楼 周一Monday 2012-12-21  
myxuee 写道
你好,请教一个问题:
在用SimpleJdbcTemplate做mysql的分页查询时,如果不带参数的话没有问题,带上泛型参数的话就会报异常:Parameter index out of range (1 > number of parameters, which is 0).
不知道怎么回事

你好,SimpleJdbcTemplate过时了,推荐使用JdbcTemplate。
1 楼 myxuee 2012-12-21  
你好,请教一个问题:
在用SimpleJdbcTemplate做mysql的分页查询时,如果不带参数的话没有问题,带上泛型参数的话就会报异常:Parameter index out of range (1 > number of parameters, which is 0).
不知道怎么回事

相关推荐

    使用Spring的SimpleJdbcTemplate完成DAO操作

    本篇文章将详细讲解如何使用Spring的`SimpleJdbcTemplate`来实现DAO操作,这是一种简单易用且强大的工具,特别适合小型项目或快速开发。 `SimpleJdbcTemplate`是Spring框架提供的一个轻量级数据库访问组件,它基于`...

    Spring 通过连接mysql,通过JdbcTemplate和SimpleJdbcTemplate来操作数据库

    `JdbcTemplate`和`SimpleJdbcTemplate`是Spring提供的两个核心组件,用于简化Java数据库连接(JDBC)操作,从而减轻开发人员处理事务、异常处理和资源管理的负担。下面将详细阐述这两个工具的使用及其与MySQL数据库...

    SpringJDBC.rar_jdbc spring_spring jd_spring jdbc_spring使用JDBC进行数

    Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得我们能够更方便地使用Java数据库连接(JDBC)技术。这个“SpringJDBC.rar”压缩包文件可能包含了关于如何在Spring框架中集成和使用JDBC的相关示例和教程...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    Spring mysql数据库的配置与链接

    通过以上步骤,我们可以有效地在Spring应用中配置和使用MySQL数据库,并借助SimpleJdbcTemplate简化SQL操作。这种模式不仅提高了代码的可读性和可维护性,也降低了直接操作JDBC带来的复杂性。在实际项目中,还可以...

    Spring使用JDBC做的增删改查

    本文将详细介绍Spring使用JDBC进行增删改查的三种主要方法。 首先,让我们了解Spring JDBC的基础。Spring JDBC模块通过`JdbcTemplate`和`SimpleJdbcTemplate`类提供了数据库访问的抽象层,简化了数据库操作。这两种...

    Spring3.0.5所有jar包及每个jar包作用说明文档

    3. **spring-context.jar**:在核心和Bean模块之上,提供了更高级的服务,如AOP(Aspect Oriented Programming,面向切面编程),事件发布,国际化支持,以及资源访问。它扩展了ApplicationContext接口,使其能够...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    spring-orm源码

    通过深入研究Spring-ORM的源码,开发者不仅可以提高对Spring框架的理解,还能学习到数据库访问的最佳实践,以及如何高效地集成和使用不同的ORM框架。这对于任何希望优化和扩展数据访问层的Java开发者来说都是宝贵的...

    spring中使用JDBC

    在探讨“Spring中使用JDBC”的主题时,我们首先需要理解Spring框架与JDBC的关系以及为何选择在Spring环境中使用JDBC。Spring是一个开源框架,它为Java应用提供了一个全面的编程和配置模型,旨在简化企业级应用的开发...

    spring源码spring-framework-4.3.2.RELEASE

    Spring框架,作为Java领域最为广泛应用的开源框架之一,以其强大的功能和灵活的设计理念深受开发者喜爱。4.3.2.RELEASE是Spring的一个稳定版本,它包含了许多重要的改进和优化,深入理解其源码对于提升开发技能和...

    Spring 2.5.6和3.0 所有的jar包

    3. **JDBC抽象层增强**:Spring 3.0改进了JdbcTemplate和SimpleJdbcTemplate,同时引入了NamedParameterJdbcTemplate,提供了更方便的参数绑定。 4. **Spring MVC增强**:对Spring MVC进行了大量优化,增加了...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    spring 常用的26个包

    12. `org.springframework.web.struts`:Spring与Struts框架的集成,方便在Struts应用中使用Spring的功能。 13. `org.springframework.web.portlet`:针对portlet应用的MVC支持。 14. `org.springframework.web....

    Spring 2.0 开发参考手册

    6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. ...

    spring-jdbc-4.2.4.RELEASE.jar,spring-tx-4.2.4.RELEASE.jar,jdbcTemplate使用的jar包

    这个jar包包含了Spring对JDBC的支持,主要包括`JdbcTemplate`和`SimpleJdbcTemplate`类。`JdbcTemplate`是Spring提供的一种模板方法模式实现,它封装了JDBC的常用操作,如执行SQL查询、更新等,提供了异常转换和数据...

    SpringJDBC.rar_SpringJDBC_jdbctemplate_jdbctemplate spring

    Spring JDBC通过提供JdbcTemplate和SimpleJdbcTemplate等工具类,帮助开发者以更安全、更易于管理的方式与数据库进行交互,降低了传统JDBC代码的复杂性。下面我们将详细探讨Spring JDBC的核心概念、工作原理以及如何...

    spring-framework-2.5.6

    Spring框架,作为Java开发领域中的核心框架之一,自诞生以来就以其强大的功能、优秀的可扩展性和模块化的结构赢得了广大开发者们的青睐。2.5.6版本是Spring在2008年10月发布的一个稳定版本,它在前一版本的基础上...

    spring+jdbc组合开发

    在Spring中使用JDBC,我们可以利用`JdbcTemplate`或`SimpleJdbcTemplate`,这两个都是对JDBC的轻量级封装,提供了更安全、更易于使用的API。例如,`UserServiceImp`可能包含了这些模板方法来执行SQL查询、更新、插入...

Global site tag (gtag.js) - Google Analytics