WEB开发网
开发学院软件开发Java Scala与Spring:强强联合 阅读

Scala与Spring:强强联合

 2010-08-04 00:00:00 来源:WEB开发网   
核心提示: jpaTemplate.execute((em:EntityManager)=>em.createQuery(…)//etc.); 问题在于如何通过优雅的方式实现这个功能,关于getter和setter:使用了Spring bean的类至少要有一个setter方法,Scala

jpaTemplate.execute((em:EntityManager) => em.createQuery(…)// etc. );  问题在于如何通过优雅的方式实现这个功能。

关于getter和setter:使用了Spring bean的类至少要有一个setter方法,该方法对应于特定bean的名称。毫无疑问,这些setter是框架所需的样板代码,如果不使用构造器注入也能避免这一点岂不美哉?

实现

如果用Scala实现泛型与Person DAO,那么上面提到的一切问题都将迎刃而解,请看:

object GenericJpaDaoSupport { 
 
  implicit def jpaCallbackWrapper[T](func:(EntityManager) => T) = { 
  new JpaCallback { 
   def doInJpa(session:EntityManager ) = func(session).asInstanceOf[Object]} 
  } 
} 
 
import Scala.collection.jcl.Conversions._ 
class GenericJpaDaoSupport[T](val entityClass:Class[T]) extends JpaDaoSupport with GenericDao[T] { 
 
   def findAll():List[T] = { 
      getJpaTemplate().find("from " + entityClass.getName).toList.asInstanceOf[List[T]] 
   } 
 
   def save(entity:T) :T = { 
    getJpaTemplate().persist(entity) 
    entity 
   } 
 
   def remove(entity:T) = { 
    getJpaTemplate().remove(entity);     
   } 
 
   def findById(id:Serializable):T = { 
    getJpaTemplate().find(entityClass, id).asInstanceOf[T]; 
   } 
} 
 
class JpaPersonDao extends GenericJpaDaoSupport(classOf[Person]) with PersonDao { 
   
    def findByName(name:String) = { getJpaTemplate().executeFind( (em:EntityManager) => { 
      val query = em.createQuery("SELECT p FROM Person p WHERE p.name like :name"); 
      query.setParameter("name", "%" + name + "%"); 
      query.getResultList(); 
   }).asInstanceOf[List[Person]].toList 
   } 
}

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Scala Spring 强强联合

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接