`

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

    spring-jdbc-4.2.xsd.zip

    在Spring的配置文件中,我们经常会看到xsd文件的身影,例如`spring-jdbc-4.2.xsd`,它是Spring JDBC模块的XML Schema定义文件,用于验证和解析与数据库交互的相关配置。 `spring-jdbc-4.2.xsd`是Spring 4.2版本的...

    spring jdbc相关包版本5.1.3

    4. **spring-jdbc-5.1.3.RELEASE.jar**:此包专注于数据库操作,提供了模板类如`JdbcTemplate`和`SimpleJdbcInsert`,使得数据库操作更加简洁,避免了手动管理连接和结果集。 5. **spring-aop-5.1.3.RELEASE.jar**...

    spring-jdbc-dao

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

    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

    &lt;artifactId&gt;sharding-jdbc-spring-boot-starter 对应版本号 ``` 2. 配置数据库连接:在application.properties或application.yml中配置数据库连接信息,包括数据库URL、用户名、密码等。 ```properties spring....

    polardb-jdbc18.zip

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

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

    - **Spring JDBC**和**JPA**:提供对数据库操作的支持,JDBC抽象层简化了数据库访问,JPA则实现了ORM(对象关系映射)。 - **Spring Test**:包含了测试支持,帮助开发者进行单元测试和集成测试。 4. **5.3.7....

    spring-framework-5.3.20

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

    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-framework-5.3.2.RELEASE.zip

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

    Spring Mybatis Sharding-JDBC demo

    1. **简化开发流程**:Spring 框架本身提供了丰富的功能支持,如事务管理、依赖注入等,集成 Sharding-JDBC 后可以进一步简化数据分片逻辑的实现。 2. **提高代码可维护性**:通过 Spring 的管理机制,能够更方便地...

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

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

    spring-framework-3.0.RELEASE

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

    mysql-jdbc-Spring源代码分析

    ### MySQL-JDBC-Spring源代码分析 #### 一、引言 MySQL-JDBC与Spring框架的结合,在现代Java企业级应用开发中极为常见。通过Spring框架管理数据访问层(DAO层),可以极大地简化数据库操作,并提供一致的异常处理...

    spring4-hibernate4-struts2整合

    **Spring4** 是一个开源的轻量级Java开发框架,旨在简化企业级应用的开发过程。它提供了强大的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)功能,支持多种模块化设计...

    spring jar 包详解

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

Global site tag (gtag.js) - Google Analytics