JdbcTemplate(二)

来源:互联网 发布:linux下chromium加速 编辑:程序博客网 时间:2024/06/06 03:42

 配制Spring事务与JdbcTemplate使用

配制一个applicationContext.XML如下
 
<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
 <! DOCTYPE beans PUBLIC  " -//SPRING//DTD BEAN//EN "   " http://www.springframework.org/dtd/spring-beans.dtd " >
 
 < beans  default - autowire = " autodetect " >
     < import  resource = " classpath:conf/spring/demo.xml "   />
     < bean id = " DataSource "   class = " org.apache.commons.dbcp.BasicDataSource " > 
         < property name = " driverClassName " > 
             < value > com.mysql.jdbc.Driver </ value > 
         </ property > 
         < property name = " url " > 
             < value > jdbc:mysql: // 192.168.1.10:3306/test?characterEncoding=UTF-8&amp;characterSetResults=UTF-8</value>
          </ property >
         < property name = " username " >
             < value > root </ value >
         </ property >
         < property name = " passWord " >
             < value > xx </ value >
         </ property >
         < property name = " maxActive " >
             < value > 10 </ value >
         </ property >
         < property name = " maxIdle " >
             < value > 2 </ value >
         </ property >
     </ bean >
     < bean id = " TransactionManager "
         class = " org.springframework.jdbc.datasource.DataSourceTransactionManager " >
         < property name = " dataSource " >

             < ref bean = " DataSource "   />
         </ property >
     </ bean >
     < bean id = " JdbcTemplate "
         class = " org.springframework.jdbc.core.JdbcTemplate " >
         < property name = " dataSource " >
             < ref bean = " DataSource "   />
         </ property >
     </ bean >
 </ beans >
对应的TestDaoImpl中加入这部分代码
     private  JdbcTemplate jdbcTemplate;
   
     public  JdbcTemplate getJdbcTemplate()   {
         return  jdbcTemplate;
    }
      public   void  setJdbcTemplate(JdbcTemplate jdbcTemplate)   {
         this .jdbcTemplate  =  jdbcTemplate;
    }
     // 插入,修改和删除类似
     String sql1  =   " insert into testdb1 values('1','2') " ;
    jdbcTemplate.update(sql1);
     // 查询
       private   class  BeanRowMapper  implements  RowMapper   {
         public  Object mapRow(ResultSet rs,  int  rowNum)  throws  SQLException   {
            String id  =  rs.getString( " ID " );
            String title  =  rs.getString( " TITLE " );
            Bean bean  =   new  Bean(id,title);
             return  bean;
        }
    }
    String sql1  =   " select *  from testdb1  " ;
    List list  =  jdbcTemplate.query(sql1,  new  BeanRowMapper());
     // call back    (回调)
      jt.execute( new  ConnectionCallback()  {
         public  Object doInConnection(Java.sql.Connection con)  throws  SQLException, DataAccessException   {

             return   null ;
        }
    } );


(二)

因为Spring是以后的一个趋势,Hibernate的集成已经很好了,对于单独的jdbc的操作用DBUtils感觉已经没有什么必要,不如全部转到Spring的jdbc支持,从成本来考虑似乎更合适。

本文转自 这里


前言:

本文指在介绍 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 (
       IDnumber(
10
) primarykey,
       NAMEvarchar2(
64
),
       PASSWORDvarchar2(
64
)
)

 

 

       2. Spring 配置

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

 

      

模型层 : User

数据访问层:UserDAO

JdbcTemplate

OracleDataSource

<!--[if !vml]--> <!--[endif]-->

<?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. 环境配置, 如图:

       <!--[if !vml]--> <!--[endif]-->

 

使用方法:

<!--[if !supportLists]--> 1.       <!--[endif]--> 查找

多行查询:

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;

}

 

 

 

<!--[if !supportLists]--> 2.       <!--[endif]--> 插入

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

 

<!--[if !supportLists]--> 3.       <!--[endif]--> 修改

非常简单:

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();

    }

}

原创粉丝点击