免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Spring、Hibernate和范型
      去年6月份開始接觸Java,到8,9月份基本掌握Spring,Hibernate,Struts,然后自己搭建了一個(gè)框架,并成功的應(yīng)用到項(xiàng)目上。應(yīng)該說,從那個(gè)時(shí)候起,我就開始思考這個(gè)問題,這個(gè)過程持續(xù)了很長的時(shí)間。
大概是今年年后,51之前的這一段時(shí)間,突然想通了怎么在Spring里面實(shí)現(xiàn)范型,大致的實(shí)現(xiàn)如下:
public class UserServiceImp  implements  UserService {
        private RootService<T> rootService;
        public setRootService(RootService<T> rootService)
        {
              this.rootService = rootService;
        }
}
applicationContext.xml文件的相關(guān)配置
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation">
   <value>classpath:hibernate.cfg.xml</value>
  </property>
  <property name="mappingDirectoryLocations">
   <list>
    <value>classpath:/com/upup/bean/</value>
   </list>
  </property>
 </bean>
<bean id="rootService" class="com.upup.dao.RootServiceImp">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
 </bean>
<bean id="userService" class="com.upup.business.service.UserServiceImp">
  <property name="rootService">
   <ref local="rootService" />
  </property>
 </bean>
 
 
在解決了Spring的范型支持的問題后,開始考慮Hibernate的范型支持的問題,但始終受困于如何在范型類中根據(jù)T得到class,因?yàn)椴荒芎唵蔚恼{(diào)用T.getClass來獲得class,直到昨天看到江南白衣的blog上的那篇文章,終于發(fā)現(xiàn)了解決辦法,即定義一個(gè)范型父類AbstractBaseService,在其中實(shí)現(xiàn)基本的CRUD操作,然后UserService繼承AbstractBaseService,這樣完美的實(shí)現(xiàn)了Spring、Hibernate對于范型的支持,可以大量簡化開發(fā)工作。當(dāng)然,現(xiàn)在還有個(gè)局限,即只能通過繼承父類的方法來實(shí)現(xiàn)在父類中獲得T的class。
相關(guān)實(shí)現(xiàn)的代碼:
UserServiceImp.java
public class UserServiceImp extends AbstractBaseService<User> implements
  UserService {
 public UserServiceImp()
 {
  
  super("User");
 }
@Override
 public User add(User obj) {
  obj = super.add(obj);
  this.getCache().addToCache(obj, this.getGetAllKey(), obj.getId());
  this.getCache().putCountKey(this.getGetAllCountKey());
  return obj;
 }
}
AbstractBaseService.java
public abstract class AbstractBaseService<T>{
 private Class<T> entityClass;
 private Log logger = null;
 private String tableName;
 private RootService<T> rootService;
 private CacheService<T> cache;
 
public void setCache(CacheService<T> cacheService) {
  this.cache = cacheService;
  cache.setEntityClass(entityClass);
  cache.setTableName(tableName);
 }
public AbstractBaseService(String tableName) {
  this.tableName = tableName;
  entityClass = (Class<T>) ((ParameterizedType) getClass()
    .getGenericSuperclass()).getActualTypeArguments()[0];
  logger = LogFactory.getLog(entityClass);
 }
public T findByID(Serializable id) {
  return cache.getObjectFormCacheByID(id.toString());
 }
 
 public T add(T obj)
 {
  try {
   obj = rootService.insertObject(obj);
   
   return obj;
  } catch (DataAccessException ex) {
   logger.error("add(T obj):", ex.getCause());
   return null;
  }
 }
 
 public T save(T obj) {
  try {
   rootService.saveObject(obj);
   return obj;
  } catch (DataAccessException ex) {
   logger.error("save(T obj):" + ex);
   return null;
  }
 }
 
 public void delete(T obj)
 {
  rootService.deleteObject(obj);
 }
}
以上代碼也考慮對緩存的支持,關(guān)于緩存的實(shí)現(xiàn),留待下次專門討論。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
簡單實(shí)現(xiàn)Hibernate分表的select,insert,delete及所有操作
hibernate連接mysql示范
使用Cglib動(dòng)態(tài)創(chuàng)建Java類,解決你意想不到的問題,讓復(fù)雜變簡單
xsd文件插入dataset
Hibernate入門教程(純Eclipse版)
一道多態(tài)性的題,實(shí)在理解不了了~~~~
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服