`
韩悠悠
  • 浏览: 840483 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用spring的jdbcTemplate-----用jdbc模板跟新数据库

阅读更多

1,用语句创建器更新数据库
第一个回调接口是PreparedStatementCreator,实现这个接口来覆盖整个更新过程语句创建任务和参数绑定任务。为了将一个

User对象插入到数据库中,要像下面这样来实现PreparedStatementCreator接口。

public class InsertPreparedStatementCreator implements PreparedStatementCreator{
	private User user;
	
	public InsertPreparedStatementCreator(User user){
		this.user = user;
	}	

	public PreparedStatement createPreparedStatement(Connection conn){
		
		String sql = "insert into user(username,password) values(?,?);
		PreparedStatement ps  = conn.prepareStatement(sql);
		ps.setString(1,user.getUsername());
		ps.setString(2,user.getPassword());
		return ps;
	}
}

 

 


在实现PreparedStatementCreator接口时,会得到数据库连接,它将作为createPreparedStatement()方法的参数,要做的就是

在连接上创建PreparedStatement对象,作为方法的返回值,注意,方法签名中声明抛出了SQLException,这意味着不需要亲自

处理异常。
现在就可以用这个语句创建器来插入数据了。

public class JdbcUserDao implements UserDao{
	
	...........

	public void insert(User user){
		
		JdbcTemplate jdbcTemplate  = new JdbcTemplate(dataSource);
		jdbcTemplate.insert(new InsertPreparedStatementCreator(user));
	}
}

 

 

一般来说,如果接口只在一个方法里使用,最好将PreparedStatementCreator接口和其他的回调接口做为内部类来实现,这是

应为可以直接从内部类中存取局部变量和方法参数,而不是将它作为构造参数进行传递,对这些变量和参数的唯一限制是将它

们必须被声明为final的。

public class JdbcUserDao implements UserDao{

	...........

	public void insert(final User user){
	
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);	
		
		jdbcTemplate.update(new PreparedStatementCreator(Connection conn)throws SQLException{
	
			String sql = "insert into user(username ,password) values (?,?)";
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setString(1,user.getUsername());
			ps.setString(2,user.getPassword());
	
			return ps;
		});
	}
}

 

 

2,用语句设值器更新数据库
第二个回调接口是PreparedStatementSetter,顾名思义,它只执行整个过程中的参数绑定任务。

public class JdbcUserDao implements UserDao{
	

	public void insert(final User user){

		String sql ="insert into user vlaues (?,?)";
		JdbcTemplate jdbcTemplate  = new JdbcTemplate(dataSource);
		
		jdbcTemplate.update(sql,new PreparedStatementSetter(){
	
			public void setValue(PreparedStatement ps)throws Exception{

				ps.setString(1,user.getUsername());
				ps.setString(2,user.getPassword());
			}
		});
	}
}

 

 

另一个版本的update()模板方法接受sql语句和PreparedStatementSetter对象作为参数,该方法会替换从SQL语句中创建

PreparedStatement对象,使用这个接口,所要做的就是参数绑定到PreparedStatement对象上。

 

3,用SQL语句和参数值更新数据库


最后,最简单的update()方法接受SQL语句和对象数组作为语句参数,它会替换从SQL语句中创建的PreparedStatement对象并绑

定参数,因此,不必覆盖整个更新过程的任何任务。

public JdbcUserDao implements UserDao{

	public void insert(final User user){

		String sql ="insert into user values (?,?)";
		JdbcTemplate jdbcTemplate  = new JdbcTemplate(dataSource);

		jdbcTemplate.update(sql,new Object[]{user.getUsername(),user,getPassword()});
		
	}
}

 

 

前面介绍了三种不同的update()方法,最后一种最简单,因为不必实现任何接口,与之相反,第一种最灵活,可以在执行

PreparedStatement对象之前对它进行任意预处理,

 

4,批处理更新数据库

 

假定我们一次插入一批数据到数据库,如果多次调用insert()方法,速度会非常慢 ,因为SQL语句要重复的编译,因此,最好

在DAO接口上添加一个新的方法,插入已批量用户。

 

public interface UserDao{

	.......

	public void insert(List<User> user);

}

 


JdbcTemplate模板也为批量跟新数据提供了batchUpdate()模板方法,它需要一个sql语句和一个

BatchPreparedStatementSetter对象作为参数,这个 方法中,语句编译一次,执行多次。

public class JdbcUserDao implements UserDao{

	public void inser(final List<User> user){
		
		String sql ="insert into User values(?,?)";
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

		jdbcTemplate.batchUpdate(sql,new BatchPreparedStatementSetter(){

			public int getBatchSize(){

				return user.size();
			}

			public void setValue(PreparedStatement ps,int i)throws SQLException{
		
				User user = user.get(i);		
				ps.setString(1,user.getUsername());
				ps.setString(2,user.getPassword());
			}
		});
	}
}

 

使用下面的测试数据,批量插入数据

public class Main{

	public static void main(String[] args){

		User use1 = new User("kang","fei");
		User use2 = new User("zhang","fei");

		UserDao userDao = =new JdbcUserDao();
		userDao.insert(Arrays.asList(new User[]{use2,use2}));
	}
}

 

分享到:
评论

相关推荐

    jdbcTemplate-spring对jdbc的支持

    标题 "jdbcTemplate-spring对jdbc的支持" 涉及到的是Spring框架中的一个核心组件——JdbcTemplate,它是Spring对Java数据库连接(JDBC)的一种封装,用于简化数据库操作。JdbcTemplate提供了一种模板方法模式,使得...

    spring-jdbc jar包.rar

    1. **JdbcTemplate**:这是Spring JDBC的核心类,它通过模板方法模式将常见的JDBC操作进行了封装,如执行SQL查询、更新、调用存储过程等。开发者只需要关注SQL语句和参数,而无需处理连接创建、关闭、异常处理等繁琐...

    spring-jdbcTemplate实例工程

    Spring JdbcTemplate的出现是为了弥补原生JDBC在编码上的繁琐,它通过模板方法模式,将SQL执行、结果集处理等进行了抽象,使得开发者可以更专注于业务逻辑,而无需过多关注数据库访问的细节。同时,它还提供了事务...

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

    `JdbcTemplate`是Spring提供的一种模板方法模式实现,它封装了JDBC的常用操作,如执行SQL查询、更新等,提供了异常转换和数据源管理等功能。通过使用`JdbcTemplate`,开发者可以编写出更简洁、更健壮的数据库访问...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate能够自适应多种数据库,这是因为它的底层使用了JDBC的规范,而不同的数据库厂商都实现了JDBC API。这使得你可以使用相同的代码来连接MySQL、Oracle、PostgreSQL等不同类型的数据库,只需更换相应...

    Spring-JDBC整合-MySQL8、java8版本

    Spring JDBC模块是Spring框架对Java数据库连接(JDBC)的一层抽象,它简化了数据库操作,通过提供模板类和 dao 支持来减少样板代码。Spring JDBC 提供了 JdbcTemplate 和 NamedParameterJdbcTemplate,这两个工具类...

    Spring Data JDBC与JDBC的区别

    1. **自动配置**: Spring Boot通过自动配置,可以快速设置数据源和JDBC模板。 2. **Repository接口**: 开发者只需定义Repository接口,Spring会自动提供实现,无需编写繁琐的DAO层代码。 3. **ORM支持**: 尽管不如...

    Spring-JDBC,带一小例子

    Spring-JDBC通过提供模板类(如JdbcTemplate和NamedParameterJdbcTemplate)以及数据源管理,使得开发者能够更高效地执行SQL查询。 在博文链接中,作者可能分享了一个使用Spring-JDBC的实际示例,虽然具体内容未给...

    Spring JDBCTemplate连接池jar包

    Spring JDBC Template是Spring框架的一部分,它提供了一种简化数据库操作的方式,通过抽象出低级的JDBC细节,使开发者能够更高效、更安全地处理数据库交互。连接池是数据库资源管理的重要工具,它可以提高数据库访问...

    spring对jdbc的支持jar包

    1. **JdbcTemplate**:这是Spring JDBC的基础组件,它通过模板方法模式封装了常见的JDBC操作,如执行SQL查询、更新、存储过程等。使用JdbcTemplate,开发者无需手动管理数据库连接、预编译语句、结果集转换等细节,...

    spring-jdbc(jdbctemplate)所需jar包

    JdbcTemplate是Spring JDBC模块中的核心组件,它提供了一种模板化的JDBC操作方式,降低了数据库访问的复杂性,同时保持了良好的封装和异常处理机制。在使用Spring JDBC之前,我们需要确保引入了必要的jar包。这里...

    spring-jdbc源码

    通过使用模板方法设计模式,Spring-JdbcTemplate能够在不牺牲灵活性的同时,保证了代码的简洁性和可维护性。 接着,让我们来看看DataSourceTransactionManager,它是Spring提供的事务管理器,主要用于管理基于...

    SpringJDBC.rar_SpringJDBC_jdbctemplate_jdbctemplate spring

    Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得开发者可以避免编写大量的JDBC模板代码。这个抽象层包括了事务管理、异常翻译和连接池集成等功能,提高了代码的可读性和可维护性。 2. **数据源注入** ...

    strut2+spring+springjdbctemplate做的简易登录系统

    Spring JDBC Template被用来简化数据库操作,它提供了一种模板方法模式,将SQL执行、结果集处理等细节进行了封装,使得开发者只需要关注SQL语句和处理结果即可。例如,登录验证可能涉及查询用户表,查找与输入用户名...

    spring-jdbc-4.1.1.RELEASE.zip

    1. `JdbcTemplate`:这是Spring JDBC的核心类,提供了模板方法来执行SQL查询、更新语句和存储过程。 2. `SimpleJdbcInsert`和`SimpleJdbcCall`:简化了插入操作和调用存储过程的过程。 3. `...

    Spring 学习 JdbcTemplate,模板模式,回调

    JdbcTemplate是Spring提供的一个用于简化数据库操作的API,它是Spring对JDBC(Java Database Connectivity)的轻量级封装。通过使用JdbcTemplate,开发者可以避免编写大量的样板代码,如打开和关闭连接、处理结果集...

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于使用的编程模型来简化数据库访问。在这个“spring_jdbc_4.0.0.zip”压缩包中,包含的是Spring JDBC 4.0.0版本的jar文件,即...

    Spring4--3.jdbcTemplate事务

    在Spring框架中,JdbcTemplate是用于简化数据库操作的重要组件,特别是在处理JDBC(Java Database Connectivity)时。在Spring4中,JdbcTemplate提供了事务管理的功能,使得开发者能够更好地控制数据库操作的原子性...

    Spring-JdbcTemplate

    ### Spring-JdbcTemplate...总之,Spring-JdbcTemplate通过其简洁的API和强大的功能,极大地简化了JDBC编程,是Spring框架中不可或缺的一部分,对于Java后端开发人员来说,掌握其使用方法是提升数据库操作效率的关键。

Global site tag (gtag.js) - Google Analytics