<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    前言:

    本文指在介紹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(
    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. 環境配置, 如圖:

          

     

    使用方法:

    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里的數據依次替代,最終執行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();

        }

    }

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

    posted on 2012-06-25 10:28 abin 閱讀(637) 評論(0)  編輯  收藏 所屬分類: spring
    主站蜘蛛池模板: 亚洲制服丝袜第一页| a级午夜毛片免费一区二区| 又大又粗又爽a级毛片免费看| 黄色视屏在线免费播放| 久久综合亚洲色一区二区三区| 岛国大片免费在线观看| a级毛片黄免费a级毛片| 国产精品亚洲午夜一区二区三区| 亚洲人成影院在线无码观看| 777爽死你无码免费看一二区 | 日日躁狠狠躁狠狠爱免费视频| 国产亚洲3p无码一区二区| 在线成人a毛片免费播放| 在线看片免费人成视频福利| 亚洲精品乱码久久久久久V| 亚洲国产一二三精品无码| 免费黄色小视频网站| 一级毛片aaaaaa免费看| 老司机免费午夜精品视频| 亚洲黄色中文字幕| 亚洲一区二区女搞男| 日本高清色本免费现在观看| 91禁漫免费进入| 9久久免费国产精品特黄| 亚洲变态另类一区二区三区| 中文字幕亚洲免费无线观看日本| 亚洲色偷拍区另类无码专区| 免费看香港一级毛片| 曰批全过程免费视频播放网站| 国产精品免费在线播放| 久久亚洲精品无码av| 亚洲国产成AV人天堂无码| 亚洲AV午夜成人影院老师机影院| 亚洲成A人片77777国产| 麻豆成人精品国产免费| av大片在线无码免费| 无码囯产精品一区二区免费 | 在线成人a毛片免费播放| 久久久久久精品成人免费图片 | 国产亚洲成人久久| 亚洲av区一区二区三|