春風博客

          春天里,百花香...

          導航

          <2008年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          統計

          公告

          MAIL: junglesong@gmail.com
          MSN: junglesong_5@hotmail.com

          Locations of visitors to this page

          常用鏈接

          留言簿(11)

          隨筆分類(224)

          隨筆檔案(126)

          個人軟件下載

          我的其它博客

          我的鄰居們

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          Spring的ID增長器使用示例(MySql數據庫)

          一般來說涉及數據庫的應用中,表的主鍵有兩種生成方案,一種是專門定義一個主鍵表,在其中放置一個自增長的字段為其它表提供主鍵;另一種是使用Oracle的sequence。這兩種方案都有一定麻煩,Spring為此專門提供了一個ID增長器以簡化具體步驟,下文就是它的相關使用方法的,使用的數據庫是MySql5.

          歸納
          使用Spring的自增長ID生成器完成以下三步即可:
          1)配置自增長id生成器,它需要一個數據源的支持。
          2)根據配置將自增長id生成器注入DAO各類中。
          3)使用nextStringValue,nextIntValue或nextLongValue方法得到ID。

          具體方法請參照以下代碼:

          1.ID增長器在Spring配置文件中的配置。
          <?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
          ="org.springframework.jdbc.datasource.DriverManagerDataSource">
                  
          <property name="driverClassName"
                      value
          ="org.gjt.mm.mysql.Driver">
                  
          </property>
                  
          <property name="url" value="jdbc:mysql://127.0.0.1/test">
                  
          </property>
                  
          <property name="username" value="root"></property>
                  
          <property name="password" value="hy"></property>
              
          </bean>

              
          <!-- jdbcTemplate,供各DAO類使用 -->
              
          <bean id="jdbcTemplate"
                  class
          ="org.springframework.jdbc.core.JdbcTemplate">
                  
          <property name="dataSource">
                      
          <ref bean="dataSource" />
                  
          </property>
              
          </bean>
              
              
          <!-- 自增長id生成器 -->
              
          <bean id="idGenarater"
                  class
          ="org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer">
                  
          <property name="incrementerName" value="forumidtable"/> 
                  
          <property name="columnName" value="sequence_id"/>
                  
          <property name="cacheSize" value="10"/> 
                  
          <property name="dataSource" ref="dataSource"/>
              
          </bean>
              
              
          <!-- User Service -->
              
          <bean id="userService"
                  class
          ="com.heyang.service.UserService">
                  
          <property name="dao" ref="userDao"/> 
                  
          <property name="table" value="ForumUser"/>
              
          </bean>
              
              
          <!-- User Dao -->
              
          <bean id="userDao"
                  class
          ="com.heyang.dao.UserDao">
                  
          <property name="idGenarater" ref="idGenarater"/> 
                  
          <property name="table" value="ForumUser"/>
                  
          <property name="jdbcTemplate">
                      
          <ref bean="jdbcTemplate" />
                  
          </property>
              
          </bean>
          </beans>

          2.自增長ID生成器相關配置。
           <!-- 自增長id生成器 -->
           <bean id="idGenarater"
            class="org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer">
                  <property name="incrementerName" value="forumidtable"/>  // 自增長ID字段所在的表名 “forumidtable”
                  <property name="columnName" value="sequence_id"/>         // 自增長ID字段 “sequence_id”
                  <property name="cacheSize" value="10"/>                            //  一次生成ID數目,此設置中一次生成十個,以后從緩存中取,就不用每次都訪問數據庫了,這樣能提高效率
                  <property name="dataSource" ref="dataSource"/>                 // 數據源
           </bean>

          3.使用到自增長ID生成器的BaseDao類,它是UserDao的基類。
          通過配置文件將idGenarator注入后,就能使用它。nextStringValue方法用于生成文本類型的ID。
          package com.heyang.dao.base;

          import java.util.List;

          import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;

          import com.heyang.domain.base.BaseDomainObj;

          /**
           * 領域對象DAO類的基類
           * 
          @author 何楊(heyang78@gmail.com)
           *
           * 
          @since 2008-8-29 下午09:51:38
           * 
          @version 1.00
           
          */

          public abstract class BaseDao extends Dao{
              
          protected String sql;    
              
              
          /**
               * 與領域對象存取有關的表
               
          */

              
          protected String table;
              
              
          /**
               * 記錄的主鍵生成器
               
          */

              
          protected DataFieldMaxValueIncrementer idGenarater;
              
              
          /**
               * 向數據庫中創建一個對象
               * 
          @param obj
               
          */

              
          public void create(BaseDomainObj obj){
                  
          if(obj.getId()==null){
                      obj.setId(idGenarater.nextStringValue());
                  }

                  
                  save(obj);
              }

              
              
          /**
               * 向數據庫中保存一個領域對象
               * 強制子類完成
               * 
          @param obj
               
          */

              
          protected abstract void save(BaseDomainObj obj);
              
              
          /**
               * 從數據庫中查詢一個對象
               * 強制子類完成
               * 
          @param sql
               * 
          @return
               
          */

              
          public abstract List<BaseDomainObj> search(String sql);
              
              
          /**
               * 更新一個對象
               * 強制子類完成
               * 
          @param obj
               
          */

              
          public abstract void update(BaseDomainObj obj);
              
              
          /**
               * 按ID取得一個對象
               * 
          @param obj
               
          */

              
          public BaseDomainObj getById(String id){
                  sql
          =" select * from "+table+" where id='"+id+"";    
                  
                  List
          <BaseDomainObj> ls=search(sql);
                  
                  
          if(ls.size()==1){
                      
          return search(sql).get(0);
                  }

                  
          else{
                      
          return null;
                  }
                  
              }

              
              
          /**
               * 刪除一個對象
               * 
          @param obj
               
          */

              
          public void delete(BaseDomainObj obj){
                  String sql
          ="delete from "+table+" where id='"+obj.getId()+"";
                  jdbcTemplate.execute(sql);
              }

              

              
          public String getTable() {
                  
          return table;
              }


              
          public void setTable(String table) {
                  
          this.table = table;
              }


              
          public DataFieldMaxValueIncrementer getIdGenarater() {
                  
          return idGenarater;
              }


              
          public void setIdGenarater(DataFieldMaxValueIncrementer idGenarater) {
                  
          this.idGenarater = idGenarater;
              }
              
          }


          posted on 2008-09-01 11:30 sitinspring 閱讀(4451) 評論(1)  編輯  收藏 所屬分類: SSH

          評論

          # re: Spring的ID增長器使用示例(MySql數據庫) 2015-03-09 14:33 zuidaima

          Spring AOP注解通過@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入屬性的配置文件詳解 http://zuidaima.com/share/1772661373422592.htm  回復  更多評論   

          sitinspring(http://www.aygfsteel.com)原創,轉載請注明出處.
          主站蜘蛛池模板: 阿城市| 衡阳市| 大厂| 宜都市| 建阳市| 安远县| 客服| 增城市| 吉木萨尔县| 砚山县| 天台县| 双桥区| 德江县| 丰原市| 北川| 桐乡市| 怀宁县| 开鲁县| 凉山| 盈江县| 林周县| 瑞昌市| 屯留县| 平潭县| 托克托县| 安泽县| 中牟县| 克山县| 桑日县| 固镇县| 尖扎县| 宁阳县| 涞水县| 延津县| 皮山县| 肃南| 明光市| 上高县| 平远县| 石棉县| 聂荣县|