少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          前言:

          本文指在介紹Spring框架中的JdbcTemplate類的使用方法,涉及基本的Spring反轉控制的使用方法和JDBC的基本概念。目標是使讀者能夠對JdbcTemplate快速地掌握和使用。

           

                 準備:

          1. Spring的基本概念

                 Spring框架核心的思想就是建立一個Java對象的大工廠,用戶只要給工廠一個指令,工廠就能將用戶需要的對象根據(jù)配置文件組裝好返還給用戶。用戶需要做的許多工作則可以寫成簡單的配置文件。

                 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語句也需要冗長的出錯處理,并且每個函數(shù)都不斷地重復同樣的代碼。

           

                 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 {   

                          }

                      } );

           

           

                 環(huán)境搭建:

          1. 數(shù)據(jù)庫的配置

                 本文使用Oracle數(shù)據(jù)庫,新建表admin

          create table admin (
                 ID number(
          10primary 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. 環(huán)境配置, 如圖:

                

           

          使用方法:

          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.nextvalOracle設置好的序列,問號“?”被params里的數(shù)據(jù)依次替代,最終執(zhí)行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層的實現(xiàn)

           *

           *

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

              }

          }

           http://blog.csdn.net/nomads/article/details/709551

          posted on 2012-06-25 10:28 abin 閱讀(640) 評論(0)  編輯  收藏 所屬分類: spring
          主站蜘蛛池模板: 龙南县| 南召县| 宜兴市| 永康市| 文化| 慈利县| 安宁市| 通辽市| 留坝县| 海兴县| 休宁县| 宁明县| 永丰县| 龙口市| 黑龙江省| 广德县| 白城市| 土默特左旗| 通江县| 涡阳县| 库尔勒市| 曲靖市| 五大连池市| 南京市| 外汇| 原阳县| 深州市| 措勤县| 辉南县| 元阳县| 曲阳县| 衡南县| 保德县| 上蔡县| 陆川县| 紫阳县| 错那县| 剑河县| 寻甸| 九台市| 康平县|