`
gutou9
  • 浏览: 145445 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Spring:JdbcTemplate使用指南

阅读更多

Spring:JdbcTemplate使用指南
    版权所有,转载请注明出处:http://blog.csdn.net/nomads
PDF 下载:点此处

前言:

本文指在介绍Spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转控制的使用方法和JDBC的基本概念。目标是使读者能够对JdbcTemplate快速地掌握和使用。

 

       准备:

1. Spring的基本概念

       Spring框架核心的思想就是建立一个Java对象的大工厂,用户只要给工厂一个指令,工厂就能将用户需要的对象根据配置文件组装好返还给用户。用户需要做的许多工作则可以写成简单的配置文件。

       2. 丑陋的JDBC代码
Connection con= null;

PreparedStatement pStmt=null;

ResultSet rs = null;

try{          

            con = ods.getConnection();

            String sql = "select * from admin";

            pStmt=con.prepareStatement(sql);           

            rs=pStmt.executeQuery();

            while(rs.next())

            {            }

}

catch(Exception ex) {

try{

         con.rollback();

    }catch(SQLException sqlex){

          sqlex.printStackTrace(System.out);

     }

     ex.printStackTrace();

}finally{

   try{

            rs.close();

            pStmt.close();

            con.close();

   }catch(Exception e){e.printStackTrace();}

}

 


 

       以上是常见的JDBC代码,简单的select语句也需要冗长的出错处理,并且每个函数都不断地重复同样的代码。

 

       3. JdbcTemplate的作用

       JdbcTemplate正是为了减少上述繁琐的代码而设计出来的。它是对JDBC的一种封装,抽象我们常用的一些方法。Simple and Stupid就是它的目标。下面是完成了刚才JDBC代码同样功能的JdbcTemplate的代码:
String sql = "select * from admin";

jdbcTemplate.query(sql,new RowCallbackHandler() {

         public void processRow(ResultSet rs) throws SQLException {   

                }

            } );


 

 

       环境搭建:

1. 数据库的配置

       本文使用Oracle数据库,新建表admin:
create table admin (
       ID number(10) primary key,
       NAME varchar2(64),
       PASSWORD varchar2(64)
)


 

 

       2. Spring配置

       JdbcTemplate的使用需要有DataSource的支持,所以在配置文件中,我们首先要配置一个OracleDataSource,然后在将这个DataSource配置到JdbcTemplate里。接着将JdbcTemplate配置进DAO层,最后将DAO配置进Model层。简要的关系如下:

 

      

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">

        <property name="URL">

            <value>jdbc:oracle:thin:root/123@localhost:1521/XE</value>

        </property>

    </bean>

   

    <bean id="jdbcTemplate"

class="org.springframework.jdbc.core.JdbcTemplate">

        <property name="dataSource"><ref bean="dataSource"/></property>

    </bean>

 

    <bean id="userDAO" class="DAO.Imp.UserDAOImp">

        <property name="jdbcTemplate">

<ref bean="jdbcTemplate" />

</property>

    </bean>

   

    <bean id="user" class="Model.User">

        <property name="dao"><ref bean="userDAO"/></property>

    </bean>

</beans>


 

       3. 环境配置, 如图:

      

 

使用方法:

1.       查找

多行查询:
class UserRowMapper implements RowMapper {

        public Object mapRow(ResultSet rs,int index) throws SQLException

        {

            User u = new User();

            u.setId(rs.getString("ID"));

            u.setName(rs.getString("Name"));

            u.setPassword(rs.getString("Password"));

            return u;

        }

    }

public List select(String where)

    {

        List list;       

        String sql = "select * from admin "+where;       

        list = jdbcTemplate.query(sql,new RowMapperResultReader(new UserRowMapper()));

        return list;

    }

 


 

 

List最终返回的是满足条件的User队列。

 

单行查询:
public User selectById(String id){

    String sql = "select * from admin where id=?";

    final User u = new User();

    final Object[] params = new Object[] {id};

    jdbcTemplate.query(sql, params, new RowCallbackHandler(){

                        public void processRow(ResultSet rs) throws SQLException {

                                 u.setId(rs.getString("ID"));

                                 u.setName(rs.getString("NAME"));

                                 u.setPassword(rs.getString("PASSWORD"));

                        }                     

    });         

    return u;

}

 


 

 

2.       插入
public void insert(User u)

{

     String sql = "insert into admin (ID,NAME,PASSWORD) values (admin_id_seq.nextval,?,?)";

     Object[] params = new Object[] {

                                                u.getName(),

                                                u.getPassword() };

     jdbcTemplate.update(sql,params);

 }


 

admin_id_seq.nextval为Oracle设置好的序列,问号“?”被params里的数据依次替代,最终执行sql。

 

3.       修改

非常简单:
public void update(String how)

{

        jdbcTemplate.update(how);

    }


 

 

源代码:

User.class:
package Model;

 

import java.util.List;

import DAO.UserDAO;

/**

 *  Model层

 *

 *

 * @author 李嘉陵

 * @since 2006-4-30 12:10:30

 * @version 0.10a

 **/

 

public class User {

    private String name;

    private String id;

    private String password;

    private UserDAO dao;

   

    public User()

    {

      

    }

   

    public User(String name, String password)

    {

       this.name = name;

       this.password = password;

    }

   

    public void setDao(UserDAO dao)

    {

        this.dao = dao;

    }

    public String getId() {

        return id;

    }

   

    public void setId(String id) {

        this.id = id;

    }

   

    public String getName() {

        return name;

    }

   

    public void setName(String name) {

        this.name = name;

    }

   

    public String getPassword() {

        return password;

    }

   

    public void setPassword(String password) {

        this.password = password;

    }

   

    public void getInfo(String id)

    {

        List list = dao.select("where id="+id);

        User u = (User) list.get(0);

       

        this.id=id;

        this.name = u.getName();

        this.password = u.getPassword();

       

    }

   

    public void insert()

    {

        dao.insert(this);

    }

   

    public void update(String how)

    {

        dao.update(how);

    }

   

    public void update()

    {

        dao.update("update admin set name='"+name+"', password='"+password+"' where id="+id);

    }

   

    public List selectWithTemp(String where)

    {

        return dao.select(where);

    }

   

    public void selectWithTemp()

    {

        dao.selectWithTemp();

    }

   

    public User selectById(String id)

    {

       return dao.selectById(id);

    }

   

    public void insertUsers(List users)

    {

       dao.insertUsers(users);

    }

}


 

 

UserDAO.class :
package DAO;

 

import java.util.List;

 

import Model.User;

 

/**

 * DAO层接口

 *

 *

 * @author 李嘉陵

 * @since 2006-4-30 8:40:56

 * @version 0.10a

 **/

 

public interface UserDAO {

    public void select();

    public void test();

    public void selectWithTemp();

    public List select(String where);

    public void update(String how);

    public void insert(User u);

    public User selectById(String id);

    public int[] insertUsers(final List users);

   

}


 

UserDAOImp.class:
package DAO.Imp;

 

 

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.List;

 

import org.springframework.jdbc.core.BatchPreparedStatementSetter;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowCallbackHandler;

import org.springframework.jdbc.core.RowMapper;

import org.springframework.jdbc.core.RowMapperResultReader;

 

import DAO.UserDAO;

import Model.User;

 

/**

 *  DAO层的实现

 *

 *

 * @author 李嘉陵

 * @since 2006-4-30 8:41:26

 * @version 0.10a

 **/

 

public class UserDAOImp implements UserDAO{

   

    private JdbcTemplate jdbcTemplate;

   

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate)

    {

        this.jdbcTemplate = jdbcTemplate;

    }

   

    class UserRowMapper implements RowMapper

    {

        public Object mapRow(ResultSet rs,int index) throws SQLException

        {

            User u = new User();

            u.setId(rs.getString("ID"));

            u.setName(rs.getString("Name"));

            u.setPassword(rs.getString("Password"));

 

            return u;

        }

    }

   

    public void selectWithTemp()

    {

        String sql = "select * from admin";

              

        jdbcTemplate.query(sql,new RowCallbackHandler() {

                public void processRow(ResultSet rs) throws SQLException {

                System.out.println("ID: "+rs.getString("ID")+"   Name: "+rs.getString("name"));

                }

            } );

 

    }

   

    public List select(String where)

    {

        List list;

        String sql = "select * from admin "+where;

        list = jdbcTemplate.query(sql,new RowMapperResultReader(new UserRowMapper()));

        return list;

    }

   

    public User selectById(String id)

    {

       String sql = "select * from admin where id=?";

       final User u = new User();

       final Object[] params = new Object[] {id};

      

       jdbcTemplate.query(sql,params, new RowCallbackHandler(){

                         public void processRow(ResultSet rs) throws SQLException {

                                   u.setId(rs.getString("ID"));

                                   u.setName(rs.getString("NAME"));

                                   u.setPassword(rs.getString("PASSWORD"));

                         }

       });

      

       return u;

    }

   

    public void update(String how)

    {

        String sql = how;

        jdbcTemplate.update(sql);

    }

   

    public void insert(User u)

    {

        String sql = "insert into admin (ID,NAME,PASSWORD) values (admin_id_seq.nextval,?,?)";

        Object[] params = new Object[] {

                                                   u.getName(),

                                                   u.getPassword()};

        jdbcTemplate.update(sql,params);

    }

  

}


 

 

UserAction.class:
//测试类

public class UserAction {

    public static void main(String[] args)

    {

        Resource resource=new ClassPathResource("beans.xml");

        BeanFactory factory = new XmlBeanFactory(resource);       

        User user = (User) factory.getBean("user");   

       

        user.selectWithTemp();

    }

}


 

分享到:
评论

相关推荐

    掌握Spring设计模式:Java工程师必备指南

    9. **模板方法模式**:Spring的JdbcTemplate和RestTemplate等提供了模板方法,定义了操作的主要步骤,允许子类在不改变整体结构的情况下重定义某些步骤,实现数据库访问和HTTP请求的统一处理。 10. **责任链模式**...

    Spring 2.0 中文用户指南

    Spring 2.0还加强了与其它框架和库的集成,如Hibernate、MyBatis等,使得在Spring环境中使用这些技术更加顺畅。同时,Spring 2.0的测试框架提供了丰富的支持,包括单元测试、集成测试以及模拟对象,帮助开发者确保...

    spring-boot-reference-guide-zh-中文, spring-boot参考指南

    - **任务调度**:使用Spring Task或Quartz进行定时任务。 - **国际ization (i18n)**:支持多语言环境。 9. **部署** - **Fat JAR**:打包所有依赖为单一可执行JAR,方便部署。 - **Docker**:将Spring Boot应用...

    Spring认证考试指南

    1. **Spring JDBC**:会配置和使用Spring的JdbcTemplate,处理结果集,以及管理数据访问异常。 2. **事务管理**:描述Spring事务管理,配置事务的传播特性,设置回滚规则,以及在测试中使用事务。 3. **Spring Boot...

    JdbcUtils:(仿Spring JdbcTemplate)JDBC工具类

    JdbcUtils使用指南JdbcUtils是JDBC的工具类,封装了JDBC连接获取,语句结构,资源释放等繁琐步骤,对外提供简洁的数据库查询和更新操作接口。使用前准备添加maven仓库地址&lt; repositories&gt; &lt; repository&gt; &lt; id&gt;byx-...

    spring2.0中文手册及使用指南 chm

    本手册和使用指南提供了全面的Spring 2.0相关知识,包括其核心特性、配置方式以及如何在实际项目中应用。 首先,让我们深入了解一下Spring框架的核心概念。Spring的依赖注入(Dependency Injection,简称DI)是一种...

    Spring技术内幕:深入解析Spring架构与设计原理(第2版).pdf

    6. **模板方法模式(Template Method Pattern)**:Spring框架中大量使用了模板方法模式,例如`JdbcTemplate`、`SimpleJdbcInsert`等,它们提供了一种定义算法骨架的方法,允许子类提供具体实现细节。 7. **观察者...

    easyframework-data:基于 Spring JdbcTemplate 的数据访问框架

    EasyFramework-Data 是一个基于 Spring JdbcTemplate 的轻量级数据访问框架,它简化了数据库操作,提供了更加简洁、安全的API,旨在提高开发效率,降低项目中的数据库访问复杂性。这个框架适用于使用Java语言进行...

    中文 Spring Boot 参考指南

    2. **Kafka**:使用 Spring for Apache Kafka,可以实现基于发布/订阅的消息传递。 **七、安全** 1. **Spring Security**:Spring Boot 默认集成了 Spring Security,可以轻松实现认证和授权。 2. **JWT(JSON Web ...

    详尽的Spring2.0学习提纲

    3. Spring与Spring Data JPA:使用Spring Data JPA简化JPA操作,通过Repository接口实现CRUD。 七、实战项目 1. 创建Spring项目:从零开始构建一个简单的Spring MVC应用,涉及配置、控制器、视图和数据库访问。 2. ...

    Spring Boot 参考指南

    《Spring Boot 参考指南》是一份详尽的教程,主要针对使用Spring Boot进行Java应用程序开发的开发者。Spring Boot是Spring框架的一个扩展,它旨在简化Spring应用的初始搭建以及开发过程,通过“约定优于配置”的理念...

    在Eclipse中创建Spring应用

    - **JdbcTemplate的优势**:使用Spring的`JdbcTemplate`,同样的更新操作只需一行代码,大大减少了样板代码,提高了代码的可读性和可维护性。 5. **JdbcTemplate的实现原理** - **Template模式的应用**:`...

    Spring 用户指南 v2.0

    指南会讲解如何使用JdbcTemplate和NamedParameterJdbcTemplate进行简单查询,以及如何集成Hibernate、MyBatis等ORM框架,实现更加高级的数据库操作。 事务管理是企业级应用的关键,Spring提供了声明式和编程式的...

    SPRING技术内幕+深入解析SPRING架构与设计 55M(下载地址)

    本书《Spring技术内幕+深入解析Spring架构与设计》是一本专为Spring框架开发者所撰写的深度技术指南。作者凭借超过十年的Java开发经验,从Spring 3.0版本出发,通过分析源代码的方式,对Spring框架的核心组件及主要...

    spring+mybatis框架搭建

    3. **DAO层实现**:使用Spring的JdbcTemplate或MyBatis的SqlSessionTemplate,可以方便地执行数据库操作,并通过Mapper接口与业务层交互。 4. **Service层设计**:Spring的Service层通常负责业务逻辑,调用DAO层的...

    Spring开发指南

    1. JDBC模板:Spring简化了JDBC的使用,提供了JdbcTemplate和NamedParameterJdbcTemplate,降低了处理数据库操作的复杂性。 2. ORM集成:Spring与ORM框架如Hibernate、MyBatis的集成,使得对象与关系数据库之间的...

    基于 Spring、SpringMVC、JDBCTemplate、JSP的博客论坛系统 - 毕业设计.zip

    `.gitattributes`定义了Git仓库中文件的属性,`README.md`提供了项目简介和指南,`LICENSE.txt`指定了项目使用的许可证,`readme.txt`可能是项目额外的说明。`lib`目录可能存放依赖的库文件,`src`是源代码目录,`...

    spring开发指南

    - **JDBC模板**:Spring提供了JdbcTemplate类,简化了JDBC编程模型,减少了常见的错误源。 - **ORM集成**:Spring支持多种ORM框架的集成,如Hibernate、MyBatis等,通过配置即可轻松使用。 #### 八、Web层支持 - **...

Global site tag (gtag.js) - Google Analytics