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

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

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

    每日一得

    不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發
    最近關心的內容:SSH,seam,flex,敏捷,TDD
    本站的官方站點是:顛覆軟件

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks

    key words:Spring,jdbcTemplate

    注:因為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 層。簡要的關系如下:

    ?

    ??????

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

    ??? }

    }

    ?

    posted on 2006-10-16 16:28 Alex 閱讀(2749) 評論(0)  編輯  收藏 所屬分類: Spring
    主站蜘蛛池模板: 无码一区二区三区亚洲人妻| 色www永久免费网站| 免费午夜爽爽爽WWW视频十八禁| 黄色免费在线观看网址| 亚洲va无码专区国产乱码| 男人的好看免费观看在线视频| 久久亚洲精品无码av| 亚洲爆乳无码一区二区三区| 日本三级2019在线观看免费| 成年大片免费视频播放一级| 亚洲精品456在线播放| 亚洲成a人片在线播放| 中国人xxxxx69免费视频| 成人免费观看男女羞羞视频| 亚洲精品自拍视频| 亚洲综合色区在线观看| 日韩精品无码区免费专区 | 亚洲精品永久在线观看| 久久综合日韩亚洲精品色| 破了亲妺妺的处免费视频国产| 久久青青草原国产精品免费| 亚洲AV综合色区无码一二三区| 久久香蕉国产线看观看亚洲片| 免费人妻av无码专区| 曰批全过程免费视频在线观看| 中国极品美軳免费观看| 另类图片亚洲校园小说区| 亚洲中字慕日产2021| 亚洲AV无码专区国产乱码电影 | 91在线免费视频| 国产精品亚洲精品日韩动图| 亚洲精品乱码久久久久久下载| 亚洲老妈激情一区二区三区| 国产在线98福利播放视频免费| 每天更新的免费av片在线观看 | 337p日本欧洲亚洲大胆精品555588 | 亚洲精品中文字幕麻豆| 亚洲国产三级在线观看| 亚洲视频在线精品| 免费人成激情视频| 狼友av永久网站免费观看|