`

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

 
阅读更多
 在使用JDBC类操作数据库时,要处理很多相同的繁琐的细节,如:获取数据库的连接、创建Statement、处理数据库异常、关闭数据库资源等。Spring针对这种情况提供了几个类用来简化JDBC  API的使用。
Java代码  
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类
  
Java代码  
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类
 
Java代码  
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类
Java代码  
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();  
    }  
}  

 

分享到:
评论

相关推荐

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

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

    spring jar 包详解

    spring jar 包详解 spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试,正式应用...

    Spring Jar包详解

    Spring2.5各个包的作用详解 (1) spring-core.jar (2) spring-beans.jar (3) spring-aop.jar .... Spring包依赖说明: 1) spring-core.jar需commons-collections.jar,spring-core.jar是以下其它各个的基本。 2) ...

    spring接管jdbc详解

    spring接管jdbc详解

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    spring jar 包详解spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统...

    实例详解Spring JDBC事务管理.doc

    实例详解Spring JDBC事务管理.doc 实例详解Spring JDBC事务管理.doc

    《精通Spring2.X企业应用开发详解》随书源码1-15章

    Spring容器高级主题 第6章 Spring AOP基础 第7章 基于@AspectJ和Schema的 第7章 AOP 第3篇 数据库访问 第8章 Spring对DAO的支持 第9章 Spring的事务管理 第10章 使用Spring JDBC访问数据库 ...

    Spring 数据库连接池(JDBC)详解

    本篇文章主要介绍了基于Spring的JDBC基本框架搭建;基于Spring的JDBC增删改查;读取配置文件中的数据等,具有很好的参考价值。下面跟着小编一起来看下吧

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

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 ...

    Spring框架 jar 架包 spring开发文档详解

    Spring BeanFactory Spring IOC(控制翻转)/DI(依赖注入) Spring Proxy Spring AOP 面向切面编程 Spring与JDBC整合 Spring声明式事务 Spring与Hibernate整合 Spring与Struts整合

    spring对JDBC和orm的支持实例详解

    主要介绍了spring对JDBC和orm的支持实例详解,需要的朋友可以参考下

    多图详解Spring框架的设计理念与设计模式【技术文档】

    Spring作为现在最优秀的框架之一已被广泛的使用51CTO也曾经针对Spring框架中的JDBC应用做过 报道。本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的设计理念。 Rod Johson在2002年...

    spring boot 实践学习案例,与其它组件整合

    - Spring Boot 数据库操作,包括SpringJDBC、JPA、Mybatis注解版 & XML版、MongoDB。其中,每个版本都有其对应的多数据源解决方案。 - springboot-caches - Spring Boot 缓存,包括redis、ehcache、spring-cache...

    《精通Spring2.X企业应用开发详解》16-19章

    Spring容器高级主题 第6章 Spring AOP基础 第7章 基于@AspectJ和Schema的 第7章 AOP 第3篇 数据库访问 第8章 Spring对DAO的支持 第9章 Spring的事务管理 第10章 使用Spring JDBC访问数据库 ...

    Spring jdbc具名参数使用方法详解

    主要介绍了Spring jdbc具名参数使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    跟我学spring3(1-7)

    【第一章】 Spring概述 ——跟我学Spring3 【第二章】 IoC 之 2.1 IoC基础 ——跟我学Spring3 【第二章】 IoC 之 2.2 IoC 容器基本原理...【第七章】 对JDBC的支持 之 7.5 集成Spring JDBC及最佳实践 ——跟我学spring3

    Spring MVC框架 多动作控制器详解 spring mvc 2.5

    本代码使用了Spring MVC框架(spring2.5架包) 演示了(Controller接口的试用方法)和 MultiActionController多动作控制器 数据库连接试用Spring JDBC 并且着重介绍了MultiActionController多动作控制器的两种方法名...

    sharding-jdbc-1.5.1:sharding-jdbc原始码解析

    分片JDBC-分片数据库和表的JDBC驱动程序 概述 分片JDBC是JDBC的扩展,提供了诸如分片,读/写拆分和BASE事务之类的分布式功能。 特征 1.分片 分布式数据库中支持的聚合功能,分组依据,排序依据和限制SQL。 支持联接...

    Spring JDBC的使用方法详解

    主要介绍了Spring JDBC的使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    《精通Spring2.X企业应用开发详解》20-23

    Spring容器高级主题 第6章 Spring AOP基础 第7章 基于@AspectJ和Schema的 第7章 AOP 第3篇 数据库访问 第8章 Spring对DAO的支持 第9章 Spring的事务管理 第10章 使用Spring JDBC访问数据库 ...

Global site tag (gtag.js) - Google Analytics