Spring鏁村悎JDBC / Hibernate-澧炲垹鏀规煡
spring瀵规暟鎹簱璁块棶鐨勬敮鎸侊細
1銆佸DAO鎻愪緵浠ヤ笅鏀寔锛?br>聽涓€鑷寸殑寮傚父澶勭悊DataAccessException
聽涓€鑷寸殑DAO鎶借薄绫籇aoSupport銆乀emplate
2銆佹暣鍚圝DBC锛?/p>
聽瀹氫箟鏁版嵁搴撹繛鎺ユ睜dataSource锛?/span>
聽涓嶇户鎵縅dbcDaoSupport绫绘椂锛屾墜鍔ㄥ湪xml鏂囦欢涓皢dataSource灞炴€у紩鍏ュ埌璁块棶鏁版嵁搴揵ean缁勪欢锛屽湪DaoImp绫讳腑缁橨dbcTemplate娉ㄥ叆dataSource鍚庝娇鐢紱
聽缁ф壙JdbcDaoSupport绫伙紝鍙洿鎺ヤ娇鐢↗dbcTemplate锛?/span>
聽聽 浣跨敤鐨凙PI:
聽jdbcDaoSupport------鐢ㄤ簬鎻愪緵缂栧啓DAO缁勪欢鐨勬敮鎸?br>聽jdbcTemplate--------鐢ㄤ簬澧炲垹鏀规煡鎿嶄綔
聽update()------------澧炲垹鏀规搷浣?br>聽query()銆乹ueryForObject()銆乹ueryForInt绛?----鏌ヨ鎿嶄綔
聽execute()-----------鍏朵粬璇彞锛屽锛氬缓琛ㄣ€佷慨鏀硅〃缁撴瀯璇彞
聽鍏朵粬鎿嶄綔------------鎵瑰鐞嗐€佽繑鍥炶嚜鍔ㄥ闀夸富閿€?br>聽聽聽 XML閰嶇疆锛?/strong>
聽瀹氫箟杩炴帴姹?lt;bean聽 id="dataSource"/>-------->灏哾ataSource娉ㄥ叆缁欐墍鏈塂AO缁勪欢聽
聽
渚嬪瓙锛?/strong>
---銆嬪鍏ユ灦鍖咃細commons-dbcp.jar杩炴帴姹犮€乧ommons-collections.jar銆乧ommons-pool.jar锛堣繛鎺ユ睜缁勪欢锛氱鐞哻onnection瀵硅薄鐨勫垱寤恒€侀攢姣佸拰鎺у埗鍏舵暟閲忥級
---銆嬪垱寤烘暟鎹簱
---銆嬪湪applicationContext.xml涓厤缃繛鎺ユ睜锛坉ataSource浠?lt;bean>缁勪欢鐨勫舰寮忛厤缃級:鍖呮嫭杩炴帴姹犵殑瀹氫箟 + 灞炴€ф敞鍏ュ埌璋冪敤bean缁勪欢
聽聽聽聽 娉ㄦ剰锛氬彧鑳藉啓dataSource ,鍒殑鍚嶅瓧涓嶈
聽<bean聽 id="jdbcUserDao"聽 class="JdbcUserDao">聽
聽聽 <property聽 name="dataSource"聽 ref="dataSource"> </property>
聽</bean>
---銆嬫帴鍙serDao鐨勫疄鐜扮被(姝ょ被闇€瑕佽闂暟鎹簱)涓敞鍏ataSource杩炴帴姹狅細
聽1銆佷笉缁ф壙JdbcDaoSupport绫荤殑瀹炵幇鏂规硶(鐢╯et鏂规硶娉ㄥ叆dataSource)锛?/strong>
聽聽聽聽 public class JdbcUserDao聽 implements聽 UserDao{
聽聽聽 聽private聽 JdbcTemplate聽 template;
聽聽public聽 void聽 setDataSource(DataSource聽 dataSource){
聽聽聽聽 template = new聽 JdbcTemplate(dataSource);
聽聽}
聽聽public聽 void save(User user){
聽聽聽聽 String聽 sql="insert into d_user(email,name,password,code,time,ip) values(?,?,?,?,?,?)";
聽聽聽聽 template.update(sql,new Object[]{user.getEmail(),....user.getIp()});
聽聽}
聽聽聽聽.
聽聽聽聽.
聽聽聽聽.
聽聽聽聽 }
聽
聽<bean聽 id="jdbcUserDao"聽 class="JdbcUserDao">聽
聽聽 <property聽 name="dataSource"聽 ref="dataSource"> </property>
聽</bean>
聽2銆佺户鎵縅dbcDaoSupport绫荤殑瀹炵幇鏂规硶(Spring妗嗘灦鍙互甯姪鎴戜滑瀹屾垚dataSource鐨勬敞鍏?锛?/strong>
聽聽聽 public class JdbcUserDao聽 extends JdbcDaoSupport聽 implements聽 UserDao{
聽聽聽 聽public聽 void save(User user){
聽聽聽聽 String聽 sql="insert into d_user(email,name,password,code,time,ip) values(?,?,?,?,?,?)";
聽聽聽聽 this.getJdbcTemplate().update(sql,new Object[]{user.getEmail(),....user.getIp()});
聽聽}
聽聽public聽 void update(User user){
聽聽聽聽 String聽 sql="update d_user set email=?,name=?,password=?,code=?,time=?,ip=? where id=?";
聽聽聽聽 this.getJdbcTemplate().update(sql,new Object[]{user.getEmail(),....user.getIp()});
聽聽}
聽聽public聽 void deleteById(int id){
聽聽聽聽 String聽 sql="delete from聽 d_user聽 where聽 id=?";
聽聽聽聽 this.getJdbcTemplate().update(sql,new Object[]{id});
聽聽}
聽聽public聽 User findById(int id){
聽聽聽聽 String聽 sql="select * from聽 d_user聽 where聽 id=?";
聽聽聽聽 return聽 (User)this.getJdbcTemplate().queryForObject(sql,new Object[]{id},new UserMapper());
聽聽}
聽聽public聽 List<User> findAll(){
聽聽聽聽 String聽 sql="select * from聽 d_user";
聽聽聽聽 List聽聽聽 list=this.getJdbcTemplate().query(sql,new UserMapper());
聽聽聽聽 return聽 list;
聽聽}
聽聽public聽 int聽 count(){
聽聽聽聽 String聽 sql="select count(*) from聽 d_user";
聽聽聽聽 return聽 this.getJdbcTemplate().queryForInt(sql);
聽聽}
聽聽聽 }
聽//鏌ヨ鏂规硶闇€瑕侀澶栧畾涔夋槧灏勭被锛氬畬鎴愮粨鏋滈泦瀛楁鍊间笌User灞炴€т箣闂寸殑鏄犲皠鍏崇郴
聽//UserMapper瀹炵幇RowMapper鎺ュ彛锛岃鐩栨柟娉昺apRow瀹屾垚浠庣粨鏋滈泦涓В鏋愬嚭缁撴灉鍋氭搷浣?/span>
聽聽public聽 class UserMapper聽 implements聽 RowMapper{
聽聽聽聽 public聽 Object聽 mapRow(ResultSet rs, int index) throws SQLException{
聽聽聽User聽 user = new User();
聽聽聽user.setId(rs.getInt("id"));
聽聽聽user.setEmail(rs.getString("email"));
聽聽聽user.setName(rs.getString("name"));
聽聽聽聽.
聽聽聽聽.
聽聽聽聽.
聽聽聽return聽 user;
聽聽聽聽 }
聽聽//鏀硅繘鐗堬細
聽聽聽聽 private聽 static final String ID="id";
聽聽聽聽 public聽 Object聽 mapRow(ResultSet rs, int index) throws SQLException{
聽聽聽User聽 user = new User();
聽聽聽user.setId(rs.getInt(ID));
聽聽聽if(rs.getString("email") != null){聽//涓洪槻姝s.getString(XXX)鍙栧嚭null鍊煎悗鐩存帴鏀惧叆user,鍔爄f鍒ゆ柇
聽聽聽聽聽 user.setEmail(rs.getString("email"));
聽聽聽}
聽聽聽user.setName(rs.getString("name"));
聽聽聽聽.
聽聽聽聽.
聽聽聽聽.
聽聽聽return聽 user;
聽聽聽聽 }
聽聽}
聽
聽
3銆佹暣鍚圚ibernate
锛?span style="color: #0000ff;">瀹氫箟鏁版嵁搴撹繛鎺ユ睜dataSource锛涘畾涔塻essionFactory锛涘皢dataSource銆佽〃鏄犲皠javaBean.xml銆乭ibernateProperties寮曞叆鍒皊essionFactory涓紱
聽涓嶇户鎵縃ibernateDaoSupport绫绘椂锛屾墜鍔ㄥ湪xml鏂囦欢涓皢sessionFactory灞炴€у紩鍏ュ埌璁块棶鏁版嵁搴揵ean缁勪欢锛屽湪DaoImp绫讳腑缁橦ibernateTemplate娉ㄥ叆sessionFactory鍚庝娇鐢紱
聽缁ф壙HibernateDaoSupport绫伙紝鍙洿鎺ヤ娇鐢℉ibernateTemplate锛?br>聽聽 浣跨敤鐨凙PI锛?/strong>
聽HibernateDaoSupport------鎻愪緵缂栧啓DAO缁勪欢鐨勬敮鎸?br>聽HibernateTemplate--------鎻愪緵浜嗗鍒犳敼鏌ユ搷浣?br>聽save()-------------------淇濆瓨
聽update()-----------------鏇存柊
聽delete()-----------------鍒犻櫎
聽find()-------------------鏌ヨ
聽浣跨敤HibernateDaoSupport鎻愪緵鐨則his.getSession()鑾峰彇Session瀵硅薄-------鍒嗛〉鏌ヨ
聽聽聽 XML閰嶇疆锛?/strong>
聽棣栧厛閰嶇疆杩炴帴姹燿ataSource----->閰嶇疆SessionFactory------>灏哠essionFactory娉ㄥ叆缁欐墍鏈塂AO缁勪欢
聽
渚嬪瓙锛?/strong>
------銆嬪€掑叆Hibernate鏋跺寘(妗嗘灦鏁村悎鏃讹紝浼氶亣鍒癹ar鍖呭啿绐佺殑闂锛汼pring瀵笻ibernate鐨勬暣鍚堟槸鍦↗DBC涔嬩笂鐨?
------銆嬮厤缃暟鎹簮dataSource锛氬畾涔塪ataSource <bean>缁勪欢
------銆嬮厤缃甋essionFactory锛氬畾涔塻essionFactory <bean>缁勪欢锛?br>聽聽聽聽聽聽 <bean聽 id="sessionFactory"聽 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
聽聽聽聽聽聽聽聽聽 <property聽 name="dataSource" ref="dataSource"></property>聽----寮曞叆杩炴帴姹犲睘鎬?br>聽聽聽聽聽聽聽聽聽 <property聽 name="mappingResources">聽聽聽聽----寮曞叆鏄犲皠鏂囦欢灞炴€?br>聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <list>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <value>...User.hbm.xml聽 </value>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </list>
聽聽聽聽聽聽聽聽聽</property>
聽聽聽聽聽聽聽 聽<property聽 name="hibernateProperties">聽聽聽----寮曞叆閰嶇疆Hibernate閰嶇疆
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <props>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <prop聽 key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <prop聽 key="hibernate.show_sql">true</prop>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<prop聽 key="hibernate.format_sql">true</prop>
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽</props>
聽聽聽聽聽聽聽聽聽</property>
聽聽</bean>
聽
------銆嬮厤缃槧灏勬枃浠?+ 鏄犲皠鏂囦欢瀵瑰簲鐨刯avaBean绫伙紙Hibernate鐨勬爣閰嶏級
------銆嬫帴鍙serDao鐨勫疄鐜扮被(姝ょ被闇€瑕佽闂暟鎹簱)涓?
1銆佷笉缁ф壙HibernateDaoSupport绫荤殑瀹炵幇鏂规硶(鐢╯et鏂规硶娉ㄥ叆SessionFactory)锛?/strong>
聽聽聽聽 public class JDBCUserDao聽 implements聽 UserDao{
聽聽聽 聽private聽 HibernateTemplate聽 template;
聽聽public聽 void聽 setSessionFactory(SessionFactory聽 sessionFactory){
聽聽聽聽 template = new聽 HibernateTemplate(sessionFactory);
聽聽}
聽聽public聽 void save(User user){
聽聽聽聽 template.save(user);
聽聽}
聽聽聽聽.
聽聽聽聽.
聽聽聽聽.
聽聽聽聽 }
聽<bean聽 id="hibernateUserDao"聽 class="HibernateUserDao">
聽聽聽 <property聽 name="sessionFactory"聽 ref="sessionFactory"></property>
聽</bean>
2銆佺户鎵縃ibernateDaoSupport绫荤殑瀹炵幇鏂规硶(Spring妗嗘灦鍙互甯姪鎴戜滑瀹屾垚SessionFactory鐨勬敞鍏?锛?/strong>
聽public class HibernateUserDao聽 extends HibernateDaoSupport聽 implements聽 UserDao{
聽聽聽聽 public聽 void save(User user){
聽聽聽聽 this.getHibernateTemplate().save(user);
聽聽}
聽聽聽聽 public聽 void update(User user){
聽聽聽聽 this.getHibernateTemplate().update(user);
聽聽}
聽聽聽聽 public聽 void deleteById(int id){
聽聽聽聽 User聽 user = findById(id);
聽聽聽聽 this.getHibernateTemplate().delete(user);
聽聽}
聽聽聽聽 public聽 User findById(int id){
聽聽聽聽 String聽 hql="from聽 d_user聽 where聽 id=?";
聽聽聽聽 List聽聽聽 list=this.getHibernateTemplate().find(hql, new Object[]{id});
聽聽聽聽 if(!list.isEmpty()){
聽聽聽return聽 (User)list.get(0);
聽聽聽聽 }
聽聽聽聽 return聽 null;
聽聽}
聽聽聽聽 public聽 List<User> findAll(){
聽聽聽聽 String聽 hql="from聽 d_user";
聽聽聽聽 return聽 this.getHibernateTemplate().find(hql);
聽聽}
聽聽聽聽 public聽 int聽 count(){
聽聽聽聽 String聽 hql="select count(*) from聽 d_user";
聽聽聽聽 List聽聽聽 list=this.getHibernateTemplate().find(hql);
聽聽聽聽 return聽 Integer.valueOf(list.get(0).toString());
聽聽}
聽}