`
z_xiaofei168
  • 浏览: 200998 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

开源框架spring详解-----spring对JDBC的支持(二)(修改了抱歉)

阅读更多

开源框架spring详解-----spring对JDBC的支持(二)

       在使用JDBC类操作数据库时,要处理很多相同的繁琐的细节,如:获取数据库的连接、创建Statement、处理数据库异常、关闭数据库资源等。Spring针对这种情况提供了几个类用来简化JDBC  API的使用

package com.zxf.domain;
import java.util.Date;

/**
 * @author z_xiaofei168
 */
public class Account {
	private Long id;
	private String loginname;
	private String password;
	private String email;
	private String cellphone;
	private Date registedTime;
	
	//以下省略所以的set 和get方法
}

   

   3.1、使用JdbcTemplate

  

package com.zxf.dao;

import java.util.List;
import com.zxf.domain.Account;

/** Account的DAO接口 */
public interface AccountDao {
	/** 新增账户 */
	void create(Account acc);
	/** 删除指定账户 */
	void delete(Account acc);
	/** 更新账户 */
	void update(Account acc);
	/** 查询指定ID的账户 */
	Account findById(Long id);
	/** 查询所有账户 */
	List<Account> findAll();
}



package com.zxf.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import com.zxf.domain.Account;

/**
 * AccountDao实现类
 * 使用JdbcTemplate来实现
 */
public class AccountDaoJDBCImpl implements AccountDao {
	private JdbcTemplate jdbcTemplate;
	
	public void setDataSource(DataSource dataSource){
		jdbcTemplate  = new JdbcTemplate(dataSource);
	}

	public void create(Account acc) {
		String sql = "INSERT INTO account(loginname,password,email,"
				+"cellphone,registed_time) VALUES(?,?,?,?, NOW())";
		
		Object[] paramValues = {acc.getLoginname(), acc.getPassword(), 
				acc.getEmail(),acc.getCellphone()};
		
		this.jdbcTemplate.update(sql,paramValues);
	}


	public void delete(Account acc) {
		String sql = "DELETE FROM account WHERE id=?";
		Object[] paramValues = {acc.getId()};
		
		this.jdbcTemplate.update(sql, paramValues);
	}
	
	public void update(Account acc) {
		String sql = "UPDATE account SET loginname=?,password=?,email=?,"
			+"cellphone=? WHERE id=?";
	
		Object[] paramValues = {acc.getLoginname(), acc.getPassword(), 
			acc.getEmail(),acc.getCellphone(), acc.getId()};
	
		this.jdbcTemplate.update(sql,paramValues);
	}
	
	@SuppressWarnings("unchecked")
	public List<Account> findAll() {
		String sql = "SELECT * FROM account";
		return this.jdbcTemplate.query(sql, new AccountRowMapper());
	}

	public Account findById(Long id) {
		String sql = "SELECT * FROM account WHERE id=?";
		Object[] paramValues = {id};
		return (Account)jdbcTemplate.
					queryForObject(sql, paramValues, new AccountRowMapper());
	}

	//把结果集封装成Account对象的包装类
	private static final class AccountRowMapper implements RowMapper {
	    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
	        Account acc = new Account();
	        acc.setId(rs.getLong("id"));
	        acc.setLoginname(rs.getString("loginname"));
	        acc.setPassword(rs.getString("password"));
	        acc.setEmail(rs.getString("email"));
	        acc.setCellphone(rs.getString("cellphone"));
	        
	        Timestamp temp = rs.getTimestamp("registed_time");
	        if(temp != null){
	        	acc.setRegistedTime(new Date(temp.getTime()));
	        }
	        return acc;
	    }
	}
}

  

  3.2、使用NamedParameterJdbcTemplate

 

package com.zxf.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;

import com.zxf.domain.Account;

/**
 * 使用NamedParameterJdbcTemplate来实现AccountDao接口
 */
public class AccountDaoNamedParameterJdbcTemplateImpl implements AccountDao {
	//带命名参数功能的Jdbc模板类实例
	private NamedParameterJdbcTemplate jdbcTemplate;
	
	public void setDataSource(DataSource dataSource){
		jdbcTemplate  = new NamedParameterJdbcTemplate(dataSource);
	}

	public void create(Account acc) {
		String sql = "INSERT INTO account(loginname,password,email,"
				+ "cellphone,registed_time) "
				+ "VALUES(:loginname,:password,:email,:cellphone, NOW())";
		//使用一个Bean对象的属性值作为命名参数的值
		SqlParameterSource namedParameters = 
				new BeanPropertySqlParameterSource(acc);

		this.jdbcTemplate.update(sql,namedParameters);
	}


	public void delete(Account acc) {
		String sql = "DELETE FROM account WHERE id=:id";
		//使用指定的值来代替命名参数
		SqlParameterSource namedParameters = 
				new MapSqlParameterSource("id", acc.getId());
		
		this.jdbcTemplate.update(sql, namedParameters);
	}
	
	public void update(Account acc) {
		String sql = "UPDATE account SET loginname=:loginname,"
				+ "password=:password,email=:email,"
				+ "cellphone=:cellphone WHERE id=:id";
		//使用Map对象中的键/值对来代替多个命名参数的实际值
		Map<String, Object> namedParameters = new HashMap<String, Object>();
		namedParameters.put("loginname", acc.getLoginname());
		namedParameters.put("password", acc.getPassword());
		namedParameters.put("email", acc.getEmail());
		namedParameters.put("cellphone", acc.getCellphone());
		namedParameters.put("id", acc.getId());
	
		this.jdbcTemplate.update(sql,namedParameters);
	}
	
	@SuppressWarnings("unchecked")
	public List<Account> findAll() {
		String sql = "SELECT * FROM account";
		//通过getJdbcOperations()来访问只有在JdbcTemplate中拥有的功能
		return this.jdbcTemplate
				   .getJdbcOperations()
				   .query(sql, new AccountRowMapper());
	}

	public Account findById(Long id) {
		String sql = "SELECT * FROM account WHERE id=?";
		//使用指定的值来代替命名参数
		SqlParameterSource namedParameters = 
				new MapSqlParameterSource("id", id);
		return (Account)jdbcTemplate
					.query(sql, namedParameters, new AccountRowMapper());
	}

	//把结果集封装成Account对象的包装类
	private static final class AccountRowMapper implements RowMapper {
	    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
	        Account acc = new Account();
	        acc.setId(rs.getLong("id"));
	        acc.setLoginname(rs.getString("loginname"));
	        acc.setPassword(rs.getString("password"));
	        acc.setEmail(rs.getString("email"));
	        acc.setCellphone(rs.getString("cellphone"));
	        Timestamp temp = rs.getTimestamp("registed_time");
	        if(temp != null){
	        	acc.setRegistedTime(new Date(temp.getTime()));
	        }
	        return acc;
	    }
	}
}

  

  3.3、使用SimpleJdbcTemplate

package com.zxf.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;

import com.zxf.domain.Account;

/**
 * 使用SimplateJdbcTemplate来实现AccountDao接口
 */
public class AccountDaoSimpleJdbcTemplateImpl implements AccountDao {
	private SimpleJdbcTemplate jdbcTemplate;
	
	public void setDataSource(DataSource dataSource){
		jdbcTemplate  = new SimpleJdbcTemplate(dataSource);
	}

	public void create(Account acc) {
		String sql = "INSERT INTO account(loginname,password,email,"
				+"cellphone,registed_time) VALUES(?,?,?,?, NOW())";
		
		this.jdbcTemplate.update(sql, acc.getLoginname(),
									  acc.getPassword(), 
									  acc.getEmail(),
									  acc.getCellphone());
	}

	public void delete(Account acc) {
		String sql = "DELETE FROM account WHERE id=?";
		
		this.jdbcTemplate.update(sql, acc.getId());
	}
	
	public void update(Account acc) {
		String sql = "UPDATE account SET loginname=?,password=?,email=?,"
			+"cellphone=? WHERE id=?";
	
		this.jdbcTemplate.update(sql, acc.getLoginname(), 
								      acc.getPassword(), 
								      acc.getEmail(),
								      acc.getCellphone(), 
								      acc.getId());
	}
	
	public List<Account> findAll() {
		String sql = "SELECT * FROM account";
		return this.jdbcTemplate.query(sql, new AccountRowMapper());
	}

	public Account findById(Long id) {
		String sql = "SELECT * FROM account WHERE id=?";
		return jdbcTemplate.queryForObject(sql, new AccountRowMapper(), id);
	}

	//把结果集封装成Account对象的包装类
	private static final class AccountRowMapper
			implements ParameterizedRowMapper<Account> {
	    public Account mapRow(ResultSet rs, int rowNum) 
	    		throws SQLException {
	        Account acc = new Account();
	        acc.setId(rs.getLong("id"));
	        acc.setLoginname(rs.getString("loginname"));
	        acc.setPassword(rs.getString("password"));
	        acc.setEmail(rs.getString("email"));
	        acc.setCellphone(rs.getString("cellphone"));
	        Timestamp temp = rs.getTimestamp("registed_time");
	        if(temp != null){
	        	acc.setRegistedTime(new Date(temp.getTime()));
	        }
	        return acc;
	    }
	}
}


package com.zxf.service;

import java.util.List;

import com.zxf.dao.AccountDao;
import com.zxf.domain.Account;

/**
 * Account业务逻辑类
 * @author z_xiaofei168
 */
public class AccountService {
	private AccountDao accountDao;
	
	//setter注入
	public void setAccountDao(AccountDao accountDao){
		this.accountDao = accountDao;
	}

	public void create(Account acc) {
		accountDao.create(acc);
	}

	public void delete(Account acc) {
		accountDao.delete(acc);
	}

	public void update(Account acc) {
		accountDao.update(acc);
	}

	public Account findById(Long id) {
		return accountDao.findById(id);
	}

	public List<Account> findAll() {
		return accountDao.findAll();
	}
}

  

 

 

8
6
分享到:
评论

相关推荐

    开源框架spring详解-----spring对JDBC的支持

    Spring 框架是 Java 开发中的一个核心组件,它为开发者提供了丰富的功能,包括对 JDBC(Java Database Connectivity)的支持。在 Spring 中,对 JDBC 的处理被设计得更加优雅和易于管理,通过引入数据访问对象(DAO...

    spring-jdbc-4.2.xsd.zip

    《Spring JDBC 4.2.xsd详解》 在Java企业级开发中,Spring框架是不可或缺的一部分,它提供了全面的编程和配置模型,极大地简化了应用的构建和维护。Spring JDBC作为Spring框架的一部分,主要负责数据库操作,使得...

    spring-jdbc-dao

    在Java开发中,Spring框架以其强大的功能和易用性深受开发者喜爱,其中Spring JDBC模块提供了对数据库操作的支持。Spring JDBC DAO(Data Access Object)模式是Spring提供的一种数据库访问机制,旨在简化传统的JDBC...

    spring jdbc相关包版本5.1.3

    Spring JDBC模块是Spring框架的一部分,它提供了对JDBC(Java Database Connectivity)的高级抽象,简化了数据库操作。在这个场景中,我们关注的是Spring JDBC的5.1.3版本。 **Spring JDBC 5.1.3 版本详解** ...

    spring框架:spring-framework-4.3.9.RELEASE-dist

    4. **数据访问/集成**:Spring对JDBC、ORM框架(如Hibernate、MyBatis)以及NoSQL数据库的支持进一步增强,提供了事务管理功能,确保数据一致性。 5. **Spring Boot**:虽然Spring Boot不是4.3.9.RELEASE的一部分,...

    官方原版源码 spring-5.2.8.RELEASE.zip

    《Spring框架5.2.8.RELEASE源码详解》 Spring框架是Java开发中的核心组件,它以其模块化、灵活性和强大的功能深受开发者喜爱。5.2.8.RELEASE是Spring框架的一个稳定版本,提供了诸多改进和新特性,旨在提升性能、...

    该项目主要采用springboot2.x+sharding -spring-boot-sharding-jdbc.zip

    《SpringBoot2.x结合Sharding-JDBC实现数据库分片详解》 在当今大数据时代,数据库的性能和扩展性成为系统架构中的关键因素。SpringBoot2.x作为轻量级的Java开发框架,以其简洁的配置、快速的启动和强大的集成能力...

    官方完整包 spring-framework-5.3.7.RELEASE-dist.zip

    Spring Framework 是一个开源的应用程序框架,它主要针对Java平台,为构建企业级应用提供了全面的解决方案。5.3.7.RELEASE是Spring Framework的一个稳定版本,包含了一系列的增强功能和性能优化。本压缩包“spring-...

    spring-framework-5.3.20

    Spring Framework,作为Java领域最广泛应用的轻量级框架之一,自诞生以来就以其卓越的灵活性、强大的功能和良好的社区支持,深受广大开发者的喜爱。本次我们将深入探讨Spring Framework的最新版本5.3.20,揭示其在...

    polardb-jdbc18.zip

    该驱动兼容JDBC 4.2及以上版本,同时也兼容大多数主流的Java应用框架,如Spring、MyBatis等,方便开发者集成到现有项目中。 2.3 动态配置 PolarDB-JDBC18支持动态配置数据库连接参数,如自动重连、超时设置等,适应...

    spring-framework-2.5-rc2-with-dependencies\spring-framework-2.5-rc2\spring-framework-2.5-rc2docs

    《Spring框架2.5 RC2详解》 Spring框架是Java开发中的一个重要组成部分,尤其是在企业级应用领域,它以其模块化、可扩展性以及对J2EE的出色支持而备受推崇。这里我们关注的是Spring框架的2.5 RC2版本,这个版本在...

    spring-boot-starter-mybatis-spring-boot-1.0.2.zip

    《Spring Boot集成MyBatis详解》 在Java开发领域,Spring Boot以其简洁的配置和快速的启动特性,已经成为构建微服务应用的首选框架。而MyBatis作为一款强大的持久层框架,深受开发者喜爱,它提供了灵活的SQL映射...

    Spring Mybatis Sharding-JDBC demo

    ### Spring Mybatis Sharding-JDBC 示例详解 #### 一、Sharding-JDBC 概述 在分布式系统架构中,随着业务量的增长,单个数据库往往难以承受巨大的读写压力,因此需要采用数据库分片(Sharding)技术来提高系统的可...

    官方原版完整包 spring-framework-5.3.2.RELEASE.zip

    在数据访问/集成方面,Spring 5.3.2.RELEASE提供了对JDBC、ORM(Object-Relational Mapping)框架如Hibernate和MyBatis的高级抽象,简化了数据库操作。同时,Spring Data项目提供了对各种NoSQL数据库的支持,如...

    spring-framework-3.0.RELEASE

    8. **spring-jdbc**和**spring-orm**:提供了对JDBC和ORM框架(如Hibernate、JPA)的支持。 9. **spring-tx**:提供事务管理服务,支持编程式和声明式事务管理。 四、总结 Spring框架3.0.RELEASE在前代基础上进行...

    spring jar 包详解

    - **功能简介**:包含了 Spring 对 DAO 特性集进行了扩展,使其支持 iBATIS、JDO、OJB、TopLink 等 ORM 框架。 - **应用场景**:适用于需要使用 ORM 框架进行数据持久化的项目。 - **依赖关系**:依赖于 `spring-...

    spring2.5 -3.0 hibernate3.3 jar包说明

    Spring是一个开源的应用框架,它提供了一个全面的编程模型,旨在简化Java应用程序的开发过程。Spring的核心功能包括依赖注入(Dependency Injection, DI)、面向切面编程(Aspect Oriented Programming, AOP)、事务...

    mysql-jdbc-Spring源代码分析

    - **学习其他Spring提供的DAO支持工具**:除了`JdbcTemplate`外,Spring还提供了针对不同ORM框架的支持,如`HibernateTemplate`、`MyBatis`等。 - **探索Spring的异常处理机制**:Spring框架为处理各种常见的数据库...

    spring-framework-4.0.0.RELEASE官方完整包

    Spring 4.0.0.RELEASE是该框架的一个重要版本,引入了对Java 8的支持,提升了性能,并优化了API。 二、核心特性 1. 控制反转(IOC)与依赖注入(DI) Spring通过IOC容器管理对象的生命周期和依赖关系,使得组件...

Global site tag (gtag.js) - Google Analytics